diff options
Diffstat (limited to '.extras/test-build')
| -rwxr-xr-x | .extras/test-build | 103 |
1 files changed, 102 insertions, 1 deletions
diff --git a/.extras/test-build b/.extras/test-build index 51faadc..4d3f158 100755 --- a/.extras/test-build +++ b/.extras/test-build @@ -33,8 +33,109 @@ TB_OVERRIDES="${TB_OVERRIDES:-$HOME/.config/sbo-testbuild/overrides}" set -uo pipefail # Not -e: a package build failing is a handled outcome, not a script crash. +# ---- flags / globals -------------------------------------------------------- +USE_COLOR=1 # --no-color or non-TTY disables +DRY_RUN=0 # --dry-run: resolve + print order, do not build +ASSUME_YES=0 # --yes: skip the confirm prompt (still prints the order) +USE_CACHE=1 # --no-cache disables the dep cache for one run +VERSION_ID="current" # "current" | "15.0"; set by --stable +TARGET_ARG="" + +ACTIVE_TREE="" # selected SBo tree (by version) +ACTIVE_IMAGE="" # selected image tag (by version) +RUN_DIR="" # timestamped log dir for this run + +# Status tracking. Keyed by "category/prog". Parallel assoc arrays. +declare -A ST_STATUS=() +declare -A ST_REASON=() +declare -A ST_TIME=() +declare -A ST_README=() + +usage() { + cat <<'EOF' +test-build - verify an SBo package builds on a target Slackware in docker + +USAGE: + test-build [OPTIONS] <program-name> + +OPTIONS: + -h, --help This text. + --stable Target Slackware 15.0 (image + tree). Default is -current. + --dry-run Resolve, apply overrides, print the build order, do not build. + --yes Skip the confirm prompt (the order is still printed first). + --no-cache Rebuild all deps this run, ignore/refresh the cache. + --no-color Disable ANSI color (auto-disabled when stdout is not a TTY). +EOF +} + +parse_args() { + while [[ $# -gt 0 ]]; do + case "$1" in + -h|--help) usage; exit 0 ;; + --stable|15.0) VERSION_ID="15.0"; shift ;; + --dry-run) DRY_RUN=1; shift ;; + --yes) ASSUME_YES=1; shift ;; + --no-cache) USE_CACHE=0; shift ;; + --no-color) USE_COLOR=0; shift ;; + -*) echo "Unknown option: $1" >&2; usage >&2; exit 2 ;; + *) + if [[ -n "$TARGET_ARG" ]]; then + echo "Only one target accepted (got '$TARGET_ARG' and '$1')." >&2 + exit 2 + fi + TARGET_ARG="$1"; shift ;; + esac + done + if [[ -z "$TARGET_ARG" ]]; then + echo "No target given." >&2; usage >&2; exit 2 + fi +} + +init_color() { + if [[ $USE_COLOR -eq 1 && -t 1 ]]; then + C_RED=$'\e[31m'; C_GRN=$'\e[32m'; C_YEL=$'\e[33m'; C_RST=$'\e[0m' + else + C_RED=""; C_GRN=""; C_YEL=""; C_RST="" + fi +} + +# Map VERSION_ID to the active tree + image. No I/O, unit-testable. +select_version_paths() { + if [[ "$VERSION_ID" == "15.0" ]]; then + ACTIVE_TREE="$SBO_TREE_STABLE"; ACTIVE_IMAGE="$IMAGE_STABLE" + else + ACTIVE_TREE="$SBO_TREE_CURRENT"; ACTIVE_IMAGE="$IMAGE_CURRENT" + fi +} + +# require_config: the external config must exist and set the version's paths. +require_config() { + if [[ ! -f "$TB_CONFIG" ]]; then + cat >&2 <<EOF +No config file: $TB_CONFIG +Copy the example and edit it: + + mkdir -p "\$(dirname "$TB_CONFIG")" + cp .extras/test-build-config.example "$TB_CONFIG" + \${EDITOR:-vi} "$TB_CONFIG" +EOF + exit 1 + fi + select_version_paths + if [[ -z "$ACTIVE_TREE" || -z "$ACTIVE_IMAGE" ]]; then + echo "Config $TB_CONFIG is missing the tree/image for version '$VERSION_ID'." >&2 + exit 1 + fi + if [[ ! -d "$ACTIVE_TREE" ]]; then + echo "SBo tree for '$VERSION_ID' does not exist: $ACTIVE_TREE" >&2 + exit 1 + fi +} + main() { - : + parse_args "$@" + init_color + require_config } main "$@" |
