From dfc89058b4b15d7b081a3665d821ac5189532003 Mon Sep 17 00:00:00 2001 From: Michal Rydlikowski Date: Fri, 13 Mar 2026 23:53:57 +0000 Subject: [PATCH] fix: don't delete RPM packages before uploading new arch The publish-rpm step was deleting the existing package by version before uploading, but Gitea RPM registry keys by version (not version+arch). When building both amd64 and arm64 in a matrix, the second job would delete the first job's upload. Remove the delete-before-upload pattern. Gitea supports multiple architectures under the same version. Handle 409 (already exists) gracefully instead. Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitea/workflows/ci.yml | 34 ++++++++++++++++------------------ scripts/publish-rpm.sh | 38 +++++++++++++++++--------------------- 2 files changed, 33 insertions(+), 39 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index d8f79b8..bcf77fb 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -375,28 +375,26 @@ jobs: GITEA_REPO: mcpctl run: | RPM_FILE=$(ls dist/mcpctl-*.rpm | head -1) - RPM_VERSION=$(rpm -qp --queryformat '%{VERSION}-%{RELEASE}' "$RPM_FILE") - echo "Publishing $RPM_FILE (version $RPM_VERSION)..." + echo "Publishing $RPM_FILE..." - # Delete existing version if present - HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \ - -H "Authorization: token ${GITEA_TOKEN}" \ - "${GITEA_URL}/api/v1/packages/${GITEA_OWNER}/rpm/mcpctl/${RPM_VERSION}") - - if [ "$HTTP_CODE" = "200" ]; then - echo "Version exists, replacing..." - curl -s -o /dev/null -X DELETE \ - -H "Authorization: token ${GITEA_TOKEN}" \ - "${GITEA_URL}/api/v1/packages/${GITEA_OWNER}/rpm/mcpctl/${RPM_VERSION}" - fi - - # Upload - curl --fail -X PUT \ + # Upload — don't delete existing packages, Gitea supports + # multiple architectures under the same version. + HTTP_CODE=$(curl -s -o /tmp/rpm-upload.out -w "%{http_code}" \ + -X PUT \ -H "Authorization: token ${GITEA_TOKEN}" \ --upload-file "$RPM_FILE" \ - "${GITEA_URL}/api/packages/${GITEA_OWNER}/rpm/upload" + "${GITEA_URL}/api/packages/${GITEA_OWNER}/rpm/upload") - echo "Published successfully!" + if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "200" ]; then + echo "Published successfully!" + elif [ "$HTTP_CODE" = "409" ]; then + echo "Already exists (same arch+version), skipping" + else + echo "Upload returned HTTP $HTTP_CODE" + cat /tmp/rpm-upload.out 2>/dev/null || true + exit 1 + fi + rm -f /tmp/rpm-upload.out # Link package to repo source scripts/link-package.sh diff --git a/scripts/publish-rpm.sh b/scripts/publish-rpm.sh index 130b259..313f0a5 100755 --- a/scripts/publish-rpm.sh +++ b/scripts/publish-rpm.sh @@ -35,31 +35,27 @@ if [ -z "$RPM_FILE" ]; then exit 1 fi -# Get version string as it appears in Gitea (e.g. "0.1.0-1") -RPM_VERSION=$(rpm -qp --queryformat '%{VERSION}-%{RELEASE}' "$RPM_FILE") +echo "==> Publishing $RPM_FILE to ${GITEA_URL}..." -echo "==> Publishing $RPM_FILE (version $RPM_VERSION) to ${GITEA_URL}..." - -# Check if version already exists and delete it first -EXISTING=$(curl -s -o /dev/null -w "%{http_code}" \ - -H "Authorization: token ${GITEA_TOKEN}" \ - "${GITEA_URL}/api/v1/packages/${GITEA_OWNER}/rpm/mcpctl/${RPM_VERSION}") - -if [ "$EXISTING" = "200" ]; then - echo "==> Version $RPM_VERSION already exists, replacing..." - curl -s -o /dev/null -X DELETE \ - -H "Authorization: token ${GITEA_TOKEN}" \ - "${GITEA_URL}/api/v1/packages/${GITEA_OWNER}/rpm/mcpctl/${RPM_VERSION}" -fi - -# Upload -curl --fail -s -X PUT \ +# Upload — don't delete existing packages, Gitea supports +# multiple architectures under the same version. +HTTP_CODE=$(curl -s -o /tmp/rpm-upload.out -w "%{http_code}" \ + -X PUT \ -H "Authorization: token ${GITEA_TOKEN}" \ --upload-file "$RPM_FILE" \ - "${GITEA_URL}/api/packages/${GITEA_OWNER}/rpm/upload" + "${GITEA_URL}/api/packages/${GITEA_OWNER}/rpm/upload") -echo "" -echo "==> Published successfully!" +if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "200" ]; then + echo "==> Published successfully!" +elif [ "$HTTP_CODE" = "409" ]; then + echo "==> Already exists (same arch+version), skipping" +else + echo "==> Upload returned HTTP $HTTP_CODE" + cat /tmp/rpm-upload.out 2>/dev/null || true + rm -f /tmp/rpm-upload.out + exit 1 +fi +rm -f /tmp/rpm-upload.out # Ensure package is linked to the repository source "$SCRIPT_DIR/link-package.sh"