Files
WHCandCursor 814a31c9c8 feat: restore CI/release, prompt contracts, faster install (0.9.33)
Bring back Gitea CI + auto-publish; share release helpers; strengthen multi-turn
tool/job prompts with a unit contract; ccache/make help and --release bootstrap.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-29 19:56:42 +08:00

78 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Shared helpers for packaging and publishing. Source from other scripts:
# ROOT=...; . "$ROOT/scripts/lib_release.sh"
# Safe to source multiple times.
[[ -n "${_CST_LIB_RELEASE:-}" ]] && return 0
_CST_LIB_RELEASE=1
: "${ROOT:=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
# Print MAJOR.MINOR.PATCH from include/cst_version.h
cst_version() {
sed -n 's/^#define CST_VERSION_\(MAJOR\|MINOR\|PATCH\) \([0-9]*\)$/\2/p' \
"$ROOT/include/cst_version.h" | paste -sd.
}
# Write FILE.sha256 next to FILE (relative to cwd of FILE's directory).
cst_sha256_write() {
local f="$1" dir base
dir="$(cd "$(dirname "$f")" && pwd)"
base="$(basename "$f")"
(cd "$dir" && sha256sum "$base" >"$base.sha256")
}
# Pack DIR (relative to PARENT) as PARENT/NAME.tar.gz + .sha256
# cst_pack_tgz dist cst-agent-0.9.33-linux-x86_64
cst_pack_tgz() {
local parent="$1" name="$2"
mkdir -p "$parent"
tar -C "$parent" -czf "$parent/$name.tar.gz" "$name"
cst_sha256_write "$parent/$name.tar.gz"
echo "$parent/$name.tar.gz"
}
# Host arch for release asset names (x86_64|x86|aarch64) or empty.
cst_host_release_arch() {
case "$(uname -m)" in
x86_64 | amd64) echo x86_64 ;;
aarch64 | arm64) echo aarch64 ;;
i686 | i386 | x86) echo x86 ;;
*) return 1 ;;
esac
}
# Download URL candidates for a Gitea/GitHub release asset.
# cst_release_asset_urls VER NAME -> prints urls
cst_release_asset_urls() {
local ver="$1" name="$2"
local server="${CST_GITEA:-${GITHUB_SERVER_URL:-https://git.whcself.xyz}}"
local repo="${CST_REPO:-${GITHUB_REPOSITORY:-WHC/CST-agent}}"
printf '%s\n' \
"$server/$repo/releases/download/v$ver/$name" \
"https://ghfast.top/$server/$repo/releases/download/v$ver/$name"
}
# Fetch URL list to OUT; first success wins. Returns 0 on success.
cst_fetch() {
local out="$1"
shift
local u
for u in "$@"; do
echo " try $u" >&2
if curl -fsSL --retry 2 --connect-timeout 15 --max-time 600 -o "$out.part" "$u"; then
mv "$out.part" "$out"
return 0
fi
done
rm -f "$out.part"
return 1
}
# Fingerprint for incremental release rebuilds (compiler + version).
cst_build_stamp() {
local cc="${1:?}"
local machine
machine="$("$cc" -dumpmachine 2>/dev/null || echo unknown)"
printf '%s %s\n' "$machine" "$(cst_version)"
}