bazelbuild / rules_pkg

Bazel rules for creating packages of many types (zip, tar, deb, rpm, ...)
Apache License 2.0
212 stars 166 forks source link

Multiple subrpms with common prefix lead to conflicts, errors, "output xxx was not created" #875

Open wade-arista opened 1 week ago

wade-arista commented 1 week ago

Tested with bazel 7.2.1 and rules_pkg 1.0.0 (b4ac7e3197bc03d70d0d8d6af02c1d91ad0866e2).

I adapted the example from examples/rpm/subrpm by adding a second sub RPM with the name "subrpm2".

diff --git a/examples/rpm/subrpm/BUILD b/examples/rpm/subrpm/BUILD
index 0da73ca..3b24c68 100644
--- a/examples/rpm/subrpm/BUILD
+++ b/examples/rpm/subrpm/BUILD
@@ -39,6 +39,19 @@ pkg_sub_rpm(
     ],
 )

+pkg_files(
+    name = "second_subrpm_files",
+    srcs = ["sub2_file"],
+)
+
+pkg_sub_rpm(
+    name = "subrpm2",
+    package_name = "subrpm2",
+    summary = "Test subrpm2",
+    description = "Test subrpm2 description",
+    srcs = ["second_subrpm_files"],
+)
+
 pkg_files(
     name = "rpm_files",
     srcs = [
@@ -66,6 +79,7 @@ pkg_rpm(
     ],
     subrpms = [
         ":subrpm",
+        ":subrpm2",
     ],
 )

@@ -77,3 +91,9 @@ genrule(
     outs = ["content.txt"],
     cmd = "rpm2cpio $(locations :test-rpm) | cpio -ivt >$@",
 )
+
+genrule(
+    name = "sub2_file",
+    outs = ["sub2_file.txt"],
+    cmd = "echo sub2_file > $@",
+)

In the output we can see Saved subrpm sub RPM file twice, instead of once for subrpm and once for subrpm2. If I change the package name to second-subrpm then everything works as expected.

Saved subrpm sub RPM file to /cache_root/24aaac5cb2094aabf5993790af77bccc/sandbox/processwrapper-sandbox/25/execroot/_main/bazel-out/k8-fastbuild/bin/test-rpm-subrpm-1-0.x86_64.rpm
Saved subrpm sub RPM file to /cache_root/24aaac5cb2094aabf5993790af77bccc/sandbox/processwrapper-sandbox/25/execroot/_main/bazel-out/k8-fastbuild/bin/test-rpm-subrpm-1-0.x86_64.rpm

Full output:

$ bazel build test-rpm; ls -1 bazel-bin/*.rpm
Computing main repo mapping: 
Loading: 
Loading: 0 packages loaded
Analyzing: target //:test-rpm (1 packages loaded, 0 targets configured)
Analyzing: target //:test-rpm (1 packages loaded, 0 targets configured)
[0 / 1] [Prepa] BazelWorkspaceStatusAction stable-status.txt
INFO: Analyzed target //:test-rpm (1 packages loaded, 9 targets configured).
[1 / 1] checking cached actions
[7 / 8] MakeRpm test-rpm-1-0.x86_64.rpm; 0s processwrapper-sandbox
INFO: From MakeRpm test-rpm-1-0.x86_64.rpm:
Saved RPM file to /cache_root/24aaac5cb2094aabf5993790af77bccc/sandbox/processwrapper-sandbox/25/execroot/_main/bazel-out/k8-fastbuild/bin/test-rpm-1-0.x86_64.rpm
Saved subrpm sub RPM file to /cache_root/24aaac5cb2094aabf5993790af77bccc/sandbox/processwrapper-sandbox/25/execroot/_main/bazel-out/k8-fastbuild/bin/test-rpm-subrpm-1-0.x86_64.rpm
Saved subrpm sub RPM file to /cache_root/24aaac5cb2094aabf5993790af77bccc/sandbox/processwrapper-sandbox/25/execroot/_main/bazel-out/k8-fastbuild/bin/test-rpm-subrpm-1-0.x86_64.rpm
[7 / 8] MakeRpm test-rpm-1-0.x86_64.rpm; 0s processwrapper-sandbox
ERROR: /src/github.com/bazelbuild/rules_pkg/examples/rpm/subrpm/BUILD:73:8: output 'test-rpm-subrpm2-1-0.x86_64.rpm' was not created
[7 / 8] MakeRpm test-rpm-1-0.x86_64.rpm; 0s processwrapper-sandbox
ERROR: /src/github.com/bazelbuild/rules_pkg/examples/rpm/subrpm/BUILD:73:8: MakeRpm test-rpm-1-0.x86_64.rpm failed: not all outputs were created or valid
[7 / 8] MakeRpm test-rpm-1-0.x86_64.rpm; 0s processwrapper-sandbox
Target //:test-rpm failed to build
[8 / 8] checking cached actions
Use --verbose_failures to see the command lines of failed build steps.
[8 / 8] checking cached actions
INFO: Elapsed time: 0.807s, Critical Path: 0.70s
[8 / 8] checking cached actions
INFO: 4 processes: 3 internal, 1 processwrapper-sandbox.
[8 / 8] checking cached actions
ERROR: Build did NOT complete successfully
bazel-bin/test-rpm-1-0.x86_64.rpm
bazel-bin/test-rpm-subrpm-1-0.x86_64.rpm
Full contents of modified examples/rpm/subrpm/BUILD ```python # Copyright 2024 The Bazel Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # -*- coding: utf-8 -*- load("@rules_pkg//pkg:mappings.bzl", "pkg_files") load("@rules_pkg//pkg:rpm.bzl", "pkg_sub_rpm", "pkg_rpm") pkg_files( name = "subrpm_files", srcs = [ "BUILD", ], ) pkg_sub_rpm( name = "subrpm", package_name = "subrpm", summary = "Test subrpm", description = "Test subrpm description", requires = [ "somerpm", ], provides = [ "someprovision", ], srcs = [ ":subrpm_files", ], ) pkg_files( name = "second_subrpm_files", srcs = ["sub2_file"], ) pkg_sub_rpm( name = "subrpm2", package_name = "subrpm2", summary = "Test subrpm2", description = "Test subrpm2 description", srcs = ["second_subrpm_files"], ) pkg_files( name = "rpm_files", srcs = [ "MODULE.bazel", "README.md", ], ) pkg_rpm( name = "test-rpm", srcs = [ ":rpm_files", ], release = "0", version = "1", summary = "rules_pkg example RPM", description = "This is a package description.", license = "Apache License, v2.0", architecture = "x86_64", requires = [ "somerpm", ], provides = [ "somefile", ], subrpms = [ ":subrpm", ":subrpm2", ], ) # If you have rpmbuild, you probably have rpm2cpio too. # Feature idea: Add rpm2cpio and cpio to the rpmbuild toolchain genrule( name = "inspect_content", srcs = [":test-rpm"], outs = ["content.txt"], cmd = "rpm2cpio $(locations :test-rpm) | cpio -ivt >$@", ) genrule( name = "sub2_file", outs = ["sub2_file.txt"], cmd = "echo sub2_file > $@", ) ```
wade-arista commented 1 week ago

It definitely seems to be a problem with this bit:

https://github.com/bazelbuild/rules_pkg/blob/b4ac7e3197bc03d70d0d8d6af02c1d91ad0866e2/pkg/make_rpm.py#L446-L456

aiuto commented 1 week ago

@kellyma2 WDYT?

kellyma2 commented 5 days ago

Seems roughly plausible. I'm on holiday at the moment but will follow-up when I return.