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>
78 lines
2.3 KiB
Bash
Executable File
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)"
|
|
}
|