load("@bazel_skylib//rules:diff_test.bzl", "diff_test") load("@bazel_skylib//rules:write_file.bzl", "write_file") load( "@pip//:requirements.bzl", "data_requirement", "dist_info_requirement", "entry_point", "requirement", ) load("@rules_python//python:defs.bzl", "py_binary", "py_test") load("@rules_python//python:pip.bzl", "compile_pip_requirements") # Toolchain setup, this is optional. # Demonstrate that we can use the same python interpreter for the toolchain and executing pip in pip install (see WORKSPACE). # #load("@rules_python//python:defs.bzl", "py_runtime_pair") # #py_runtime( # name = "python3_runtime", # files = ["@python_interpreter//:files"], # interpreter = "@python_interpreter//:python_bin", # python_version = "PY3", # visibility = ["//visibility:public"], #) # #py_runtime_pair( # name = "my_py_runtime_pair", # py2_runtime = None, # py3_runtime = ":python3_runtime", #) # #toolchain( # name = "my_py_toolchain", # toolchain = ":my_py_runtime_pair", # toolchain_type = "@bazel_tools//tools/python:toolchain_type", #) # End of toolchain setup. py_binary( name = "main", srcs = ["main.py"], deps = [ requirement("boto3"), ], ) py_test( name = "test", srcs = ["test.py"], deps = [":main"], ) # For pip dependencies which have entry points, the `entry_point` macro can be # used from the generated `pip_install` repository to access a runnable binary. alias( name = "yamllint", actual = entry_point("yamllint"), ) # Check that our compiled requirements are up-to-date compile_pip_requirements( name = "requirements", extra_args = ["--allow-unsafe"], requirements_windows = ":requirements_windows.txt", ) # Test the use of all pip_install utilities in a single py_test py_test( name = "pip_install_test", srcs = ["pip_install_test.py"], data = [ ":yamllint", data_requirement("s3cmd"), dist_info_requirement("boto3"), ], env = { "WHEEL_DATA_CONTENTS": "$(rootpaths {})".format(data_requirement("s3cmd")), "WHEEL_DIST_INFO_CONTENTS": "$(rootpaths {})".format(dist_info_requirement("boto3")), "YAMLLINT_ENTRY_POINT": "$(rootpath :yamllint)", }, deps = ["@rules_python//python/runfiles"], ) # Assert that tags are present on resulting py_library, # which is useful for tooling that needs to reflect on the dep graph # to determine the packages it was built from. genquery( name = "yamllint_lib_by_version", expression = """ attr("tags", "\\bpypi_version=1.26.3\\b", "@pip_yamllint//:pkg") intersect attr("tags", "\\bpypi_name=yamllint\\b", "@pip_yamllint//:pkg") """, scope = [requirement("yamllint")], ) write_file( name = "write_expected", out = "expected", content = [ "@pip_yamllint//:pkg", "", ], ) diff_test( name = "test_query_result", file1 = "expected", file2 = "yamllint_lib_by_version", )