From 79093ed558bbd002478abb048a428d32c4453aa2 Mon Sep 17 00:00:00 2001 From: Daniel Dolezal Date: Fri, 10 Apr 2026 02:59:17 +0200 Subject: [PATCH] only parse json if its json and else return the error --- .gitea/workflows/package-extension.yml | 43 ++++++++++++++++++++------ 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/.gitea/workflows/package-extension.yml b/.gitea/workflows/package-extension.yml index 731bc40..9a93d65 100644 --- a/.gitea/workflows/package-extension.yml +++ b/.gitea/workflows/package-extension.yml @@ -54,18 +54,26 @@ jobs: exit 1 fi - release_response="$(curl --silent --show-error \ + release_body="$(mktemp)" + create_body="$(mktemp)" + trap 'rm -f "$release_body" "$create_body"' EXIT + + release_status="$(curl --silent --show-error \ + --output "$release_body" \ + --write-out "%{http_code}" \ --header "Authorization: token ${ACTION_ACCESS_TOKEN}" \ --header "Accept: application/json" \ "${api_base}/releases/tags/${tag_name}")" - release_id="$(printf '%s' "$release_response" | python - <<'PY' + release_id="$(python - "$release_body" <<'PY' import json import sys + path = sys.argv[1] try: - data = json.load(sys.stdin) - except json.JSONDecodeError: + with open(path, "r", encoding="utf-8") as fh: + data = json.load(fh) + except (FileNotFoundError, json.JSONDecodeError): print("") raise SystemExit(0) @@ -73,7 +81,7 @@ jobs: PY )" - if [ -z "$release_id" ]; then + if [ "$release_status" = "404" ] || [ -z "$release_id" ]; then create_payload="$(python - <<'PY' import json import os @@ -91,30 +99,45 @@ jobs: PY )" - release_response="$(curl --silent --show-error \ + create_status="$(curl --silent --show-error \ --request POST \ + --output "$create_body" \ + --write-out "%{http_code}" \ --header "Authorization: token ${ACTION_ACCESS_TOKEN}" \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --data "$create_payload" \ "${api_base}/releases")" - release_id="$(printf '%s' "$release_response" | python - <<'PY' + if [ "$create_status" -lt 200 ] || [ "$create_status" -ge 300 ]; then + echo "Failed to create release for ${tag_name} (HTTP ${create_status})" >&2 + cat "$create_body" >&2 + exit 1 + fi + + release_id="$(python - "$create_body" <<'PY' import json import sys - data = json.load(sys.stdin) + with open(sys.argv[1], "r", encoding="utf-8") as fh: + data = json.load(fh) print(data["id"]) PY )" + cp "$create_body" "$release_body" + elif [ "$release_status" -lt 200 ] || [ "$release_status" -ge 300 ]; then + echo "Failed to fetch release for ${tag_name} (HTTP ${release_status})" >&2 + cat "$release_body" >&2 + exit 1 fi - existing_asset_id="$(printf '%s' "$release_response" | python - <<'PY' + existing_asset_id="$(python - "$release_body" <<'PY' import json import os import sys - data = json.load(sys.stdin) + with open(sys.argv[1], "r", encoding="utf-8") as fh: + data = json.load(fh) asset_name = os.environ["ASSET_NAME"] for asset in data.get("assets", []):