#!/usr/bin/env bash # release-server.sh — ensure the Forgejo release for a server-v* tag exists # and upload the three compiled binaries as release assets. Assumes # compile-backend.sh has already produced # server/out/{pangolin-server,pangolin-agent,pangolin-migrate}. # # Usage: scripts/ci/release-server.sh (e.g. server-v1.2.3) # Requires env: FORGEJO_URL, FORGEJO_TOKEN (see lib-forgejo.sh). set -euo pipefail TAG="${1:?usage: release-server.sh }" # shellcheck source=scripts/ci/_env.sh . scripts/ci/_env.sh # shellcheck source=scripts/ci/lib-forgejo.sh . scripts/ci/lib-forgejo.sh # No command substitution ($()): ver_from_tag prints to stdout, captured via # a temp file + `read`, same no-substitution pattern as lib-forgejo.sh. ver_file="/tmp/release_server_ver.$$" ver_from_tag server "$TAG" > "$ver_file" VER="" # `|| true`: ver_from_tag 用 printf '%s'(无结尾换行),read 到无换行的 EOF 会返回 1 # (但 VER 已正确赋值)——set -e 下会静默退出。容错 read 的这个退出码,不掩盖真错。 read -r VER < "$ver_file" || true rm -f "$ver_file" echo "==> release-server: tag=${TAG} ver=${VER}" forgejo_release_ensure "$TAG" "server ${VER}" forgejo_upload_asset "$TAG" server/out/pangolin-server forgejo_upload_asset "$TAG" server/out/pangolin-agent forgejo_upload_asset "$TAG" server/out/pangolin-migrate echo "==> release-server: done"