ci: fix nightly release missing script
Pipeline / check (push) Successful in 2m4s
Pipeline / release (push) Skipped
Pipeline / nightly (push) Failing after 14m43s
Pipeline / docs (push) Successful in 1m49s

This commit is contained in:
2026-08-08 00:02:33 -04:00
parent 463e320b31
commit 489eca8856
2 changed files with 73 additions and 6 deletions
+4 -6
View File
@@ -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
+69
View File
@@ -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/<owner>/<repo>
# 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="<release-id>"
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"