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 > $@",
)
```
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".In the output we can see
Saved subrpm sub RPM file
twice, instead of once forsubrpm
and once forsubrpm2
. If I change the package name tosecond-subrpm
then everything works as expected.Full output:
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 > $@", ) ```