Build and verify development RPMs with Gitea Actions
Build development RPM / rpm (push) Failing after 17s

This commit is contained in:
Lyncoln
2026-09-12 01:48:39 -04:00
parent 4a358ae0f6
commit c8636ed6d4
10 changed files with 316 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env bash
set -euo pipefail
project_dir="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$project_dir"
package_version="$(cat packaging/VERSION)"
[[ "$package_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo 'Invalid packaging/VERSION' >&2; exit 1; }
source_revision="${SOURCE_REVISION:-$(git rev-parse HEAD)}"
[[ "$source_revision" =~ ^[0-9a-f]{40,64}$ ]] || { echo 'Invalid SOURCE_REVISION' >&2; exit 1; }
export SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(git show -s --format=%ct HEAD)}"
[[ "$SOURCE_DATE_EPOCH" =~ ^[0-9]+$ ]] || { echo 'Invalid SOURCE_DATE_EPOCH' >&2; exit 1; }
package_release="0.$(date -u -d "@$SOURCE_DATE_EPOCH" +%Y%m%d%H%M%S).git${source_revision:0:12}"
output_dir="${RPM_OUTPUT_DIR:-$project_dir/dist}"
mkdir -p "$output_dir" "$project_dir/.build"
output_dir="$(CDPATH= cd -- "$output_dir" && pwd)"
build_dir="$(mktemp -d "$project_dir/.build/rpm.XXXXXXXX")"
mkdir -p "$build_dir"/{SOURCES,SPECS,BUILD,BUILDROOT,RPMS,SRPMS}
# Explicit source list excludes lab snapshots, local configuration and secrets.
# Include the frozen reference and test harness so the SRPM runs the same checks.
tar --sort=name --mtime="@$SOURCE_DATE_EPOCH" --owner=0 --group=0 --numeric-owner \
--exclude='__pycache__' --exclude='*.pyc' \
--transform="s,^,ocf-managed-container-$package_version/," \
-czf "$build_dir/SOURCES/ocf-managed-container-$package_version.tar.gz" \
README.md HANDOFF.md refactored reference tests packaging scripts
# Freeze identity into the SRPM spec so rpmbuild --rebuild needs no Git metadata
# or external macro definitions and retains the same version and release.
sed -e "s/^Version:.*/Version: $package_version/" \
-e "s/^Release:.*/Release: $package_release%{?dist}/" \
packaging/ocf-managed-container.spec > "$build_dir/SPECS/ocf-managed-container.spec"
rpmbuild -ba --define "_topdir $build_dir" \
"$build_dir/SPECS/ocf-managed-container.spec"
for package in "$build_dir"/RPMS/noarch/*.rpm "$build_dir"/SRPMS/*.rpm; do
cp "$package" "$output_dir/"
done
rpm -qp --qf '%{NAME} %{VERSION}-%{RELEASE} %{ARCH}\nLicense: %{LICENSE}\n' \
"$build_dir"/RPMS/noarch/*.rpm
rpm -qpl "$build_dir"/RPMS/noarch/*.rpm
# The package must never run service or cluster lifecycle scriptlets.
[[ -z "$(rpm -qp --scripts "$build_dir"/RPMS/noarch/*.rpm)" ]]
(cd "$output_dir" && sha256sum ./*.rpm > SHA256SUMS)
printf 'Development RPMs: %s\nBuild tree: %s\n' "$output_dir" "$build_dir"