From 94890513b56ebfd43445c6537d898177dee4188f Mon Sep 17 00:00:00 2001 From: Daniel Marquez Date: Tue, 19 Aug 2025 09:53:06 -0500 Subject: [PATCH 01/10] Add support for make var expansion --- MODULE.bazel | 1 + WORKSPACE | 16 ++++++++++++++++ doc_build/BUILD | 1 + pkg/private/tar/tar.bzl | 12 ++++++++++-- tests/tar/BUILD | 11 +++++++++++ tests/tar/pkg_tar_test.py | 9 +++++++++ 6 files changed, 48 insertions(+), 2 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 601e36a5..b5282bcd 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -9,6 +9,7 @@ module( bazel_dep(name = "rules_license", version = "1.0.0") bazel_dep(name = "rules_python", version = "1.0.0") bazel_dep(name = "bazel_skylib", version = "1.7.1") +bazel_dep(name = "aspect_bazel_lib", version = "2.14.0") # Only for development bazel_dep(name = "platforms", version = "0.0.10", dev_dependency = True) diff --git a/WORKSPACE b/WORKSPACE index aeea9ebd..d27062fc 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -81,3 +81,19 @@ http_archive( load("@rules_cc//cc:repositories.bzl", "rules_cc_dependencies") rules_cc_dependencies() + +http_archive( + name = "aspect_bazel_lib", + sha256 = "6d636cfdecc7f5c1a5d82b9790fb5d5d5e8aa6ea8b53a71a75f1ba53c8d29f61", + strip_prefix = "bazel-lib-2.21.0", + url = "https://github.com/bazel-contrib/bazel-lib/releases/download/v2.21.0/bazel-lib-v2.21.0.tar.gz", +) + +aspect_bazel_lib_dependencies() +load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") +load("@platforms//host:extension.bzl", "host_platform_repo") + +maybe( + host_platform_repo, + name = "host_platform", +) diff --git a/doc_build/BUILD b/doc_build/BUILD index 14db111b..e4d093b0 100644 --- a/doc_build/BUILD +++ b/doc_build/BUILD @@ -72,6 +72,7 @@ genrule( deps = [ ":rules_pkg_lib", "//toolchains/rpm:standard_package", + "@aspect_bazel_lib//lib:expand_make_vars", ], ) for rule, src in ORDER diff --git a/pkg/private/tar/tar.bzl b/pkg/private/tar/tar.bzl index 1d4755af..ea370c48 100644 --- a/pkg/private/tar/tar.bzl +++ b/pkg/private/tar/tar.bzl @@ -13,6 +13,7 @@ # limitations under the License. """Rules for making .tar files.""" +load("@aspect_bazel_lib//lib:expand_make_vars.bzl", "expand_variables") load("//pkg:providers.bzl", "PackageVariablesInfo") load( "//pkg/private:pkg_files.bzl", @@ -104,7 +105,8 @@ def _pkg_tar_impl(ctx): args.add("--mtime", "portable") if ctx.attr.modes: for key in ctx.attr.modes: - args.add("--modes", "%s=%s" % (_quote(key), ctx.attr.modes[key])) + expanded_key = expand_variables(ctx, key) + args.add("--modes", "%s=%s" % (_quote(expanded_key), ctx.attr.modes[key])) if ctx.attr.owners: for key in ctx.attr.owners: args.add("--owners", "%s=%s" % (_quote(key), ctx.attr.owners[key])) @@ -119,8 +121,14 @@ def _pkg_tar_impl(ctx): # Now we begin processing the files. path_mapper = None + expanded_remap_paths = {} if ctx.attr.remap_paths: - path_mapper = lambda path: _remap(ctx.attr.remap_paths, path) + for prefix, replacement in ctx.attr.remap_paths.items(): + expanded_prefix = expand_variables(ctx, prefix) + expanded_replacement = expand_variables(ctx, replacement) + expanded_remap_paths[expanded_prefix] = expanded_replacement + + path_mapper = lambda path: _remap(expanded_remap_paths, path) mapping_context = create_mapping_context_from_ctx( ctx, diff --git a/tests/tar/BUILD b/tests/tar/BUILD index 3164162a..de0b88ef 100644 --- a/tests/tar/BUILD +++ b/tests/tar/BUILD @@ -464,6 +464,7 @@ py_test( ":test-pkg-tar-from-pkg-files-with-attributes", ":test-pkg-tar-with-attributes", ":test-remap-paths-tree-artifact", + ":test-remap-paths-variables", ":test-respect-externally-defined-duplicates.tar", ":test-tar-compression_level--1", ":test-tar-compression_level-3", @@ -628,6 +629,16 @@ pkg_tar( }, ) +pkg_tar( + name = "test-remap-paths-variables", + srcs = [ + ":tree_artifact_to_rename", + ], + remap_paths = { + "/rename_me": "$(COMPILATION_MODE)", + }, +) + # # Test with symlinks # diff --git a/tests/tar/pkg_tar_test.py b/tests/tar/pkg_tar_test.py index 245bb797..26738f8a 100644 --- a/tests/tar/pkg_tar_test.py +++ b/tests/tar/pkg_tar_test.py @@ -285,6 +285,15 @@ def test_remap_paths_tree_artifact(self): ] self.assertTarFileContent('test-remap-paths-tree-artifact.tar', content) + def test_remap_paths_make_variables(self): + content = [ + {'name': 'fastbuild', 'isdir': True}, + {'name': 'fastbuild/a'}, + {'name': 'fastbuild/rename_me', 'isdir': True}, + {'name': 'fastbuild/rename_me/should_not_rename'}, + ] + self.assertTarFileContent('test-remap-paths-variables.tar', content) + def test_externally_defined_duplicate_structure(self): content = [ {'name': './a'}, From 79f908bc02eceade3bf513743f2a5d1f61eb0dfd Mon Sep 17 00:00:00 2001 From: Daniel Marquez Date: Tue, 19 Aug 2025 09:54:46 -0500 Subject: [PATCH 02/10] test --- WORKSPACE | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index d27062fc..bfc9d88b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -88,12 +88,13 @@ http_archive( strip_prefix = "bazel-lib-2.21.0", url = "https://github.com/bazel-contrib/bazel-lib/releases/download/v2.21.0/bazel-lib-v2.21.0.tar.gz", ) +load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains") -aspect_bazel_lib_dependencies() -load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") -load("@platforms//host:extension.bzl", "host_platform_repo") +# aspect_bazel_lib_dependencies() +# load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") +# load("@platforms//host:extension.bzl", "host_platform_repo") -maybe( - host_platform_repo, - name = "host_platform", -) +# maybe( +# host_platform_repo, +# name = "host_platform", +# ) From 6b68cae979fdd09276b02170d2b93e5fdb3bd38e Mon Sep 17 00:00:00 2001 From: Daniel Marquez Date: Tue, 19 Aug 2025 09:55:54 -0500 Subject: [PATCH 03/10] fix --- WORKSPACE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WORKSPACE b/WORKSPACE index bfc9d88b..18f5feb3 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -90,7 +90,7 @@ http_archive( ) load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains") -# aspect_bazel_lib_dependencies() +aspect_bazel_lib_dependencies() # load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") # load("@platforms//host:extension.bzl", "host_platform_repo") From f4fd63b316edf43fa749797692269dc7ea8b6f17 Mon Sep 17 00:00:00 2001 From: Daniel Marquez Date: Tue, 19 Aug 2025 09:57:01 -0500 Subject: [PATCH 04/10] test --- WORKSPACE | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 18f5feb3..b501bfbb 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -91,10 +91,10 @@ http_archive( load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains") aspect_bazel_lib_dependencies() -# load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") -# load("@platforms//host:extension.bzl", "host_platform_repo") +load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") +load("@platforms//host:extension.bzl", "host_platform_repo") -# maybe( -# host_platform_repo, -# name = "host_platform", -# ) +maybe( + host_platform_repo, + name = "host_platform", +) From 042c56f7bafb2ee695b451e3b7c3c0b98592794e Mon Sep 17 00:00:00 2001 From: Daniel Marquez Date: Wed, 20 Aug 2025 11:13:00 -0500 Subject: [PATCH 05/10] test --- WORKSPACE | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/WORKSPACE b/WORKSPACE index b501bfbb..45341f4a 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -82,15 +82,34 @@ load("@rules_cc//cc:repositories.bzl", "rules_cc_dependencies") rules_cc_dependencies() +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + http_archive( name = "aspect_bazel_lib", sha256 = "6d636cfdecc7f5c1a5d82b9790fb5d5d5e8aa6ea8b53a71a75f1ba53c8d29f61", strip_prefix = "bazel-lib-2.21.0", url = "https://github.com/bazel-contrib/bazel-lib/releases/download/v2.21.0/bazel-lib-v2.21.0.tar.gz", ) + load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains") +# Required bazel-lib dependencies + aspect_bazel_lib_dependencies() + +# Required rules_shell dependencies +load("@rules_shell//shell:repositories.bzl", "rules_shell_dependencies", "rules_shell_toolchains") + +rules_shell_dependencies() + +rules_shell_toolchains() + +# Register bazel-lib toolchains + +aspect_bazel_lib_register_toolchains() + +# Create the host platform repository transitively required by bazel-lib + load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") load("@platforms//host:extension.bzl", "host_platform_repo") From 74402fecd97a599a453bf83f22b6bde2a2a0333b Mon Sep 17 00:00:00 2001 From: Daniel Marquez Date: Wed, 20 Aug 2025 11:20:30 -0500 Subject: [PATCH 06/10] test --- WORKSPACE | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 45341f4a..21195d18 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -91,29 +91,29 @@ http_archive( url = "https://github.com/bazel-contrib/bazel-lib/releases/download/v2.21.0/bazel-lib-v2.21.0.tar.gz", ) -load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains") +# load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains") -# Required bazel-lib dependencies +# # Required bazel-lib dependencies -aspect_bazel_lib_dependencies() +# aspect_bazel_lib_dependencies() -# Required rules_shell dependencies -load("@rules_shell//shell:repositories.bzl", "rules_shell_dependencies", "rules_shell_toolchains") +# # Required rules_shell dependencies +# load("@rules_shell//shell:repositories.bzl", "rules_shell_dependencies", "rules_shell_toolchains") -rules_shell_dependencies() +# rules_shell_dependencies() -rules_shell_toolchains() +# rules_shell_toolchains() -# Register bazel-lib toolchains +# # Register bazel-lib toolchains -aspect_bazel_lib_register_toolchains() +# aspect_bazel_lib_register_toolchains() -# Create the host platform repository transitively required by bazel-lib +# # Create the host platform repository transitively required by bazel-lib -load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") -load("@platforms//host:extension.bzl", "host_platform_repo") +# load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") +# load("@platforms//host:extension.bzl", "host_platform_repo") -maybe( - host_platform_repo, - name = "host_platform", -) +# maybe( +# host_platform_repo, +# name = "host_platform", +# ) From 72cfb9e3a334a6e43435c5b5206229dbe9d6c774 Mon Sep 17 00:00:00 2001 From: Daniel Marquez Date: Wed, 20 Aug 2025 11:24:53 -0500 Subject: [PATCH 07/10] test --- WORKSPACE | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 21195d18..8ca0f8cb 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -91,29 +91,7 @@ http_archive( url = "https://github.com/bazel-contrib/bazel-lib/releases/download/v2.21.0/bazel-lib-v2.21.0.tar.gz", ) -# load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains") +load("@bazel_tools//tools/platforms:platforms.bzl", "local_config_platform") -# # Required bazel-lib dependencies +local_config_platform(name = "local_config_platform") -# aspect_bazel_lib_dependencies() - -# # Required rules_shell dependencies -# load("@rules_shell//shell:repositories.bzl", "rules_shell_dependencies", "rules_shell_toolchains") - -# rules_shell_dependencies() - -# rules_shell_toolchains() - -# # Register bazel-lib toolchains - -# aspect_bazel_lib_register_toolchains() - -# # Create the host platform repository transitively required by bazel-lib - -# load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") -# load("@platforms//host:extension.bzl", "host_platform_repo") - -# maybe( -# host_platform_repo, -# name = "host_platform", -# ) From ae736c9b7de1ef80e01ab89763fbcf13597ca97d Mon Sep 17 00:00:00 2001 From: Daniel Marquez Date: Wed, 20 Aug 2025 11:32:06 -0500 Subject: [PATCH 08/10] test --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index b5282bcd..31d3a40e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -9,7 +9,7 @@ module( bazel_dep(name = "rules_license", version = "1.0.0") bazel_dep(name = "rules_python", version = "1.0.0") bazel_dep(name = "bazel_skylib", version = "1.7.1") -bazel_dep(name = "aspect_bazel_lib", version = "2.14.0") +bazel_dep(name = "aspect_bazel_lib", version = "2.21.0") # Only for development bazel_dep(name = "platforms", version = "0.0.10", dev_dependency = True) From 7147e506ed02ec54c045e89cbb8dc2cba0bb2bb8 Mon Sep 17 00:00:00 2001 From: Daniel Marquez Date: Wed, 20 Aug 2025 11:35:24 -0500 Subject: [PATCH 09/10] test --- WORKSPACE | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 8ca0f8cb..e1dd4290 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -91,7 +91,7 @@ http_archive( url = "https://github.com/bazel-contrib/bazel-lib/releases/download/v2.21.0/bazel-lib-v2.21.0.tar.gz", ) -load("@bazel_tools//tools/platforms:platforms.bzl", "local_config_platform") +# load("@bazel_tools//tools/platforms:platforms.bzl", "local_config_platform") -local_config_platform(name = "local_config_platform") +# local_config_platform(name = "local_config_platform") From ede3b6eea5ee50017c4ab9e1d8a6e8b06037fdb2 Mon Sep 17 00:00:00 2001 From: Daniel Marquez Date: Wed, 20 Aug 2025 11:39:21 -0500 Subject: [PATCH 10/10] fix --- WORKSPACE | 7 ------- 1 file changed, 7 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index e1dd4290..80a0f619 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -82,16 +82,9 @@ load("@rules_cc//cc:repositories.bzl", "rules_cc_dependencies") rules_cc_dependencies() -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") - http_archive( name = "aspect_bazel_lib", sha256 = "6d636cfdecc7f5c1a5d82b9790fb5d5d5e8aa6ea8b53a71a75f1ba53c8d29f61", strip_prefix = "bazel-lib-2.21.0", url = "https://github.com/bazel-contrib/bazel-lib/releases/download/v2.21.0/bazel-lib-v2.21.0.tar.gz", ) - -# load("@bazel_tools//tools/platforms:platforms.bzl", "local_config_platform") - -# local_config_platform(name = "local_config_platform") -