From d3234e03b82dc4e8ecfb2c70e0784f6b518493f4 Mon Sep 17 00:00:00 2001 From: MrSphay Date: Sat, 16 May 2026 03:14:48 +0200 Subject: [PATCH] Make release asset upload idempotent --- .gitea/workflows/build.yml | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 361d66e..58be7e6 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -10,6 +10,8 @@ on: jobs: build: runs-on: ubuntu-latest + env: + MRTRUST_VERSION: 0.1.3 steps: - name: Checkout @@ -24,7 +26,6 @@ jobs: shell: bash run: | set -euo pipefail - version="0.1.3" dotnet publish src/MrTrustLauncher.csproj \ --configuration Release \ --runtime win-x64 \ @@ -38,7 +39,7 @@ jobs: shell: bash run: | set -euo pipefail - version="0.1.3" + version="${MRTRUST_VERSION}" package_root="dist/MrTrust-${version}" rm -rf "$package_root" "dist/MrTrust-${version}.zip" mkdir -p "$package_root" @@ -54,8 +55,8 @@ jobs: - name: Upload release artifact uses: actions/upload-artifact@v3 with: - name: MrTrust-0.1.3 - path: dist/MrTrust-0.1.3.zip + name: MrTrust-${{ env.MRTRUST_VERSION }} + path: dist/MrTrust-${{ env.MRTRUST_VERSION }}.zip - name: Attach ZIP to Gitea release if: github.ref == 'refs/heads/main' @@ -64,7 +65,8 @@ jobs: GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -euo pipefail - version="0.1.3" + version="${MRTRUST_VERSION}" + asset_name="MrTrust-${version}.zip" api="https://git.wilkensxl.de/api/v1/repos/MrSphay/MrTrust" release_response="$(mktemp)" status="$(curl -sS -o "$release_response" -w "%{http_code}" -H "Authorization: token ${GITEA_TOKEN}" "${api}/releases/tags/v${version}")" @@ -98,8 +100,27 @@ PY echo "Could not resolve release id for v${version}" >&2 exit 1 fi + existing_asset_id="$(RELEASE_JSON="$release_json" ASSET_NAME="$asset_name" python3 <<'PY' +import json +import os +import sys + +asset_name = os.environ["ASSET_NAME"] +release = json.loads(os.environ["RELEASE_JSON"]) +for asset in release.get("assets", []): + if asset.get("name") == asset_name: + print(asset.get("id", "")) + break +PY +)" + if [ -n "$existing_asset_id" ]; then + curl -fsS \ + -X DELETE \ + -H "Authorization: token ${GITEA_TOKEN}" \ + "${api}/releases/${release_id}/assets/${existing_asset_id}" + fi curl -fsS \ -X POST \ -H "Authorization: token ${GITEA_TOKEN}" \ - -F "attachment=@dist/MrTrust-${version}.zip" \ - "${api}/releases/${release_id}/assets?name=MrTrust-${version}.zip" + -F "attachment=@dist/${asset_name}" \ + "${api}/releases/${release_id}/assets?name=${asset_name}"