fix(rpm): support rpmbuild 4.20+ per-package build directory (#1084)
RPM 4.20 introduced a per-package build directory and redefined
`%{_builddir}` accordingly (rpm-software-management/rpm#2885).
As a result, the paths generated by `rules_pkg` for `%install`, which
were relative to the previous working directory, no longer resolve:
```text
cp: cannot stat 'tests/testdata/a.ar': No such file or directory
```
This change makes the generated paths independent of `rpmbuild`'s
working directory:
- `%install` copies inputs from `%{_topdir}/BUILD`, where `make_rpm.py`
stages them,
- `%files -f` receives an absolute path,
- the same applies to regular files and tree artifact inputs.
This also removes the debuginfo-specific `../` path variant introduced
in #1006, since the same paths now work across RPM versions.
The RPM test spec relied on the working directory as well and gets the
same anchor.
RPM 4.20 also makes `buildsubdir .` usable again, while the `BUILD_SUB`
path used for RPM 4.18 and 4.19 is no longer reachable from the new
per-package build directory.
Debuginfo autodetection therefore selects:
- "centos" for RPM versions before 4.18 and from 4.20 onward,
- "fedora" for RPM 4.18 and 4.19.
Validated with `//tests/rpm/...`, `//toolchains/...`, and
`//pkg/legacy/tests/rpm/...` against RPM 4.18.2 and 6.0.1, CI covering
RPM 4.17.
Fixes #938.
Bazel rules for building tar, zip, deb, and rpm for packages.
For the latest version, see Releases (with WORKSPACE setup) / Documentation
Use rules-pkg-discuss@googlegroups.com for discussion.
As of Bazel 4.x, Bazel uses this rule set for packaging its distribution. Bazel still contains a limited version of pkg_tar but its feature set is frozen. Any new capabilities will be added here.
Sample, but see releases for the current release.
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "rules_pkg", urls = [ "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.9.1/rules_pkg-0.9.1.tar.gz", "https://github.com/bazelbuild/rules_pkg/releases/download/0.9.1/rules_pkg-0.9.1.tar.gz", ], sha256 = "8f9ee2dc10c1ae514ee599a8b42ed99fa262b757058f65ad3c384289ff70c4b8", ) load("@rules_pkg//:deps.bzl", "rules_pkg_dependencies") rules_pkg_dependencies()
To use pkg_rpm(), you must provide a copy of rpmbuild. You can use the system installed rpmbuild with this stanza.
load("@rules_pkg//toolchains/rpm:rpmbuild_configure.bzl", "find_system_rpmbuild") find_system_rpmbuild( name = "rules_pkg_rpmbuild", verbose = False, )
bazel_dep(name = "rules_pkg", version = "0.0.10")
To use pkg_rpm(), you must provide a copy of rpmbuild. You can use the system installed rpmbuild with this stanza.
find_rpm = use_extension("//toolchains/rpm:rpmbuild_configure.bzl", "find_system_rpmbuild_bzlmod") use_repo(find_rpm, "rules_pkg_rpmbuild") register_toolchains("@rules_pkg_rpmbuild//:all")
We hold an engineering status meeting on the first Monday of every month at 10am USA East coast time. Add to calendar / meeting notes