Files
nx9-wg/scripts/build-release.sh
T

86 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# ==============================================================================
# nx9-wg Production Release Builder
# ==============================================================================
# PURPOSE:
# Runs release quality gates and compiles an optimized release binary:
# 1. Format verification
# 2. Check & Clippy (-D warnings)
# 3. Full workspace test suite
# 4. Release build (cargo build --release --workspace)
# 5. Artifact verification (binary size, permissions, SHA-256)
#
# PREREQUISITES:
# - Rust toolchain (stable)
# - Linux C build tools (libsqlite3 / pkg-config / ldd)
#
# BEHAVIOR:
# - Non-destructive to existing deployments.
# - Does NOT run 'cargo clean' to prevent accidental removal of release artifacts.
# - Produces target/release/nx9-wg.
#
# USAGE:
# bash scripts/build-release.sh
# ./scripts/build-release.sh
# ==============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
log() {
echo -e "\n\033[1;34m[RELEASE-BUILD]\033[0m \033[1;37m$*\033[0m"
}
success() {
echo -e "\033[1;32m[PASS]\033[0m $*"
}
error() {
echo -e "\033[1;31m[ERROR]\033[0m $*" >&2
exit 1
}
cd "${ROOT_DIR}"
log "1/4 Verifying code formatting..."
cargo fmt --all -- --check || error "Formatting verification failed."
success "Formatting verified."
log "2/4 Running compiler and Clippy checks..."
cargo check --workspace --all-targets || error "Cargo check failed."
cargo clippy --workspace --all-targets --all-features -- -D warnings || error "Clippy check failed."
success "Lint checks passed with 0 warnings."
log "3/4 Running full workspace test suite..."
cargo test --workspace --all-targets || error "Workspace test suite failed."
success "All unit and integration tests passed."
log "4/4 Compiling optimized release binary (cargo build --release --workspace)..."
cargo build --release --workspace || error "Release build failed."
TARGET_BIN="${ROOT_DIR}/target/release/nx9-wg"
if [[ ! -f "${TARGET_BIN}" ]]; then
error "Expected release binary not found at ${TARGET_BIN}"
fi
if [[ ! -x "${TARGET_BIN}" ]]; then
error "Release binary is not executable at ${TARGET_BIN}"
fi
BIN_SIZE="$(du -h "${TARGET_BIN}" | cut -f1)"
BIN_SHA="$(sha256sum "${TARGET_BIN}" | awk '{print $1}')"
BIN_DATE="$(date -r "${TARGET_BIN}" '+%Y-%m-%d %H:%M:%S')"
echo -e "\n================================================================="
echo -e "\033[1;32m RELEASE BUILD SUCCESSFUL!\033[0m"
echo -e "================================================================="
echo " Binary Path: ${TARGET_BIN}"
echo " Binary Size: ${BIN_SIZE}"
echo " Timestamp: ${BIN_DATE}"
echo " SHA-256: ${BIN_SHA}"
echo " Version: $("${TARGET_BIN}" version | head -n 1)"
echo -e "=================================================================\n"