#!/usr/bin/env bash # # Create a Gitea release and upload everything in out/. # Mirrors the repo's existing Gitea-API release convention. # # Config via env (or a local .env next to this script): # GITEA_SERVER_URL, GITEA_REPOSITORY, PAT_GITEA # Tag: $1 if given, else the tag on HEAD, else derived as v-. # set -euo pipefail cd "$(dirname "$0")" # Optional: load credentials from a local .env for manual runs. [ -f .env ] && source ./.env : "${GITEA_SERVER_URL:?}" : "${GITEA_REPOSITORY:?}" : "${PAT_GITEA:?}" ROOT="$(git rev-parse --show-toplevel)" # Resolve a release tag: TAG="${1:-$(git tag --points-at HEAD | head -n1)}" if [ -z "$TAG" ]; then VER="$(jq -r .version "$ROOT/httptoolkit-server/package.json")" TAG="v${VER}-$(git rev-parse --short HEAD)" fi OUT_DIR="$(pwd)/out" API="${GITEA_SERVER_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases" echo "==> Creating release $TAG" RESP=$(curl -s -X POST "$API" \ -H "Authorization: token ${PAT_GITEA}" \ -H "Content-Type: application/json" \ -d "{\"tag_name\": \"${TAG}\", \"name\": \"HTTP Toolkit ${TAG}\", \"body\": \"Self-hosted single-file build.\"}") RID=$(echo "$RESP" | jq -r '.id') if [ "$RID" = "null" ] || [ -z "$RID" ]; then echo "!! Failed to create release:"; echo "$RESP"; exit 1 fi echo "==> Release id $RID" shopt -s nullglob for f in "$OUT_DIR"/*; do [ -f "$f" ] || continue name=$(basename "$f") echo "==> Uploading $name" curl -s -X POST "${API}/${RID}/assets?name=${name}" \ -H "Authorization: token ${PAT_GITEA}" \ -H "Content-Type: application/octet-stream" \ --data-binary "@${f}" > /dev/null done echo "==> Release complete."