From d7325c9dd769f04b7b512326645638c190a3fb0f Mon Sep 17 00:00:00 2001 From: Nate England Date: Sat, 7 Mar 2026 10:42:57 -0500 Subject: [PATCH 1/4] Fix zipapp compression support for new `py_zipapp_binary` target --- python/private/zipapp/py_zipapp_rule.bzl | 2 +- tests/py_zipapp/BUILD.bazel | 21 +++++++++++++++++++++ tests/py_zipapp/venv_zipapp_test.py | 6 ++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/python/private/zipapp/py_zipapp_rule.bzl b/python/private/zipapp/py_zipapp_rule.bzl index a3d7fc2c6a..a6ab485fc4 100644 --- a/python/private/zipapp/py_zipapp_rule.bzl +++ b/python/private/zipapp/py_zipapp_rule.bzl @@ -112,7 +112,7 @@ def _create_zip(ctx, py_runtime, py_executable, stage2_bootstrap): format = "--legacy-external-runfiles=%s", ) if ctx.attr.compression: - zipper_args.add(ctx.attr.compression, "--compression=%s") + zipper_args.add(ctx.attr.compression, format = "--compression=%s") zipper_args.add("--runfiles-dir=runfiles") actions_run( diff --git a/tests/py_zipapp/BUILD.bazel b/tests/py_zipapp/BUILD.bazel index c236998cc0..4f05bfcc94 100644 --- a/tests/py_zipapp/BUILD.bazel +++ b/tests/py_zipapp/BUILD.bazel @@ -38,6 +38,27 @@ py_test( target_compatible_with = NOT_WINDOWS, ) +# Create the app with a supported level of compression +py_zipapp_binary( + name = "venv_zipapp_compressed", + binary = ":venv_bin", + target_compatible_with = NOT_WINDOWS, + compression = "4" +) + +py_test( + name = "venv_zipapp_compressed_test", + srcs = ["venv_zipapp_test.py"], + main = "venv_zipapp_test.py", + data = [":venv_zipapp_compressed"], + env = { + "BZLMOD_ENABLED": str(int(BZLMOD_ENABLED)), + "TEST_ZIPAPP": "$(location :venv_zipapp_compressed)", + "COMPRESSED": "1" + }, + target_compatible_with = NOT_WINDOWS, +) + py_binary( name = "system_python_bin", srcs = ["main.py"], diff --git a/tests/py_zipapp/venv_zipapp_test.py b/tests/py_zipapp/venv_zipapp_test.py index 9bb917156f..2f849d2bf4 100644 --- a/tests/py_zipapp/venv_zipapp_test.py +++ b/tests/py_zipapp/venv_zipapp_test.py @@ -71,6 +71,12 @@ def test_zipapp_structure(self): zipapp_path = os.environ["TEST_ZIPAPP"] with self._open_zipapp(zipapp_path) as zf: + info = zf.infolist()[0] + if int(os.getenv("COMPRESSED", 0)): + self.assertEqual(info.compress_type, zipfile.ZIP_DEFLATED) + else: + self.assertEqual(info.compress_type, zipfile.ZIP_STORED) + namelist = zf.namelist() if self._is_bzlmod_enabled(): From 70cac350f22c6672f025d80bd8720311c52c7593 Mon Sep 17 00:00:00 2001 From: Nate England Date: Sat, 7 Mar 2026 10:50:23 -0500 Subject: [PATCH 2/4] buildifier formatting --- tests/py_zipapp/BUILD.bazel | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/py_zipapp/BUILD.bazel b/tests/py_zipapp/BUILD.bazel index 4f05bfcc94..708d322f41 100644 --- a/tests/py_zipapp/BUILD.bazel +++ b/tests/py_zipapp/BUILD.bazel @@ -42,20 +42,20 @@ py_test( py_zipapp_binary( name = "venv_zipapp_compressed", binary = ":venv_bin", + compression = "4", target_compatible_with = NOT_WINDOWS, - compression = "4" ) py_test( name = "venv_zipapp_compressed_test", srcs = ["venv_zipapp_test.py"], - main = "venv_zipapp_test.py", data = [":venv_zipapp_compressed"], env = { "BZLMOD_ENABLED": str(int(BZLMOD_ENABLED)), + "COMPRESSED": "1", "TEST_ZIPAPP": "$(location :venv_zipapp_compressed)", - "COMPRESSED": "1" }, + main = "venv_zipapp_test.py", target_compatible_with = NOT_WINDOWS, ) From 845844304545a68b75fab069162fae63fa348a79 Mon Sep 17 00:00:00 2001 From: Nate England Date: Sat, 7 Mar 2026 10:51:19 -0500 Subject: [PATCH 3/4] make gemini happy --- tests/py_zipapp/venv_zipapp_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/py_zipapp/venv_zipapp_test.py b/tests/py_zipapp/venv_zipapp_test.py index 2f849d2bf4..fec4a544bd 100644 --- a/tests/py_zipapp/venv_zipapp_test.py +++ b/tests/py_zipapp/venv_zipapp_test.py @@ -72,7 +72,7 @@ def test_zipapp_structure(self): with self._open_zipapp(zipapp_path) as zf: info = zf.infolist()[0] - if int(os.getenv("COMPRESSED", 0)): + if os.getenv("COMPRESSED", "0") == "1": self.assertEqual(info.compress_type, zipfile.ZIP_DEFLATED) else: self.assertEqual(info.compress_type, zipfile.ZIP_STORED) From 80a0eb1b1d81f5097e273367738ca01cef6495e1 Mon Sep 17 00:00:00 2001 From: Nate England Date: Sat, 7 Mar 2026 12:51:04 -0500 Subject: [PATCH 4/4] update CHANGELOG --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c172b148ec..5f38346ea2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,7 +63,8 @@ END_UNRELEASED_TEMPLATE {#v0-0-0-fixed} ### Fixed -* Nothing fixed. +* (zipapp) Resolve issue passing through compression settings in + `py_zippapp_binary` targets. ([#3646](https://github.com/bazel-contrib/rules_python/issues/3646)) {#v0-0-0-added} ### Added