#!/bin/bash # Publish built artifacts to a Gitea release in the s3-gateway repo. # Idempotent: re-running for the same tag replaces existing assets. # # Environment: # GITEA_API_URL e.g. https://git.anomalous.dev/api/v1 (required) # GITEA_OWNER e.g. alphacentri (required) # GITEA_REPO e.g. s3-gateway (required) # GITEA_TOKEN API token with repo write scope (required) # VGW_TAG upstream tag being published (required) # VGW_DIST_DIR artifact dir (default: /dist) # RELEASE_TAG git tag for the release (default: VGW_TAG) # RELEASE_TARGET target commitish for the tag (default: main) # RELEASE_NOTE release body (default: auto) set -euo pipefail : "${GITEA_API_URL:?}"; : "${GITEA_OWNER:?}"; : "${GITEA_REPO:?}"; : "${GITEA_TOKEN:?}" : "${VGW_TAG:?VGW_TAG must be set}" DIST="${VGW_DIST_DIR:-${VGW_SRC_DIR:-src}/dist}" RELEASE_TAG="${RELEASE_TAG:-${VGW_TAG}}" RELEASE_TARGET="${RELEASE_TARGET:-main}" RELEASE_NOTE="${RELEASE_NOTE:-De-branded versitygw ${VGW_TAG} build.}" API="${GITEA_API_URL%/}/repos/${GITEA_OWNER}/${GITEA_REPO}" auth=(-H "Authorization: token ${GITEA_TOKEN}") echo ">>> ensuring release ${RELEASE_TAG} in ${GITEA_OWNER}/${GITEA_REPO}..." rel_id="$(curl -fsSL "${auth[@]}" "${API}/releases/tags/${RELEASE_TAG}" 2>/dev/null \ | jq -r '.id // empty' || true)" if [[ -z "${rel_id}" ]]; then echo ">>> creating release ${RELEASE_TAG}" rel_id="$(curl -fsSL "${auth[@]}" -H 'Content-Type: application/json' \ -X POST "${API}/releases" \ -d "$(jq -n --arg tag "$RELEASE_TAG" --arg tgt "$RELEASE_TARGET" \ --arg name "$RELEASE_TAG" --arg body "$RELEASE_NOTE" \ '{tag_name:$tag, target_commitish:$tgt, name:$name, body:$body, draft:false, prerelease:false}')" \ | jq -r '.id')" else echo ">>> release ${RELEASE_TAG} already exists (id ${rel_id})" fi shopt -s nullglob assets=( "${DIST}"/*.tar.gz "${DIST}"/*.zip "${DIST}"/*.deb "${DIST}"/*.rpm "${DIST}"/checksums.txt ) shopt -u nullglob (( ${#assets[@]} )) || { echo "ERROR: no artifacts in ${DIST}" >&2; exit 1; } existing="$(curl -fsSL "${auth[@]}" "${API}/releases/${rel_id}/assets" || echo '[]')" for f in "${assets[@]}"; do name="$(basename "$f")" old="$(echo "$existing" | jq -r --arg n "$name" '.[] | select(.name==$n) | .id' 2>/dev/null || true)" if [[ -n "$old" ]]; then echo ">>> replacing asset ${name}" curl -fsSL "${auth[@]}" -X DELETE "${API}/releases/${rel_id}/assets/${old}" >/dev/null else echo ">>> uploading asset ${name}" fi curl -fsSL "${auth[@]}" -F "attachment=@${f}" \ "${API}/releases/${rel_id}/assets?name=${name}" >/dev/null done echo ">>> published ${#assets[@]} artifact(s) to release ${RELEASE_TAG}"