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
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", []):