From 023a6f03e2f0f14e62bd7d178da2c41b8b689274 Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Fri, 3 Jul 2026 12:51:09 +1000 Subject: [PATCH] Probe for an existing RPM before uploading to artifactapi Avoid a failed/confusing re-upload by checking whether the package is already published before PUTting it. artifactapi has no HEAD route (returns 405), so the guard uses a GET against the served path (RPMs are stored under Packages/): a 200 means it exists and the upload is skipped, anything else proceeds. Also point at the reachable artifactapi host (artifactapi.k8s.syd1.au.unkin.net, as used by rpmbuilder) instead of the unresolvable artifactapi3 name. --- .woodpecker/release.yml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml index 33d76d7..2446207 100644 --- a/.woodpecker/release.yml +++ b/.woodpecker/release.yml @@ -17,11 +17,21 @@ steps: image: git.unkin.net/unkin/almalinux9-base:20260606 commands: - | + HOST="https://artifactapi.k8s.syd1.au.unkin.net" + REPO="rpm-internal" for rpm in dist/*.rpm; do FILE=$$(basename "$$rpm") - echo "Uploading $${FILE} to artifactapi rpm-internal" + # Verify the package isn't already published before uploading. + # artifactapi has no HEAD route (returns 405), so probe with GET + # against the served path (RPMs are stored under Packages/). + code=$$(curl -s -o /dev/null -w '%{http_code}' "$$HOST/api/v2/remotes/$$REPO/files/Packages/$$FILE" || true) + if [ "$$code" = "200" ]; then + echo "$$FILE already exists in $$REPO (HTTP $$code); skipping upload" + continue + fi + echo "Uploading $$FILE to $$REPO (existence probe returned $$code)" curl -f -X PUT \ - "https://artifactapi3.k8s.syd1.au.unkin.net/api/v2/remotes/rpm-internal/files/$${FILE}" \ + "$$HOST/api/v2/remotes/$$REPO/files/$$FILE" \ -H "Content-Type: application/x-rpm" \ --data-binary @"$$rpm" done