name: GTK RPM Release on: push: tags: - 'release/gtk/*' permissions: code: read releases: write packages: write jobs: build-gtk-rpm-release: runs-on: ubuntu-latest container: image: fedora:43 steps: # The default Gitea runner image is Debian-based. Build the GTK RPM in a # Fedora container so rpmbuild and the RPM build dependencies match the # existing local packaging environment. - name: Install system dependencies run: | set -eu dnf install -y \ ca-certificates \ curl \ gcc \ git \ ImageMagick \ libadwaita-devel \ libgee-devel \ libsecret-devel \ make \ meson \ ninja-build \ nodejs \ pkgconfig \ python3 \ redhat-rpm-config \ rpm-build \ rpmdevtools \ gtk4-devel \ glib2-devel \ vala dnf clean all rpmdev-setuptree - name: Check out repository code uses: actions/checkout@v3 with: fetch-depth: 0 - name: Build GTK RPMs working-directory: gtk run: make rpm - name: Prepare release assets env: RELEASE_TAG: ${{ github.ref_name }} RPM_PACKAGE_GROUP: ${{ vars.RPM_PACKAGE_GROUP }} run: | set -eu version="${RELEASE_TAG#release/gtk/}" if [ -z "$version" ] || [ "$version" = "$RELEASE_TAG" ]; then echo "Expected tag in the form release/gtk/{version}, got: $RELEASE_TAG" >&2 exit 1 fi assets_dir="${{ gitea.workspace }}/release-assets/gtk" rpmbuild_dir="${HOME}/rpmbuild" rm -rf "$assets_dir" mkdir -p "$assets_dir" if [ -d "$rpmbuild_dir/RPMS" ]; then find "$rpmbuild_dir/RPMS" -type f -name "kordophone-${version}-*.rpm" \ ! -name '*-debuginfo-*' \ ! -name '*-debugsource-*' \ -exec cp '{}' "$assets_dir/" ';' fi if [ -d "$rpmbuild_dir/SRPMS" ]; then find "$rpmbuild_dir/SRPMS" -type f -name "kordophone-${version}-*.src.rpm" \ -exec cp '{}' "$assets_dir/" ';' fi if ! find "$assets_dir" -maxdepth 1 -type f -name '*.rpm' | grep -q .; then echo "No RPM artifacts were produced." >&2 exit 1 fi { printf 'RELEASE_VERSION=%s\n' "$version" printf 'RELEASE_ASSETS_DIR=%s\n' "$assets_dir" printf 'RPM_PACKAGE_GROUP=%s\n' "${RPM_PACKAGE_GROUP:-}" } >> "$GITHUB_ENV" - name: Upload RPMs to Gitea package registry env: GITEA_ACTOR: ${{ gitea.actor }} GITEA_SERVER_URL: ${{ gitea.server_url }} GITEA_REPOSITORY: ${{ gitea.repository }} GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} RPM_PACKAGE_GROUP: ${{ env.RPM_PACKAGE_GROUP }} RPM_PACKAGE_TOKEN: ${{ secrets.RPM_PACKAGE_TOKEN }} RPM_PACKAGE_USERNAME: ${{ vars.RPM_PACKAGE_USERNAME }} RELEASE_ASSETS_DIR: ${{ env.RELEASE_ASSETS_DIR }} run: | set -eu owner="${GITEA_REPOSITORY%%/*}" package_user="${RPM_PACKAGE_USERNAME:-${GITEA_ACTOR:-}}" token="${RPM_PACKAGE_TOKEN:-${GITEA_TOKEN:-}}" group="${RPM_PACKAGE_GROUP:-}" if [ -z "$owner" ] || [ "$owner" = "$GITEA_REPOSITORY" ]; then echo "Could not determine package owner from repository: $GITEA_REPOSITORY" >&2 exit 1 fi if [ -z "$package_user" ]; then echo "Missing package upload username. Set RPM_PACKAGE_USERNAME or ensure gitea.actor is available." >&2 exit 1 fi if [ -z "$token" ]; then echo "Missing upload token. Set RPM_PACKAGE_TOKEN or ensure secrets.GITEA_TOKEN is available." >&2 exit 1 fi upload_url="${GITEA_SERVER_URL%/}/api/packages/${owner}/rpm" if [ -n "$group" ]; then upload_url="${upload_url}/${group}" fi upload_url="${upload_url}/upload" found_rpm=0 for rpm in "$RELEASE_ASSETS_DIR"/*.rpm; do if [ ! -e "$rpm" ] || [ "${rpm##*.}" != "rpm" ]; then continue fi case "$rpm" in *.src.rpm) continue ;; esac found_rpm=1 http_code="$(curl --silent --show-error \ --write-out '%{http_code}' \ --output /tmp/package-upload-response \ --user "${package_user}:${token}" \ --upload-file "$rpm" \ "$upload_url")" case "$http_code" in 201) echo "Uploaded $(basename "$rpm") to the RPM package registry." ;; 409) echo "Package already exists for $(basename "$rpm"); skipping duplicate upload." ;; *) echo "Failed to upload $(basename "$rpm") to $upload_url (HTTP $http_code)." >&2 cat /tmp/package-upload-response >&2 || true exit 1 ;; esac done if [ "$found_rpm" -ne 1 ]; then echo "No binary RPM artifacts were found to upload." >&2 exit 1 fi - name: Create Gitea release uses: https://gitea.com/actions/gitea-release-action@v1 with: name: Kordophone GTK ${{ env.RELEASE_VERSION }} tag_name: ${{ github.ref_name }} target_commitish: ${{ github.sha }} files: | ${{ env.RELEASE_ASSETS_DIR }}/*.rpm