+31
-17
@@ -1,11 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# Create a Gitea release and upload everything in out/.
|
# Publish a NEW Gitea release for this build and upload everything in out/.
|
||||||
# Mirrors the repo's existing Gitea-API release convention.
|
# Never deletes existing releases/tags - each build gets its own tag.
|
||||||
#
|
#
|
||||||
# Config via env (or a local .env next to this script):
|
# Config via env (or a local .env next to this script):
|
||||||
# GITEA_SERVER_URL, GITEA_REPOSITORY, PAT_GITEA
|
# GITEA_SERVER_URL, GITEA_REPOSITORY, PAT_GITEA
|
||||||
# Tag: $1 if given, else the tag on HEAD, else derived as v<server-version>-<shortsha>.
|
# Tag: $1 if given, else derived as v<server-version>-<shortsha>
|
||||||
|
# (a build suffix is appended if that tag already exists).
|
||||||
#
|
#
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
@@ -18,36 +19,49 @@ cd "$(dirname "$0")"
|
|||||||
: "${PAT_GITEA:?}"
|
: "${PAT_GITEA:?}"
|
||||||
|
|
||||||
ROOT="$(git rev-parse --show-toplevel)"
|
ROOT="$(git rev-parse --show-toplevel)"
|
||||||
|
SHA="$(git rev-parse HEAD)"
|
||||||
|
SHORT="$(git rev-parse --short HEAD)"
|
||||||
|
OUT_DIR="$(pwd)/out"
|
||||||
|
REPO_API="${GITEA_SERVER_URL}/api/v1/repos/${GITEA_REPOSITORY}"
|
||||||
|
AUTH=(-H "Authorization: token ${PAT_GITEA}")
|
||||||
|
|
||||||
# Resolve a release tag:
|
# Resolve a unique release tag:
|
||||||
TAG="${1:-$(git tag --points-at HEAD | head -n1)}"
|
TAG="${1:-}"
|
||||||
if [ -z "$TAG" ]; then
|
if [ -z "$TAG" ]; then
|
||||||
VER="$(jq -r .version "$ROOT/httptoolkit-server/package.json")"
|
VER="$(jq -r .version "$ROOT/httptoolkit-server/package.json")"
|
||||||
TAG="v${VER}-$(git rev-parse --short HEAD)"
|
TAG="v${VER}-${SHORT}"
|
||||||
|
# If a release for this commit already exists (e.g. a scheduled rebuild of an
|
||||||
|
# unchanged commit), keep the old one and make this tag unique instead.
|
||||||
|
if curl -sf "${AUTH[@]}" "${REPO_API}/releases/tags/${TAG}" > /dev/null 2>&1; then
|
||||||
|
TAG="${TAG}-${GITHUB_RUN_NUMBER:-$(date -u +%Y%m%d%H%M%S)}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
OUT_DIR="$(pwd)/out"
|
echo "==> Creating release $TAG @ $SHORT"
|
||||||
API="${GITEA_SERVER_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases"
|
RESP=$(curl -s -X POST "${REPO_API}/releases" "${AUTH[@]}" \
|
||||||
|
|
||||||
echo "==> Creating release $TAG"
|
|
||||||
RESP=$(curl -s -X POST "$API" \
|
|
||||||
-H "Authorization: token ${PAT_GITEA}" \
|
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "{\"tag_name\": \"${TAG}\", \"name\": \"HTTP Toolkit ${TAG}\", \"body\": \"Self-hosted single-file build.\"}")
|
-d "{
|
||||||
|
\"tag_name\": \"${TAG}\",
|
||||||
|
\"target_commitish\": \"${SHA}\",
|
||||||
|
\"name\": \"HTTP Toolkit ${TAG}\",
|
||||||
|
\"body\": \"Self-hosted single-file build from ${SHORT}.\",
|
||||||
|
\"draft\": false,
|
||||||
|
\"prerelease\": false
|
||||||
|
}")
|
||||||
|
|
||||||
RID=$(echo "$RESP" | jq -r '.id')
|
RID=$(echo "$RESP" | jq -r '.id // empty')
|
||||||
if [ "$RID" = "null" ] || [ -z "$RID" ]; then
|
if [ -z "$RID" ]; then
|
||||||
echo "!! Failed to create release:"; echo "$RESP"; exit 1
|
echo "!! Failed to create release:"; echo "$RESP"; exit 1
|
||||||
fi
|
fi
|
||||||
echo "==> Release id $RID"
|
echo "==> Release id $RID"
|
||||||
|
|
||||||
|
# Upload artifacts.
|
||||||
shopt -s nullglob
|
shopt -s nullglob
|
||||||
for f in "$OUT_DIR"/*; do
|
for f in "$OUT_DIR"/*; do
|
||||||
[ -f "$f" ] || continue
|
[ -f "$f" ] || continue
|
||||||
name=$(basename "$f")
|
name=$(basename "$f")
|
||||||
echo "==> Uploading $name"
|
echo "==> Uploading $name"
|
||||||
curl -s -X POST "${API}/${RID}/assets?name=${name}" \
|
curl -s -X POST "${REPO_API}/releases/${RID}/assets?name=${name}" "${AUTH[@]}" \
|
||||||
-H "Authorization: token ${PAT_GITEA}" \
|
|
||||||
-H "Content-Type: application/octet-stream" \
|
-H "Content-Type: application/octet-stream" \
|
||||||
--data-binary "@${f}" > /dev/null
|
--data-binary "@${f}" > /dev/null
|
||||||
done
|
done
|
||||||
|
|||||||
Reference in New Issue
Block a user