From f60068b01f595325c4812df3c42d7e1828e205db Mon Sep 17 00:00:00 2001 From: "Markus F.J. Busche" Date: Sat, 20 Sep 2025 18:13:22 +0200 Subject: [PATCH] release: update scripts/release_gitea.sh to jq-based flow; skip existing assets --- scripts/release_gitea.sh | 89 +++++++--------------------------------- 1 file changed, 14 insertions(+), 75 deletions(-) diff --git a/scripts/release_gitea.sh b/scripts/release_gitea.sh index fed2ce8..9dadc7f 100644 --- a/scripts/release_gitea.sh +++ b/scripts/release_gitea.sh @@ -54,31 +54,11 @@ fi # Try to fetch existing release by tag first get_resp=$(curl -sS -H "Authorization: token ${TOKEN}" "${API_URL}/repos/${OWNER}/${REPO}/releases/tags/${TAG}" || true) -rel_id=$(python3 - <<'PY' -import sys, json -data=sys.stdin.read().strip() -try: - obj=json.loads(data) if data else {} - print(obj.get('id','')) -except Exception: - print('') -PY -<<<"$get_resp") +rel_id=$(echo "$get_resp" | jq -r '.id // empty') if [ -z "$rel_id" ]; then # Build minimal JSON payload (use existing tag) - create_payload=$(REL_TAG="$TAG" REL_NAME="$NAME" REL_BODY_TXT="$BODY" python3 - <<'PY' -import json, os -payload = { - "tag_name": os.environ["REL_TAG"], - "name": os.environ["REL_NAME"], - "body": os.environ["REL_BODY_TXT"], - "draft": False, - "prerelease": False -} -print(json.dumps(payload)) -PY - ) + create_payload=$(jq -n --arg tag "$TAG" --arg name "$NAME" --arg body "$BODY" '{tag_name:$tag, name:$name, body:$body, draft:false, prerelease:false}') create_resp=$(curl -sS -X POST \ -H 'Content-Type: application/json' \ @@ -87,35 +67,13 @@ PY "${API_URL}/repos/${OWNER}/${REPO}/releases" || true) # Extract id from create response - rel_id=$(python3 - <<'PY' -import sys, json -data=sys.stdin.read().strip() -try: - obj=json.loads(data) if data else {} - print(obj.get('id','')) -except Exception: - print('') -PY - <<<"$create_resp") + rel_id=$(echo "$create_resp" | jq -r '.id // empty') fi # Fallback: search releases list for matching tag if still empty if [ -z "$rel_id" ]; then list_resp=$(curl -sS -H "Authorization: token ${TOKEN}" "${API_URL}/repos/${OWNER}/${REPO}/releases?limit=100") - rel_id=$(python3 - <<'PY' -import sys, json, os -data=sys.stdin.read().strip() -try: - arr=json.loads(data) if data else [] - tag=os.environ.get('TAG') - for rel in arr: - if rel.get('tag_name')==tag: - print(rel.get('id','')) - break -except Exception: - pass -PY - <<<"$list_resp") + rel_id=$(echo "$list_resp" | jq -r --arg tag "$TAG" '[.[] | select(.tag_name==$tag)][0].id // empty') fi if [ -z "$rel_id" ]; then @@ -124,37 +82,18 @@ if [ -z "$rel_id" ]; then exit 1 fi -# Delete existing asset with same name (if any) +# Check if asset exists (skip upload if present) assets_json=$(curl -sS -H "Authorization: token ${TOKEN}" "${API_URL}/repos/${OWNER}/${REPO}/releases/${rel_id}/assets") -asset_id=$(python3 - <<'PY' -import sys, json, os -name=os.environ['ASSET_NAME'] -try: - arr=json.loads(sys.stdin.read()) - for a in arr: - if a.get('name')==name: - print(a.get('id','')) - break -except Exception: - pass -PY -<<<"$assets_json") +asset_exists=$(echo "$assets_json" | jq -r --arg name "$ASSET_NAME" 'any(.[]; .name==$name)') -if [ -n "$asset_id" ]; then - curl -sS -X DELETE -H "Authorization: token ${TOKEN}" "${API_URL}/repos/${OWNER}/${REPO}/releases/${rel_id}/assets/${asset_id}" >/dev/null || true +if [ "$asset_exists" = "true" ]; then + echo "Asset already exists, skipping upload: ${ASSET_NAME}" +else + echo "Uploading asset: ${ASSET_NAME}" + upload_resp=$(curl -sS -H "Authorization: token ${TOKEN}" -F attachment=@"${ASSET_PATH}" "${API_URL}/repos/${OWNER}/${REPO}/releases/${rel_id}/assets?name=${ASSET_NAME}") + html_url=$(echo "$upload_resp" | jq -r '.browser_download_url // empty') + echo "Asset uploaded: ${html_url}" fi -# Upload asset -upload_resp=$(curl -sS -H "Authorization: token ${TOKEN}" -F attachment=@"${ASSET_PATH}" "${API_URL}/repos/${OWNER}/${REPO}/releases/${rel_id}/assets?name=${ASSET_NAME}") - -html_url=$(python3 - <<'PY' -import sys, json -try: - print(json.loads(sys.stdin.read()).get('browser_download_url','')) -except Exception: - print("") -PY -<<<"$upload_resp") - -echo "Release ${TAG} created (id=${rel_id}). Asset uploaded: ${html_url}" +echo "Release ${TAG} ready (id=${rel_id})."