#!/usr/bin/env bash set -euo pipefail action=${1:-} : "${GITEA_TOKEN:?GITEA_TOKEN is required}" : "${GITHUB_SERVER_URL:?GITHUB_SERVER_URL is required}" : "${GITHUB_REPOSITORY:?GITHUB_REPOSITORY is required}" api="${GITHUB_SERVER_URL%/}/api/v1/repos/${GITHUB_REPOSITORY}" auth_header="Authorization: token ${GITEA_TOKEN}" case "$action" in create) : "${VERSION:?VERSION is required}" tag="v${VERSION}" if response=$(curl -fsS -H "$auth_header" "$api/releases/tags/$tag" 2>/dev/null); then jq -er '.id' <<<"$response" exit 0 fi openwrt_release=$(jq -er '.openwrt_release' .gitea/release-targets.json) payload=$(jq -n --arg tag "$tag" --arg version "$VERSION" --arg sha "${GITHUB_SHA:-main}" --arg openwrt "$openwrt_release" '{tag_name: $tag, target_commitish: $sha, name: ("openUniFi " + $version), body: ("Automated multi-architecture build for OpenWrt " + $openwrt + "."), draft: true, prerelease: false}') curl -fsS -X POST -H "$auth_header" -H 'Content-Type: application/json' --data "$payload" "$api/releases" | jq -er '.id' ;; upload) : "${RELEASE_ID:?RELEASE_ID is required}" : "${ASSET:?ASSET is required}" [[ -f $ASSET ]] || { echo "asset not found: $ASSET" >&2; exit 1; } asset_name=$(basename -- "$ASSET") old_asset_id=$(curl -fsS -H "$auth_header" "$api/releases/$RELEASE_ID/assets" | jq -r --arg name "$asset_name" '.[] | select(.name == $name) | .id' | head -n 1) if [[ -n $old_asset_id ]]; then curl -fsS -X DELETE -H "$auth_header" "$api/releases/$RELEASE_ID/assets/$old_asset_id" fi curl -fsS -X POST -H "$auth_header" -F "attachment=@${ASSET}" "$api/releases/$RELEASE_ID/assets?name=$asset_name" >/dev/null ;; publish) : "${RELEASE_ID:?RELEASE_ID is required}" curl -fsS -X PATCH -H "$auth_header" -H 'Content-Type: application/json' --data '{"draft":false}' "$api/releases/$RELEASE_ID" >/dev/null ;; *) echo "usage: $0 {create|upload|publish}" >&2 exit 2 ;; esac