From 489eca885688d0fc2ac199fdfee87e6c40695e11 Mon Sep 17 00:00:00 2001 From: Alex Maldonado Date: Sat, 8 Aug 2026 00:02:33 -0400 Subject: [PATCH] ci: fix nightly release missing script --- .gitea/workflows/pipeline.yml | 10 ++--- scripts/gitea-release.sh | 69 +++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 6 deletions(-) create mode 100755 scripts/gitea-release.sh diff --git a/.gitea/workflows/pipeline.yml b/.gitea/workflows/pipeline.yml index 4202a46..d1eaf37 100644 --- a/.gitea/workflows/pipeline.yml +++ b/.gitea/workflows/pipeline.yml @@ -47,13 +47,11 @@ jobs: COURSEBANK_VERSION="$(bash scripts/nightly-version.sh)" export COURSEBANK_VERSION echo "nightly version: ${COURSEBANK_VERSION}" - pixi run build + pixi run setup-tools + pixi run dist - name: Package - run: | - mkdir -p stage - cp target/release/coursebank LICENSE.md stage/ - bash scripts/package.sh coursebank-nightly-linux-x64.tar.gz stage + run: bash scripts/package.sh coursebank-nightly-linux-x64.tar.gz dist - name: Publish the rolling nightly prerelease env: @@ -137,4 +135,4 @@ jobs: bash scripts/publish-docs.sh "$channel" - name: Point the site root at the latest release, else nightly - run: bash scripts/docs-default-redirect.sh + run: bash scripts/redirect-docs.sh diff --git a/scripts/gitea-release.sh b/scripts/gitea-release.sh new file mode 100755 index 0000000..a59078f --- /dev/null +++ b/scripts/gitea-release.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +# Create (or replace) a Gitea release and upload assets, using the Gitea API. +# +# Required env: +# GITEA_API e.g. https://git.scient.ing/api/v1/repos// +# GITEA_TOKEN a token with contents:write +# TAG the release tag +# ASSETS space-separated list of files to attach +# Optional env: +# RELEASE_NAME (default: $TAG) +# BODY (default: empty) +# PRERELEASE true|false (default: false) +# REPLACE true|false (default: false) delete an existing release+tag first +# TARGET_COMMITISH (default: empty; Gitea uses the default branch) +# JQ jq command (default: jq); set to e.g. "pixi exec --spec jq -- jq" +# DRY_RUN set to anything to print actions instead of calling the API +set -euo pipefail +: "${GITEA_API:?}"; : "${GITEA_TOKEN:?}"; : "${TAG:?}"; : "${ASSETS:?}" +: "${JQ:=jq}" +name="${RELEASE_NAME:-$TAG}" +body="${BODY:-}" +prerelease="${PRERELEASE:-false}" +replace="${REPLACE:-false}" +target="${TARGET_COMMITISH:-}" +auth="Authorization: token ${GITEA_TOKEN}" +dry="${DRY_RUN:-}" +say() { echo "[gitea-release] $*"; } + +if [ "$replace" = "true" ]; then + say "replacing any existing '$TAG' release and tag" + if [ -n "$dry" ]; then + say "DRY_RUN GET/DELETE ${GITEA_API}/releases/tags/${TAG} and DELETE tag ${TAG}" + else + existing=$(curl -fsSL -H "$auth" "${GITEA_API}/releases/tags/${TAG}" 2>/dev/null || true) + if [ -n "$existing" ]; then + id=$(printf '%s' "$existing" | $JQ -r '.id // empty') + [ -n "$id" ] && curl -fsSL -X DELETE -H "$auth" "${GITEA_API}/releases/${id}" + fi + curl -fsSL -X DELETE -H "$auth" "${GITEA_API}/tags/${TAG}" 2>/dev/null || true + fi +fi + +payload=$($JQ -n \ + --arg tag "$TAG" --arg name "$name" --arg body "$body" \ + --argjson pre "$prerelease" --arg target "$target" \ + '{tag_name:$tag, name:$name, body:$body, draft:false, prerelease:$pre} + + (if $target == "" then {} else {target_commitish:$target} end)') + +say "creating release '$TAG' (prerelease=$prerelease)" +if [ -n "$dry" ]; then + say "DRY_RUN POST ${GITEA_API}/releases" + printf '%s\n' "$payload" + rid="" +else + rid=$(curl -fsSL -X POST -H "$auth" -H "Content-Type: application/json" \ + "${GITEA_API}/releases" -d "$payload" | $JQ -r '.id') +fi + +for f in $ASSETS; do + n=$(basename "$f") + say "uploading $n" + if [ -n "$dry" ]; then + say "DRY_RUN POST ${GITEA_API}/releases/${rid}/assets?name=${n} (@${f})" + else + curl -fsSL -X POST -H "$auth" -F "attachment=@${f}" \ + "${GITEA_API}/releases/${rid}/assets?name=${n}" + fi +done +say "done"