8f10353f0c
CI / lint (push) Has been cancelled
CI / js-syntax (push) Successful in 10m24s
CI / deps-audit (push) Has been cancelled
CI / test (push) Failing after 24m55s
CI / sast-bandit (push) Failing after 11m13s
CI / trivy (push) Failing after 9m32s
Docker Publish / build-and-push (push) Failing after 34m3s
75 lines
2.5 KiB
Bash
Executable File
75 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ARCH="${ARCH:-arm64}"
|
|
REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
# Default the version to the current git tag so local builds match the tag with
|
|
# no VERSION passed; falls back to a dev label outside a tagged checkout. (#169)
|
|
VERSION="${VERSION:-$(git -C "$REPO_ROOT" describe --tags --always 2>/dev/null || echo 0.0.0-dev)}"
|
|
VERSION="${VERSION#v}"
|
|
BUILD_DIR="${REPO_ROOT}/.build"
|
|
|
|
if [[ "$(uname)" != "Darwin" ]]; then
|
|
echo "ERROR: make-app.sh must run on macOS" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$ARCH" != "arm64" && "$ARCH" != "x64" ]]; then
|
|
echo "ERROR: ARCH must be arm64 or x64, got '${ARCH}'" >&2
|
|
exit 1
|
|
fi
|
|
|
|
for cmd in node npm cargo; do
|
|
if ! command -v "$cmd" >/dev/null 2>&1; then
|
|
echo "ERROR: required command not found on PATH: $cmd" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
mkdir -p "$BUILD_DIR"
|
|
|
|
echo "==> Stamping version ${VERSION}"
|
|
sed -i '' "s/^version = \".*\"/version = \"${VERSION}\"/" "$REPO_ROOT/desktop/src-tauri/Cargo.toml"
|
|
sed -i '' "s/\"version\": \".*\"/\"version\": \"${VERSION}\"/" "$REPO_ROOT/desktop/src-tauri/tauri.conf.json"
|
|
sed -i '' "s/\"version\": \".*\"/\"version\": \"${VERSION}\"/" "$REPO_ROOT/desktop/package.json"
|
|
|
|
cd "$REPO_ROOT/desktop"
|
|
|
|
# Tauri CLI reads CI env var as a boolean flag; Woodpecker sets CI=woodpecker
|
|
# which fails the boolean parser. Force a valid value.
|
|
export CI=true
|
|
|
|
npm ci
|
|
if [[ "$ARCH" == "arm64" ]]; then
|
|
npx tauri build --bundles app --target aarch64-apple-darwin
|
|
TARGET_DIR="$REPO_ROOT/desktop/src-tauri/target/aarch64-apple-darwin/release"
|
|
else
|
|
npx tauri build --bundles app --target x86_64-apple-darwin
|
|
TARGET_DIR="$REPO_ROOT/desktop/src-tauri/target/x86_64-apple-darwin/release"
|
|
fi
|
|
|
|
APP_DIR="${TARGET_DIR}/bundle/macos/StemDeck.app"
|
|
if [[ ! -d "$APP_DIR" ]]; then
|
|
APP_DIR="$(find "$REPO_ROOT/desktop/src-tauri/target" -path '*/bundle/macos/StemDeck.app' -type d | head -1)"
|
|
fi
|
|
if [[ -z "$APP_DIR" || ! -d "$APP_DIR" ]]; then
|
|
echo "ERROR: could not find built StemDeck.app" >&2
|
|
exit 1
|
|
fi
|
|
|
|
RESOURCES="${APP_DIR}/Contents/Resources"
|
|
mkdir -p "$RESOURCES"
|
|
|
|
if [[ -f "$BUILD_DIR/runtime-manifest-${ARCH}.json" ]]; then
|
|
cp "$BUILD_DIR/runtime-manifest-${ARCH}.json" "$RESOURCES/runtime-manifest.json"
|
|
else
|
|
cp "$REPO_ROOT/desktop/ui/runtime-manifest.json" "$RESOURCES/runtime-manifest.json"
|
|
fi
|
|
|
|
if [[ -f "$REPO_ROOT/packaging/macos/THIRD_PARTY_NOTICES.txt" ]]; then
|
|
cp "$REPO_ROOT/packaging/macos/THIRD_PARTY_NOTICES.txt" "$RESOURCES/THIRD_PARTY_NOTICES.txt"
|
|
fi
|
|
|
|
echo "$APP_DIR" > "$BUILD_DIR/app-path-${ARCH}.txt"
|
|
echo "==> App ready: $APP_DIR"
|