universalisos/tools/package.sh

79 lines
2.1 KiB
Bash
Executable file

#!/usr/bin/env bash
# Release packager for UniversalisOS.
#
# Usage:
# tools/package.sh <version>
#
# Creates a tarball containing:
# - universalisos-*.elf (all architectures)
# - mycelium binary
# - uos-cover tools
# - docs, CHANGELOG, VERSION, LICENSE
#
# Output: release/<version>/universalisos-<version>.tar.gz
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"
TARBALL="$RELEASE_DIR/universalisos-$VERSION.tar.gz"
STAGING="$REPO_ROOT/release/.staging-$VERSION"
cd "$REPO_ROOT"
if [[ ! -d "$RELEASE_DIR" ]]; then
echo "error: release directory $RELEASE_DIR not found" >&2
echo " Run tools/build-release.sh $VERSION first" >&2
exit 1
fi
# --- Clean staging ---
rm -rf "$STAGING"
mkdir -p "$STAGING/universalisos-$VERSION"
echo "==> Packaging UniversalisOS $VERSION"
# --- Copy artifacts ---
RELEASE_ROOT="$STAGING/universalisos-$VERSION"
# ELFs
for elf in "$RELEASE_DIR"/universalisos-*.elf; do
[[ -f "$elf" ]] && cp "$elf" "$RELEASE_ROOT/"
done
# mycelium
[[ -f "$RELEASE_DIR/mycelium" ]] && cp "$RELEASE_DIR/mycelium" "$RELEASE_ROOT/"
# tools
[[ -d "$RELEASE_DIR/tools" ]] && cp -r "$RELEASE_DIR/tools" "$RELEASE_ROOT/"
# Documentation
for doc in docs/*.md; do
[[ -f "$doc" ]] && cp "$doc" "$RELEASE_ROOT/"
done 2>/dev/null || true
[[ -f "$REPO_ROOT/README.md" ]] && cp "$REPO_ROOT/README.md" "$RELEASE_ROOT/"
# Metadata
[[ -f "$RELEASE_DIR/LICENSE" ]] && cp "$RELEASE_DIR/LICENSE" "$RELEASE_ROOT/"
[[ -f "$RELEASE_DIR/CHANGELOG.md" ]] && cp "$RELEASE_DIR/CHANGELOG.md" "$RELEASE_ROOT/"
[[ -f "$RELEASE_DIR/VERSION" ]] && cp "$RELEASE_DIR/VERSION" "$RELEASE_ROOT/"
# SHA256SUMS from build step
[[ -f "$RELEASE_DIR/SHA256SUMS" ]] && cp "$RELEASE_DIR/SHA256SUMS" "$RELEASE_ROOT/"
# --- Create tarball ---
echo "--- Creating tarball ---"
tar -czf "$TARBALL" -C "$STAGING" "universalisos-$VERSION"
# --- Cleanup staging ---
rm -rf "$STAGING"
echo ""
echo "==> Package complete: $TARBALL"
ls -lh "$TARBALL"
echo ""
echo "Contents:"
tar -tzf "$TARBALL" | head -30