Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
load("@rules_python//python/pip_install:requirements.bzl", "compile_pip_requirements")
load("@rules_python//python:defs.bzl", "py_runtime", "py_runtime_pair")
load("@bazel_gazelle//:def.bzl", "gazelle", "gazelle_binary")

# gazelle:exclude internal_python_deps.bzl
Expand All @@ -21,3 +22,24 @@ compile_pip_requirements(
requirements_in = "requirements.in",
requirements_txt = "requirements.txt",
)

py_runtime(
name = "container_py3_runtime",
interpreter_path = "/usr/bin/python",
python_version = "PY3",
)

py_runtime_pair(
name = "container_py_runtime_pair",
py2_runtime = None,
py3_runtime = ":container_py3_runtime",
)

toolchain(
name = "container_py_toolchain",
exec_compatible_with = [
"@io_bazel_rules_docker//platforms:run_in_container",
],
toolchain = ":container_py_runtime_pair",
toolchain_type = "@bazel_tools//tools/python:toolchain_type",
)
19 changes: 19 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ load("//py:repositories.bzl", "rules_py_dependencies")
# Fetch dependencies which users need as well
rules_py_dependencies()

# Load the Python toolchain for rules_docker
register_toolchains("//:container_py_toolchain")

load("@rules_python//python:repositories.bzl", "python_register_toolchains")

python_register_toolchains(
Expand Down Expand Up @@ -59,3 +62,19 @@ go_rules_dependencies()
go_register_toolchains(version = "1.17.2")

gazelle_dependencies()

############################################
# rules_docker dependencies for containers
load(
"@io_bazel_rules_docker//repositories:repositories.bzl",
container_repositories = "repositories",
)

container_repositories()

load(
"@io_bazel_rules_docker//python3:image.bzl",
_py_image_repos = "repositories",
)

_py_image_repos()
8 changes: 8 additions & 0 deletions internal_deps.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,11 @@ def rules_py_internal_deps():
],
strip_prefix = "gcc-toolchain-9128134f01cc5e77f8394414ba76293ed22ffc77",
)

maybe(
http_archive,
name = "io_bazel_rules_docker",
sha256 = "bb4b7defb8e39e3fda5ca5b1535c9885a68d7dc22e48653baa8956fb101cba04",
strip_prefix = "rules_docker-7281c051b7071c065b8ac5b6210301c5f5504663",
urls = ["https://github.com/bazelbuild/rules_docker/archive/7281c051b7071c065b8ac5b6210301c5f5504663.zip"],
)
10 changes: 9 additions & 1 deletion py/private/py_binary.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,21 @@ def _py_binary_rule_imp(ctx):
],
)

imports = _py_library.make_imports_depset(ctx)

return [
DefaultInfo(
files = depset([entry, main]),
runfiles = runfiles,
executable = entry,
),
# Return PyInfo?
PyInfo(
imports = imports,
transitive_sources = srcs_depset,
has_py2_only_sources = False,
has_py3_only_sources = True,
uses_shared_libraries = False,
),
]

_attrs = dict({
Expand Down
24 changes: 24 additions & 0 deletions py/tests/containers/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
load("@io_bazel_rules_docker//contrib:test.bzl", "container_test")
load("@io_bazel_rules_docker//python3:image.bzl", "py3_image")
load("//py:defs.bzl", "py_binary")

py_binary(
name = "main_bin",
srcs = ["__main__.py"],
deps = [
"@pypi_colorama//:pkg",
],
)

py3_image(
name = "py_image",
srcs = ["__main__.py"],
main = "__main__.py",
deps = [":main_bin"],
)

container_test(
name = "py_image_test",
configs = ["py_image_test.yaml"],
image = ":py_image",
)
4 changes: 4 additions & 0 deletions py/tests/containers/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from colorama import Fore, Style

if __name__ == "__main__":
print(f"{Fore.GREEN}Hello rules_py{Style.RESET_ALL}")
14 changes: 14 additions & 0 deletions py/tests/containers/py_image_test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
schemaVersion: 2.0.0

fileExistenceTests:
- name: __main__ is present
path: /app/py/tests/containers/py_image.binary.runfiles/aspect_rules_py/py/tests/containers/__main__.py
- name: runfiles dependencies are present
path: /app/py/tests/containers/py_image.binary.runfiles/pypi_colorama/colorama/__init__.py
commandTests:
- name: can run binary
exitCode: 0
command: /usr/bin/python
args:
- /app/py/tests/containers/py_image.binary
expectedOutput: ["Hello rules_py"]