only parse json if its json and else return the error

This commit is contained in:
2026-04-10 02:59:17 +02:00
parent 846a56cf1e
commit 79093ed558
+33 -10
View File
@@ -54,18 +54,26 @@ jobs:
exit 1 exit 1
fi 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 "Authorization: token ${ACTION_ACCESS_TOKEN}" \
--header "Accept: application/json" \ --header "Accept: application/json" \
"${api_base}/releases/tags/${tag_name}")" "${api_base}/releases/tags/${tag_name}")"
release_id="$(printf '%s' "$release_response" | python - <<'PY' release_id="$(python - "$release_body" <<'PY'
import json import json
import sys import sys
path = sys.argv[1]
try: try:
data = json.load(sys.stdin) with open(path, "r", encoding="utf-8") as fh:
except json.JSONDecodeError: data = json.load(fh)
except (FileNotFoundError, json.JSONDecodeError):
print("") print("")
raise SystemExit(0) raise SystemExit(0)
@@ -73,7 +81,7 @@ jobs:
PY PY
)" )"
if [ -z "$release_id" ]; then if [ "$release_status" = "404" ] || [ -z "$release_id" ]; then
create_payload="$(python - <<'PY' create_payload="$(python - <<'PY'
import json import json
import os import os
@@ -91,30 +99,45 @@ jobs:
PY PY
)" )"
release_response="$(curl --silent --show-error \ create_status="$(curl --silent --show-error \
--request POST \ --request POST \
--output "$create_body" \
--write-out "%{http_code}" \
--header "Authorization: token ${ACTION_ACCESS_TOKEN}" \ --header "Authorization: token ${ACTION_ACCESS_TOKEN}" \
--header "Accept: application/json" \ --header "Accept: application/json" \
--header "Content-Type: application/json" \ --header "Content-Type: application/json" \
--data "$create_payload" \ --data "$create_payload" \
"${api_base}/releases")" "${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 json
import sys 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"]) print(data["id"])
PY 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 fi
existing_asset_id="$(printf '%s' "$release_response" | python - <<'PY' existing_asset_id="$(python - "$release_body" <<'PY'
import json import json
import os import os
import sys 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"] asset_name = os.environ["ASSET_NAME"]
for asset in data.get("assets", []): for asset in data.get("assets", []):