118 lines
5.3 KiB
Bash
Executable File
118 lines
5.3 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
# Build, package, and deploy Skald Circle for macOS (ARM64).
|
|
#
|
|
# Usage: ./ci/package-macos.sh
|
|
#
|
|
# Behaviour depends on the current git branch:
|
|
# release → builds a release tarball, checks version uniqueness, uploads + updates LATEST
|
|
# main → builds a nightly tarball, uploads to nightly/ (no version check)
|
|
# other → aborts with an error
|
|
#
|
|
# Prerequisites:
|
|
# - macOS ARM64 (Apple Silicon)
|
|
# - SSH alias "skaldserver" configured in ~/.ssh/config pointing to the builds host
|
|
# - ssh + scp working to skaldserver (key-based auth)
|
|
# - ci/package.sh, ci/verify-version.sh in the repo
|
|
|
|
set -eu
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
# ── Config ──────────────────────────────────────────────────────────────────
|
|
REMOTE_HOST="skaldserver"
|
|
REMOTE_BASE="/var/www/builds.skaldagent.net"
|
|
BUILDS_URL="https://builds.skaldagent.net"
|
|
|
|
# ── Detect branch ────────────────────────────────────────────────────────────
|
|
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
|
echo "[package-macos] Branch: ${BRANCH}"
|
|
|
|
case "$BRANCH" in
|
|
release)
|
|
MODE="release"
|
|
;;
|
|
main)
|
|
MODE="nightly"
|
|
;;
|
|
*)
|
|
echo "[package-macos] ❌ Aborting: must be on 'release' or 'main' branch (current: ${BRANCH})"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# ── Version ──────────────────────────────────────────────────────────────────
|
|
if [ "$MODE" = "release" ]; then
|
|
VERSION="v$(grep '^version ' Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/')"
|
|
echo "[package-macos] Release version: ${VERSION}"
|
|
else
|
|
VERSION="nightly"
|
|
echo "[package-macos] Nightly build"
|
|
fi
|
|
|
|
# ── Verify version is new (release only) ────────────────────────────────────
|
|
if [ "$MODE" = "release" ]; then
|
|
echo "[package-macos] Checking if release ${VERSION} already exists on remote..."
|
|
REMOTE_DIR_URL="${BUILDS_URL}/releases/${VERSION}/"
|
|
if curl -I --fail --silent --output /dev/null "$REMOTE_DIR_URL" 2>/dev/null; then
|
|
echo "[package-macos] ❌ Release ${VERSION} already exists at ${REMOTE_DIR_URL}"
|
|
echo "[package-macos] Bump the version in Cargo.toml before releasing."
|
|
exit 1
|
|
fi
|
|
echo "[package-macos] ✅ Release ${VERSION} is new — proceeding."
|
|
fi
|
|
|
|
# ── Build ────────────────────────────────────────────────────────────────────
|
|
echo "[package-macos] Building (this will take a while)..."
|
|
cargo build --release
|
|
cargo build --release -p skald-setup
|
|
echo "[package-macos] ✅ Build complete."
|
|
|
|
# ── Package ──────────────────────────────────────────────────────────────────
|
|
echo "[package-macos] Packaging..."
|
|
mkdir -p dist
|
|
if [ "$MODE" = "release" ]; then
|
|
./ci/package.sh \
|
|
--version "$VERSION" \
|
|
--os darwin \
|
|
--arch arm64 \
|
|
--target-dir target/release \
|
|
--output dist/
|
|
else
|
|
./ci/package.sh \
|
|
--version nightly \
|
|
--os darwin \
|
|
--arch arm64 \
|
|
--target-dir target/release \
|
|
--output dist/
|
|
fi
|
|
|
|
# ── Upload via SCP ───────────────────────────────────────────────────────────
|
|
echo "[package-macos] Uploading to ${REMOTE_HOST}..."
|
|
|
|
if [ "$MODE" = "release" ]; then
|
|
# Create remote directory and copy tarball
|
|
ssh "$REMOTE_HOST" "mkdir -p ${REMOTE_BASE}/releases/${VERSION}"
|
|
scp dist/skald-circle-${VERSION}-darwin-arm64.tar.gz \
|
|
"${REMOTE_HOST}:${REMOTE_BASE}/releases/${VERSION}/"
|
|
|
|
# Update LATEST pointer
|
|
echo "$VERSION" | ssh "$REMOTE_HOST" "cat > ${REMOTE_BASE}/releases/LATEST"
|
|
echo "[package-macos] ✅ Release ${VERSION} deployed + LATEST updated."
|
|
else
|
|
# Nightly — copy into nightly/ directory
|
|
ssh "$REMOTE_HOST" "mkdir -p ${REMOTE_BASE}/nightly"
|
|
scp dist/skald-circle-nightly-darwin-arm64.tar.gz \
|
|
"${REMOTE_HOST}:${REMOTE_BASE}/nightly/"
|
|
echo "[package-macos] ✅ Nightly deployed."
|
|
fi
|
|
|
|
# ── Summary ──────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
echo "[package-macos] ─────────────────────────────────────────────"
|
|
echo "[package-macos] Mode: ${MODE}"
|
|
echo "[package-macos] Version: ${VERSION}"
|
|
echo "[package-macos] Branch: ${BRANCH}"
|
|
echo "[package-macos] Remote: ${REMOTE_HOST}"
|
|
echo "[package-macos] ─────────────────────────────────────────────"
|
|
echo "[package-macos] ✅ Done."
|