#!/usr/bin/env bash # Build a Furtka release tarball + sha256 sidecar + release.json metadata. # # Usage: ./scripts/build-release-tarball.sh # # Produces (in ./dist/): # furtka-.tar.gz contents extract to /opt/furtka/versions// # furtka-.tar.gz.sha256 single-line sha256 ( ) # release.json {"version","sha256","size","created_at"} # # The tarball shape matches what iso/build.sh ships in the live ISO: a # VERSION file at the root, plus furtka/ and apps/ trees. Self-update on a # running box downloads this tarball, verifies the sha256, stages to # /opt/furtka/versions//, and flips /opt/furtka/current to it. set -euo pipefail VERSION="${1:?usage: $0 }" REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" DIST_DIR="$REPO_ROOT/dist" STAGE="$(mktemp -d)" trap 'rm -rf "$STAGE"' EXIT cp -a "$REPO_ROOT/furtka" "$STAGE/" cp -a "$REPO_ROOT/apps" "$STAGE/" find "$STAGE" -type d -name __pycache__ -exec rm -rf {} + echo "$VERSION" > "$STAGE/VERSION" mkdir -p "$DIST_DIR" TARBALL="$DIST_DIR/furtka-$VERSION.tar.gz" tar -czf "$TARBALL" -C "$STAGE" . SHA=$(sha256sum "$TARBALL" | awk '{print $1}') SIZE=$(stat -c%s "$TARBALL") printf '%s %s\n' "$SHA" "$(basename "$TARBALL")" > "$TARBALL.sha256" cat > "$DIST_DIR/release.json" <