Make release asset upload idempotent

This commit is contained in:
MrSphay
2026-05-16 03:14:48 +02:00
parent 631a66dab1
commit d3234e03b8

View File

@@ -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}"