From 0486839dd0e7706d8b0db5fde55152b2b0f17c7f Mon Sep 17 00:00:00 2001 From: vasilito Date: Mon, 27 Jul 2026 13:15:22 +0900 Subject: [PATCH] build-redbear.sh: add CLI flags for the common operator knobs Convert the routinely-used environment knobs to command-line flags (the canonical interface); the REDBEAR_*/JOBS env vars remain deprecated fallbacks. New flags: -j/--jobs, --release VER, --allow-dirty, --keep-build-state (--upstream/--no-cache already existed). Resolved values are re-exported so the gates and sub-scripts observe them. Rare escape hatches stay env-only and are documented under an 'Advanced' section in --help. Dropped the phantom REDBEAR_SKIP_ABI_STALENESS doc; did not add --arch/--target (x86_64-only build). Co-Authored-By: Claude Opus 4.8 (1M context) --- local/scripts/build-redbear.sh | 77 ++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 27 deletions(-) diff --git a/local/scripts/build-redbear.sh b/local/scripts/build-redbear.sh index d02f327078..3e1286aa53 100755 --- a/local/scripts/build-redbear.sh +++ b/local/scripts/build-redbear.sh @@ -9,7 +9,7 @@ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" # REDBEAR_VERSION (which tracks the OS release derived from the git branch). # Starts at 1.0 and is bumped AUTOMATICALLY on every change by the pre-commit # git hook (local/scripts/bump-build-version.sh); do not edit the minor by hand. -BUILD_REDBEAR_VERSION="1.2" +BUILD_REDBEAR_VERSION="1.3" # ── Colorized output ────────────────────────────────── # Enabled only on a TTY with NO_COLOR unset, so redirected build logs and CI @@ -204,16 +204,23 @@ if [ -f "$PROJECT_ROOT/.config" ]; then done < "$PROJECT_ROOT/.config" fi +# ── Operator knobs ───────────────────────────────────────────── +# The common knobs below have CLI flags (the canonical interface); the matching +# REDBEAR_*/JOBS environment variables remain DEPRECATED fallback defaults so +# older automation keeps working. Rarer escape hatches stay env-only (listed in +# usage()). Resolved values are re-exported after the parser so this script's +# gates and the sub-scripts observe the flag-provided values. CONFIG="redbear-full" JOBS="${JOBS:-$(nproc)}" APPLY_PATCHES="${APPLY_PATCHES:-1}" -ALLOW_UPSTREAM=0 NO_CACHE=0 +ALLOW_UPSTREAM="${REDBEAR_ALLOW_UPSTREAM:-0}" +ALLOW_DIRTY="${REDBEAR_ALLOW_DIRTY:-0}" +KEEP_BUILD_STATE="${REDBEAR_KEEP_BUILD_STATE:-0}" +RELEASE="${REDBEAR_RELEASE:-}" # ARCH and HOST_ARCH are used by the Makefile (mk/config.mk) and the prefix -# rule (mk/prefix.mk). They are derived from `uname -m` if unset. Exporting -# them at the top of this script ensures the auto-rebuild-prefix path -# below receives a valid value, and the variable is visible to subprocesses. +# rule (mk/prefix.mk). They are derived from `uname -m` if unset. export ARCH="${ARCH:-$(uname -m)}" export HOST_ARCH="${HOST_ARCH:-$(uname -m)}" @@ -224,8 +231,12 @@ Usage: $(basename "$0") [OPTIONS] [CONFIG] Build a tracked Red Bear OS profile. Options: - --upstream Allow Redox/upstream recipe source refresh during build - --no-cache Force clean rebuild, discarding cached packages + -j, --jobs N Parallel build jobs (default: nproc) + --upstream Allow Redox/upstream recipe source refresh during build + --no-cache Force clean rebuild, discarding cached packages + --release VER Build from the immutable release archive VER + --allow-dirty Build with uncommitted fork edits (cooks the tree AS-IS) + --keep-build-state Keep the diagnostic state dir after exit -h, --help Show this help -V, --version Show build-system version/provenance and exit @@ -235,30 +246,34 @@ Configs: redbear-grub Text-only with GRUB boot manager redbear-bare Stripped-to-bare-minimum: kernel+7-initfs-daemons+zsh login -Environment: - REDBEAR_RELEASE If set, builds from immutable release archives. - Override to empty for development builds. - REDBEAR_SKIP_ABI_STALENESS=1 - Fast iteration: skip the relibc-consumer invalidation - churn so a rerun goes straight to the recipe you changed - (the cookbook cache still re-cooks changed sources). Safe - ONLY when relibc's ABI is unchanged. Unset it whenever you - bump relibc/base, or stale binaries may ship. - REDBEAR_FORCE_TOOLCHAIN_RECOOK=1 - Force a full re-cook of preserved toolchain packages - (llvm21/clang21/lld21/rust) on a relibc change. +Advanced (rare escape hatches — set as environment variables): + REDBEAR_ALLOW_CONCURRENT=1 Skip the single-build lock + REDBEAR_ALLOW_WRONG_BRANCH=1 Build with a fork off its submodule/ branch + REDBEAR_SKIP_PREFIX_REBUILD=1 Do not auto-rebuild a stale prefix sysroot + REDBEAR_FORCE_TOOLCHAIN_RECOOK=1 Re-cook llvm21/clang21/lld21/rust on a relibc change + REDBEAR_SKIP_FORK_VERIFY=1 Skip fork version verification (preflight) + REDBEAR_SKIP_DRIFT_CHECK=1 Skip upstream drift check (preflight) + REDBEAR_SKIP_FUNCTION_CHECK=1 Skip fork-function verification (preflight) + REDBEAR_SKIP_COLLISION_CHECK=1 Skip config-vs-package collision detection (preflight) + REDBEAR_SKIP_PATCH_CONTENT_CHECK=1 Skip orphaned-patch content check (preflight) + REDBEAR_STRICT_DURABILITY=1 Fail on non-durable source edits (preflight) + REDBEAR_STRICT_METADATA=1 Fail on recipe metadata issues (preflight) + REDBEAR_NO_VALIDATE=1 Skip the post-build image validation chain (make) + REDBEAR_COLLISIONS_WARN=1 Downgrade install-collision failures to warnings (make) EOF } POSITIONAL=() while [ $# -gt 0 ]; do case "$1" in - --upstream) - ALLOW_UPSTREAM=1 - ;; - --no-cache) - NO_CACHE=1 - ;; + --upstream) ALLOW_UPSTREAM=1 ;; + --no-cache) NO_CACHE=1 ;; + -j|--jobs) shift; JOBS="${1:?--jobs requires a number}" ;; + --jobs=*) JOBS="${1#*=}" ;; + --release) shift; RELEASE="${1:?--release requires a version}" ;; + --release=*) RELEASE="${1#*=}" ;; + --allow-dirty) ALLOW_DIRTY=1 ;; + --keep-build-state) KEEP_BUILD_STATE=1 ;; -h|--help) usage exit 0 @@ -297,6 +312,14 @@ case "$CONFIG" in ;; esac +# Re-export resolved common knobs so this script's gates, build-preflight.sh and +# the Makefile see the flag-provided values (flags override the deprecated +# REDBEAR_* env fallbacks). REDBEAR_RELEASE is exported as-is (empty = dev build). +export REDBEAR_ALLOW_UPSTREAM="$ALLOW_UPSTREAM" +export REDBEAR_ALLOW_DIRTY="$ALLOW_DIRTY" +export REDBEAR_KEEP_BUILD_STATE="$KEEP_BUILD_STATE" +export REDBEAR_RELEASE="$RELEASE" + hdr "========================================" hdr " Red Bear OS Build System" hdr "========================================" @@ -341,7 +364,7 @@ if [ "${REDBEAR_ALLOW_DIRTY:-0}" != "1" ] && [ -z "${REDBEAR_RELEASE:-}" ]; then echo "committed state. Commit, stash, or reset your changes before" >&2 echo "running a canonical build." >&2 echo "" >&2 - echo "Override (emergency only): REDBEAR_ALLOW_DIRTY=1 $0 $*" >&2 + echo "Override (emergency only): $0 --allow-dirty $*" >&2 exit 1 fi fi @@ -441,7 +464,7 @@ redbear_dump_failure_diagnostics() { echo "Diagnostic state preserved at:" echo " $REDBEAR_BUILD_STATE_DIR" echo "" - echo "Set REDBEAR_KEEP_BUILD_STATE=1 before running to retain this directory" + echo "Pass --keep-build-state to retain this directory" echo "after the script exits." echo ""