fix: prevent duplicate release assets on re-triggered CI workflows
All checks were successful
Build Release / create-release (push) Successful in 1s
Build Release / build-docker (push) Successful in 37s
Lint & Test / test (push) Successful in 2m15s
Build Release / build-linux (push) Successful in 1m50s
Build Release / build-windows (push) Successful in 3m24s
All checks were successful
Build Release / create-release (push) Successful in 1s
Build Release / build-docker (push) Successful in 37s
Lint & Test / test (push) Successful in 2m15s
Build Release / build-linux (push) Successful in 1m50s
Build Release / build-windows (push) Successful in 3m24s
Gitea silently appends duplicate asset names. Added delete-before-upload logic to both Windows and Linux asset upload steps.
This commit is contained in:
@@ -131,27 +131,31 @@ jobs:
|
|||||||
RELEASE_ID="${{ needs.create-release.outputs.release_id }}"
|
RELEASE_ID="${{ needs.create-release.outputs.release_id }}"
|
||||||
BASE_URL="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}"
|
BASE_URL="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}"
|
||||||
|
|
||||||
# Upload ZIP
|
# Upload helper — deletes existing asset with same name to prevent duplicates on re-run
|
||||||
ZIP_FILE=$(ls build/LedGrab-*.zip | head -1)
|
upload_asset() {
|
||||||
if [ -f "$ZIP_FILE" ]; then
|
local FILE="$1"
|
||||||
|
local NAME=$(basename "$FILE")
|
||||||
|
EXISTING_ID=$(curl -s "$BASE_URL/releases/$RELEASE_ID/assets" \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
| python3 -c "import sys,json; assets=json.load(sys.stdin); print(next((str(a['id']) for a in assets if a['name']=='$NAME'),''))" 2>/dev/null)
|
||||||
|
if [ -n "$EXISTING_ID" ]; then
|
||||||
|
curl -s -X DELETE "$BASE_URL/releases/$RELEASE_ID/assets/$EXISTING_ID" \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN"
|
||||||
|
echo "Replaced existing asset: $NAME"
|
||||||
|
fi
|
||||||
curl -s -X POST \
|
curl -s -X POST \
|
||||||
"$BASE_URL/releases/$RELEASE_ID/assets?name=$(basename "$ZIP_FILE")" \
|
"$BASE_URL/releases/$RELEASE_ID/assets?name=$NAME" \
|
||||||
-H "Authorization: token $GITEA_TOKEN" \
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
-H "Content-Type: application/octet-stream" \
|
-H "Content-Type: application/octet-stream" \
|
||||||
--data-binary "@$ZIP_FILE"
|
--data-binary "@$FILE"
|
||||||
echo "Uploaded: $(basename "$ZIP_FILE")"
|
echo "Uploaded: $NAME"
|
||||||
fi
|
}
|
||||||
|
|
||||||
|
ZIP_FILE=$(ls build/LedGrab-*.zip | head -1)
|
||||||
|
[ -f "$ZIP_FILE" ] && upload_asset "$ZIP_FILE"
|
||||||
|
|
||||||
# Upload installer
|
|
||||||
SETUP_FILE=$(ls build/LedGrab-*-setup.exe 2>/dev/null | head -1)
|
SETUP_FILE=$(ls build/LedGrab-*-setup.exe 2>/dev/null | head -1)
|
||||||
if [ -f "$SETUP_FILE" ]; then
|
[ -f "$SETUP_FILE" ] && upload_asset "$SETUP_FILE"
|
||||||
curl -s -X POST \
|
|
||||||
"$BASE_URL/releases/$RELEASE_ID/assets?name=$(basename "$SETUP_FILE")" \
|
|
||||||
-H "Authorization: token $GITEA_TOKEN" \
|
|
||||||
-H "Content-Type: application/octet-stream" \
|
|
||||||
--data-binary "@$SETUP_FILE"
|
|
||||||
echo "Uploaded: $(basename "$SETUP_FILE")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ── Linux tarball ──────────────────────────────────────────
|
# ── Linux tarball ──────────────────────────────────────────
|
||||||
build-linux:
|
build-linux:
|
||||||
@@ -194,18 +198,26 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
TAG="${{ gitea.ref_name }}"
|
|
||||||
RELEASE_ID="${{ needs.create-release.outputs.release_id }}"
|
RELEASE_ID="${{ needs.create-release.outputs.release_id }}"
|
||||||
BASE_URL="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}"
|
BASE_URL="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}"
|
||||||
TAR_FILE=$(ls build/LedGrab-*.tar.gz | head -1)
|
TAR_FILE=$(ls build/LedGrab-*.tar.gz | head -1)
|
||||||
TAR_NAME=$(basename "$TAR_FILE")
|
TAR_NAME=$(basename "$TAR_FILE")
|
||||||
|
|
||||||
|
# Delete existing asset with same name to prevent duplicates on re-run
|
||||||
|
EXISTING_ID=$(curl -s "$BASE_URL/releases/$RELEASE_ID/assets" \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
| python3 -c "import sys,json; assets=json.load(sys.stdin); print(next((str(a['id']) for a in assets if a['name']=='$TAR_NAME'),''))" 2>/dev/null)
|
||||||
|
if [ -n "$EXISTING_ID" ]; then
|
||||||
|
curl -s -X DELETE "$BASE_URL/releases/$RELEASE_ID/assets/$EXISTING_ID" \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN"
|
||||||
|
echo "Replaced existing asset: $TAR_NAME"
|
||||||
|
fi
|
||||||
|
|
||||||
curl -s -X POST \
|
curl -s -X POST \
|
||||||
"$BASE_URL/releases/$RELEASE_ID/assets?name=$TAR_NAME" \
|
"$BASE_URL/releases/$RELEASE_ID/assets?name=$TAR_NAME" \
|
||||||
-H "Authorization: token $GITEA_TOKEN" \
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
-H "Content-Type: application/octet-stream" \
|
-H "Content-Type: application/octet-stream" \
|
||||||
--data-binary "@$TAR_FILE"
|
--data-binary "@$TAR_FILE"
|
||||||
|
|
||||||
echo "Uploaded: $TAR_NAME"
|
echo "Uploaded: $TAR_NAME"
|
||||||
|
|
||||||
# ── Docker image ───────────────────────────────────────────
|
# ── Docker image ───────────────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user