rules_pkg icon indicating copy to clipboard operation
rules_pkg copied to clipboard

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

Open wade-arista opened this issue 8 months ago • 3 comments

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
# 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 avatar Jun 29 '24 00:06 wade-arista