universalisos/tools/build-release.sh

104 lines
3 KiB
Bash
Executable file

#!/usr/bin/env bash
# Multi-architecture build for UniversalisOS release artifacts.
#
# Usage:
# tools/build-release.sh <version>
#
# Builds:
# - kernel ELF for armv7, aarch64, riscv
# - mycelium CLI (if Rust toolchain available)
# - Copies all artifacts to release/<version>/
# - Generates SHA256SUMS
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
VERSION="${1:?Usage: $0 <version>}"
RELEASE_DIR="$REPO_ROOT/release/$VERSION"
cd "$REPO_ROOT"
mkdir -p "$RELEASE_DIR"
# --- Build matrix ---
declare -A KERNEL_TARGETS=(
["armv7"]="qemu-arm-virt"
["aarch64"]="qemu-aarch64-virt"
["riscv"]="polarfire"
)
echo "==> Building UniversalisOS $VERSION"
echo ""
# --- Build kernel for each architecture ---
for ARCH in "${!KERNEL_TARGETS[@]}"; do
PLATFORM="${KERNEL_TARGETS[$ARCH]}"
echo "--- Building kernel: $ARCH/$PLATFORM ---"
(
cd kernel
make ARCH="$ARCH" PLATFORM="$PLATFORM" clean
make ARCH="$ARCH" PLATFORM="$PLATFORM"
)
ELF="kernel/build/$ARCH/$PLATFORM/universalisos.elf"
if [[ -f "$ELF" ]]; then
cp "$ELF" "$RELEASE_DIR/universalisos-$ARCH-$PLATFORM.elf"
echo " OK: $ELF"
else
echo " WARN: $ELF not found, skipping"
fi
echo ""
done
# --- Build mycelium CLI ---
if command -v cargo &>/dev/null && [[ -d "$REPO_ROOT/mycelium-tfw-extension" ]]; then
echo "--- Building mycelium CLI ---"
(
cd mycelium-tfw-extension
cargo build --release 2>/dev/null || echo " WARN: cargo build failed, skipping"
)
MYCELIUM_BIN="mycelium-tfw-extension/target/release/mycelium"
if [[ -f "$MYCELIUM_BIN" ]]; then
cp "$MYCELIUM_BIN" "$RELEASE_DIR/mycelium"
echo " OK: $MYCELIUM_BIN"
else
echo " WARN: mycelium binary not found, skipping"
fi
echo ""
else
echo "--- Skipping mycelium CLI (cargo not found) ---"
echo ""
fi
# --- Copy supporting files ---
echo "--- Copying supporting files ---"
[[ -f "$REPO_ROOT/LICENSE" ]] && cp "$REPO_ROOT/LICENSE" "$RELEASE_DIR/LICENSE"
[[ -f "$REPO_ROOT/CHANGELOG.md" ]] && cp "$REPO_ROOT/CHANGELOG.md" "$RELEASE_DIR/CHANGELOG.md"
[[ -f "$REPO_ROOT/VERSION" ]] && cp "$REPO_ROOT/VERSION" "$RELEASE_DIR/VERSION"
# Copy uos-cover tools
if [[ -d "$REPO_ROOT/tools/uos-cover" ]]; then
mkdir -p "$RELEASE_DIR/tools/uos-cover"
cp "$REPO_ROOT"/tools/uos-cover/*.py "$RELEASE_DIR/tools/uos-cover/" 2>/dev/null || true
echo " uos-cover tools"
fi
# Copy uos-pkg tools
if [[ -d "$REPO_ROOT/tools/uos-pkg" ]]; then
mkdir -p "$RELEASE_DIR/tools/uos-pkg"
cp "$REPO_ROOT"/tools/uos-pkg/*.py "$RELEASE_DIR/tools/uos-pkg/" 2>/dev/null || true
echo " uos-pkg tools"
fi
# --- Generate SHA256SUMS ---
echo ""
echo "--- Generating SHA256SUMS ---"
(
cd "$RELEASE_DIR"
find . -type f ! -name SHA256SUMS -exec sha256sum {} \; > SHA256SUMS
)
echo ""
echo "==> Build complete. Artifacts in: $RELEASE_DIR"
ls -la "$RELEASE_DIR/"