#!/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"