From 3ba9f77c104b85741fc9757760ae566418b2c981 Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Mon, 27 Jul 2026 00:45:00 +1000 Subject: [PATCH] fix: build and publish nzbget to artifactapi rpm-vendor repos (#170) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Why `nzbget` is absent from the artifactapi `rpm-vendor-el9` / `rpm-vendor-el8` repodata, so `dnf install nzbget` fails on the media host (AlmaLinux 9.7). The legacy Gitea RPM registry is being removed from hosts by puppet-prod #496, so nzbget must land in `rpm-vendor-el9` or installs break. Root cause: nzbget's `build.sh` built the GitHub download URL from `PACKAGE_RELEASE`, which carries the dist tag (e.g. `1.el9`). Upstream only publishes `nzbget--1.x86_64.rpm` (no dist tag), so the fetch 404s and a 22-byte "upstream returned 404" junk file is what gets published — createrepo cannot index it, so the package never appears in the repo metadata. The stale junk `nzbget-26.1-1.el9` also makes the deploy step's dedup probe return HTTP 200, which would skip re-uploading a corrected 26.1. ## How - Point the `build.sh` source URL at the upstream release-1 asset name (`nzbget-${PACKAGE_VERSION}-1.x86_64.rpm`) while keeping the dist-tagged local output filename, mirroring the `code-server` package which repackages a prebuilt upstream RPM the same way. - Bump nzbget el8/el9 to `26.2` (current upstream stable) so the corrected build produces a fresh filename the deploy step will actually PUT (side-stepping the stale-junk dedup skip). ## Validation - Confirmed the corrected URL fetches a real 9.1MB RPM through artifactapi's github remote: `NAME=nzbget VER=26.2 REL=1 ARCH=x86_64`. - `pytest` 72 passed; metadata validates against `schema/metadata.json`; all pre-commit hooks pass (yamllint, check-jsonschema, etc.). ## Post-merge The deploy pipelines (`.woodpecker/deploy-almalinux{8,9}.yaml`) run on push to `master`. On merge they will `build-all --distro almalinux/el{8,9}`, build nzbget 26.2, and PUT `nzbget-26.2-1.el{8,9}.x86_64.rpm` to `rpm-vendor-el{8,9}`; artifactapi regenerates repodata so `dnf install nzbget` resolves. https://claude.ai/code/session_015ur3i7D2azsMAWTSVABApv Reviewed-on: https://git.unkin.net/unkin/rpmbuilder/pulls/170 Co-authored-by: Ben Vincent Co-committed-by: Ben Vincent --- rpms/nzbget/metadata.yaml | 4 ++-- rpms/nzbget/resources/build.sh | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/rpms/nzbget/metadata.yaml b/rpms/nzbget/metadata.yaml index 2047ddc..734fd75 100644 --- a/rpms/nzbget/metadata.yaml +++ b/rpms/nzbget/metadata.yaml @@ -13,9 +13,9 @@ builds: - almalinux/el8 image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest release: 1 - version: '26.1' + version: '26.2' - repository: - almalinux/el9 image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest release: 1 - version: '26.1' + version: '26.2' diff --git a/rpms/nzbget/resources/build.sh b/rpms/nzbget/resources/build.sh index d5c9218..762989d 100755 --- a/rpms/nzbget/resources/build.sh +++ b/rpms/nzbget/resources/build.sh @@ -2,6 +2,10 @@ set -e -# Download the pre-built RPM from GitHub releases +# Download the pre-built RPM from GitHub releases. +# Upstream always publishes the release-1 asset (nzbget--1.x86_64.rpm); +# the source URL must use the upstream asset name, not PACKAGE_RELEASE, which +# carries the dist tag (e.g. 1.el9) and does not exist upstream. Only the local +# output filename is dist-tagged, mirroring the code-server package. curl -L -o /app/dist/nzbget-${PACKAGE_VERSION}-${PACKAGE_RELEASE}.x86_64.rpm \ - https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/nzbgetcom/nzbget/releases/download/v$PACKAGE_VERSION/nzbget-${PACKAGE_VERSION}-${PACKAGE_RELEASE}.x86_64.rpm + https://artifactapi.k8s.syd1.au.unkin.net/api/v1/remote/github/nzbgetcom/nzbget/releases/download/v$PACKAGE_VERSION/nzbget-${PACKAGE_VERSION}-1.x86_64.rpm