Hello folks,
I've realized that if the %install section contains a command that reverses the exit code from success to failure via !, the build does not fail, but it proceeds. In other sections, the build fails. E.g. this:
%install ! true
Does not fail the build.
But this does:
%install false
As well as this:
%build ! true
Any idea why this is happening? Is it a bug, or a feature? This happens on Fedora 35 locally as well as Rawhide in Koji/mock.
All of the following (applied separately) fail the RPM build:
%prep false
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.A1K5K0 + umask 022 + cd /home/churchyard/rpmbuild/BUILD + false error: Bad exit status from /var/tmp/rpm-tmp.A1K5K0 (%prep)
%build false
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.YR6FiX + umask 022 + cd /home/churchyard/rpmbuild/BUILD + false error: Bad exit status from /var/tmp/rpm-tmp.YR6FiX (%build)
%install false
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.OapPfB + umask 022 + cd /home/churchyard/rpmbuild/BUILD + '[' /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 '!=' / ']' + rm -rf /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 ++ dirname /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 + mkdir -p /home/churchyard/rpmbuild/BUILDROOT + mkdir /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 + false error: Bad exit status from /var/tmp/rpm-tmp.OapPfB (%install)
%check false
Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.CnEWIO + umask 022 + cd /home/churchyard/rpmbuild/BUILD + false error: Bad exit status from /var/tmp/rpm-tmp.CnEWIO (%check)
But when replaced with `! true`, %install (and %install only) succeeds:
%prep ! true
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.ojDvj8 + umask 022 + cd /home/churchyard/rpmbuild/BUILD + true + RPM_EC=1 ++ jobs -p + exit 1 error: Bad exit status from /var/tmp/rpm-tmp.ojDvj8 (%prep)
%build ! true
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.RTiQQH + umask 022 + cd /home/churchyard/rpmbuild/BUILD + true + RPM_EC=1 ++ jobs -p + exit 1 error: Bad exit status from /var/tmp/rpm-tmp.RTiQQH (%build)
%install ! true
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.RczM4N + umask 022 + cd /home/churchyard/rpmbuild/BUILD + '[' /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 '!=' / ']' + rm -rf /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 ++ dirname /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 + mkdir -p /home/churchyard/rpmbuild/BUILDROOT + mkdir /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 + true + /usr/lib/rpm/check-buildroot + ... + /usr/lib/rpm/redhat/brp-python-hardlink Executing(%check): ...
Or even:
%install ! true echo UNREACHABLE
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.nzrs6N + umask 022 + cd /home/churchyard/rpmbuild/BUILD + '[' /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 '!=' / ']' + rm -rf /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 ++ dirname /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 + mkdir -p /home/churchyard/rpmbuild/BUILDROOT + mkdir /home/churchyard/rpmbuild/BUILDROOT/reproducer-0-0.x86_64 + true + echo UNREACHABLE UNREACHABLE + /usr/lib/rpm/check-buildroot + ... + /usr/lib/rpm/redhat/brp-python-hardlink Executing(%check): ...
%check ! true
Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.4E9WU3 + umask 022 + cd /home/churchyard/rpmbuild/BUILD + true + RPM_EC=1 ++ jobs -p + exit 1 error: Bad exit status from /var/tmp/rpm-tmp.4E9WU3 (%check)
What sorcery is this?