#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT" # Keep Cargo.lock for reproducible application/package builds. # Generate it only when missing. if ! command -v cargo >/dev/null 2>&1; then echo "error: Rust/Cargo is required" >&2 exit 1 fi if find "$ROOT" -type f \( -name '*.ts' -o -name '*.tsx' \) -print -quit | grep -q .; then echo "error: TypeScript source found in RustBox" >&2 exit 1 fi if [[ -e "$ROOT/src/web/app.js" || ! -f "$ROOT/src/web/js/manifest.txt" ]]; then echo "error: browser JavaScript must be modularized under src/web/js/" >&2 exit 1 fi if command -v python3 >/dev/null 2>&1; then python3 scripts/validate-release-static.py else echo "error: python3 is required for static release validation" >&2 exit 1 fi if [[ ! -f Cargo.lock ]]; then echo "Cargo.lock not found - generating it..." cargo generate-lockfile fi cargo fmt --all cargo fmt --all -- --check cargo test --locked cargo clippy \ --locked \ --all-targets \ -- \ -D warnings cargo build \ --release \ --locked BIN="$ROOT/target/release/rustbox" if [[ ! -x "$BIN" ]]; then echo "error: RustBox binary was not produced: $BIN" >&2 exit 1 fi "$BIN" --version printf 'Built RustBox: %s\n' "$BIN" printf 'Cargo.lock retained: %s\n' "$ROOT/Cargo.lock"