#!/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)" }