#!/usr/bin/env bash set -euo pipefail root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$root" tag="${RELEASE_TAG:-}" if [ -z "$tag" ]; then tag="${GITHUB_REF_NAME:-}" fi if [ -z "$tag" ] && [ -n "${GITHUB_REF:-}" ]; then tag="${GITHUB_REF##*/}" fi if [ -z "$tag" ]; then echo "GITHUB_REF_NAME or GITHUB_REF is required" >&2 exit 1 fi repo="${GITHUB_REPOSITORY:-agent/dataxl}" server="${GITHUB_SERVER_URL:-https://git.rumginger.org}" api="${server%/}/api/v1" token="${GITEA_TOKEN:?GITEA_TOKEN is required}" auth_header="Authorization: token ${token}" status="$( curl -sS -o /tmp/dataxl-release.json -w "%{http_code}" \ -H "$auth_header" \ "$api/repos/$repo/releases/tags/$tag" )" if [ "$status" = "200" ]; then release_json="$(cat /tmp/dataxl-release.json)" elif [ "$status" = "404" ]; then body="$( python3 - "$tag" <<'PY' import json import sys tag = sys.argv[1] print(json.dumps({ "tag_name": tag, "name": tag, "body": f"Automated dataxl release for {tag}.", "draft": False, "prerelease": any(part in tag for part in ("alpha", "beta", "rc")), })) PY )" release_json="$( curl -fsS \ -H "$auth_header" \ -H "Content-Type: application/json" \ -d "$body" \ "$api/repos/$repo/releases" )" else echo "failed to look up release for $tag: HTTP $status" >&2 cat /tmp/dataxl-release.json >&2 exit 1 fi release_id="$( python3 -c 'import json, sys; print(json.load(sys.stdin)["id"])' <<<"$release_json" )" for file in dist/*; do [ -f "$file" ] || continue name="$(basename "$file")" assets_json="$( curl -fsS \ -H "$auth_header" \ "$api/repos/$repo/releases/$release_id/assets" )" existing_id="$( python3 -c ' import json import sys name = sys.argv[1] for asset in json.load(sys.stdin): if asset.get("name") == name: print(asset["id"]) break ' "$name" <<<"$assets_json" )" if [ -n "$existing_id" ]; then curl -fsS -X DELETE \ -H "$auth_header" \ "$api/repos/$repo/releases/$release_id/assets/$existing_id" fi encoded_name="$( python3 - "$name" <<'PY' import sys import urllib.parse print(urllib.parse.quote(sys.argv[1])) PY )" curl -fsS \ -H "$auth_header" \ -F "attachment=@${file}" \ "$api/repos/$repo/releases/$release_id/assets?name=$encoded_name" \ >/dev/null done