From 7482d9b5319b201cd84ca51211924ce619aeed5b Mon Sep 17 00:00:00 2001 From: youbin Date: Sat, 15 Aug 2026 16:01:21 +0800 Subject: [PATCH] Make package publishing idempotent [skip ci] --- .gitea/workflows/build.yml | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 8e2e222..f4a5ecb 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -112,6 +112,14 @@ jobs: package_url="$package_server/api/packages/$GITEA_OWNER/generic/bdrclone/$package_version" for package_file in dist/*.tar.gz dist/SHA256SUMS; do + package_file_url="$package_url/$(basename "$package_file")" + if curl --fail --silent --head \ + --header "Authorization: token $GITEA_TOKEN" \ + --header "Host: $gitea_host" \ + "$package_file_url" >/dev/null; then + echo "Package file already exists: $(basename "$package_file")" + continue + fi curl --fail-with-body --silent --show-error \ --retry 5 --retry-all-errors --retry-delay 3 \ --connect-timeout 20 --max-time 300 \ @@ -119,16 +127,25 @@ jobs: --header "Authorization: token $GITEA_TOKEN" \ --header "Host: $gitea_host" \ --upload-file "$package_file" \ - "$package_url/$(basename "$package_file")" + "$package_file_url" done - curl --fail-with-body --silent --show-error \ - --retry 5 --retry-all-errors --retry-delay 3 \ - --connect-timeout 20 --max-time 300 \ - --request POST \ - --header "Authorization: token $GITEA_TOKEN" \ - --header "Host: $gitea_host" \ - "$package_server/api/v1/packages/$GITEA_OWNER/generic/bdrclone/-/link/$repository_name" + linked_repository="$( + curl --fail --silent --show-error \ + --header "Authorization: token $GITEA_TOKEN" \ + --header "Host: $gitea_host" \ + "$package_server/api/v1/packages/$GITEA_OWNER/generic/bdrclone/$package_version" \ + | jq --raw-output '.repository.full_name // ""' + )" + if [[ "$linked_repository" != "$GITEA_REPOSITORY" ]]; then + curl --fail-with-body --silent --show-error \ + --retry 5 --retry-all-errors --retry-delay 3 \ + --connect-timeout 20 --max-time 300 \ + --request POST \ + --header "Authorization: token $GITEA_TOKEN" \ + --header "Host: $gitea_host" \ + "$package_server/api/v1/packages/$GITEA_OWNER/generic/bdrclone/-/link/$repository_name" + fi - name: Upload temporary build artifacts if: ${{ !startsWith(github.ref, 'refs/tags/v') && inputs.publish_version == '' }}