Files
pi-kit/tools/release/make-release.sh
2025-12-10 19:48:08 -05:00

71 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Build a Pi-Kit release bundle (tar.gz) and a manifest.json with SHA256.
# Usage: ./tools/release/make-release.sh <version> [base_download_url]
# Example base URL: https://git.44r0n.cc/44r0n7/pi-kit/releases/download/v1.0.0
if [[ $# -lt 1 ]]; then
echo "Usage: $0 <version> [base_download_url]" >&2
exit 1
fi
VERSION="$1"
BASE_URL="${2:-https://example.com/releases}"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
OUT_DIR="$ROOT/out/releases"
STAGE="$OUT_DIR/stage-$VERSION"
BUNDLE_NAME="pikit-${VERSION}.tar.gz"
BUNDLE_PATH="$OUT_DIR/$BUNDLE_NAME"
MANIFEST_PATH="$OUT_DIR/manifest.json"
rm -rf "$STAGE"
mkdir -p "$STAGE" "$OUT_DIR"
echo "Staging files..."
# Copy managed files; adjust as needed
rsync -a --delete \
--exclude 'node_modules' \
--exclude '.git' \
--exclude 'test-results' \
--exclude 'playwright-report' \
--exclude '.cache' \
--exclude '.vite' \
"$ROOT/pikit-web/" "$STAGE/pikit-web/"
cp "$ROOT/pikit-api.py" "$STAGE/"
cp "$ROOT/pikit-services.json" "$STAGE/" 2>/dev/null || true
cp "$ROOT/set_ready.sh" "$STAGE/" 2>/dev/null || true
cp "$ROOT/start-codex.sh" "$STAGE/" 2>/dev/null || true
# Include version marker
if [[ -f "$ROOT/pikit-web/data/version.json" ]]; then
mkdir -p "$STAGE/pikit-web/data"
cp "$ROOT/pikit-web/data/version.json" "$STAGE/pikit-web/data/version.json"
else
mkdir -p "$STAGE/pikit-web/data"
echo "{\"version\": \"$VERSION\"}" > "$STAGE/pikit-web/data/version.json"
fi
echo "Packing bundle..."
tar -C "$STAGE" -czf "$BUNDLE_PATH" .
echo "Computing sha256..."
SHA256=$(sha256sum "$BUNDLE_PATH" | awk '{print $1}')
cat > "$MANIFEST_PATH" <<EOF
{
"version": "$VERSION",
"bundle": "$BASE_URL/$BUNDLE_NAME",
"changelog": "$BASE_URL/CHANGELOG-$VERSION.txt",
"files": [
{ "path": "bundle.tar.gz", "sha256": "$SHA256" }
]
}
EOF
echo "Done."
echo "Bundle : $BUNDLE_PATH"
echo "Manifest: $MANIFEST_PATH"
echo "Upload both to your release (bundle as $BUNDLE_NAME, manifest as manifest.json)."