rules_pkg
rules_pkg copied to clipboard
Multiple subrpms with common prefix lead to conflicts, errors, "output xxx was not created"
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 > $@",
)