#!/usr/bin/env bash # Build, bundle, and publish CxAI ADE (CxWebAppMac) into ../share/cxai-mac/. # # Produces: # share/cxai-mac/CxAI ADE.app # share/cxai-mac/CxAI-ADE--aarch64.app.tar.gz # share/cxai-mac/CxAI-ADE--aarch64.dmg # share/cxai-mac/build-info.json set -euo pipefail cd "$(dirname "$0")/.." SWIFT_APP_ROOT="$PWD" REPO_ROOT="$(cd ../.. && pwd)" SHARE_DIR="$REPO_ROOT/CxWebApp/share/cxai-mac" VERSION="${VERSION:-1.2.0}" ARCH="${ARCH:-aarch64}" PRODUCT_NAME="CxAI ADE" BUNDLE_ID="${BUNDLE_ID:-studio.cxai.ade}" CHANNEL="${CHANNEL:-stable}" STAGE="$SWIFT_APP_ROOT/build/stage" APP_PATH="$STAGE/${PRODUCT_NAME}.app" TGZ_NAME="CxAI-ADE-${VERSION}-${ARCH}.app.tar.gz" DMG_NAME="CxAI-ADE-${VERSION}-${ARCH}.dmg" echo "[1/6] swift build -c release" swift build -c release BIN="$(swift build -c release --show-bin-path)/CxWebAppMac" [[ -x "$BIN" ]] || { echo "FATAL: $BIN not found" >&2; exit 1; } echo "[2/6] assemble bundle $APP_PATH" rm -rf "$STAGE" mkdir -p "$APP_PATH/Contents/MacOS" "$APP_PATH/Contents/Resources" cp "$BIN" "$APP_PATH/Contents/MacOS/CxWebAppMac" cat > "$APP_PATH/Contents/Info.plist" < CFBundleIdentifier ${BUNDLE_ID} CFBundleName ${PRODUCT_NAME} CFBundleDisplayName ${PRODUCT_NAME} CFBundleExecutable CxWebAppMac CFBundlePackageType APPL CFBundleShortVersionString ${VERSION} CFBundleVersion ${VERSION} LSMinimumSystemVersion 13.0 NSHighResolutionCapable NSAppTransportSecurity NSAllowsLocalNetworking LSApplicationCategoryType public.app-category.developer-tools PLIST echo "[3/6] codesign (ad-hoc)" codesign --force --deep --sign - "$APP_PATH" >/dev/null 2>&1 || true echo "[4/6] tar.gz" ( cd "$STAGE" && tar -czf "$TGZ_NAME" "${PRODUCT_NAME}.app" ) echo "[5/6] dmg" DMG_TMP="$STAGE/$DMG_NAME" rm -f "$DMG_TMP" hdiutil create -volname "${PRODUCT_NAME} ${VERSION}" \ -srcfolder "$APP_PATH" -ov -format UDZO -quiet \ "$DMG_TMP" echo "[6/6] publish -> $SHARE_DIR" mkdir -p "$SHARE_DIR" # Wipe any prior CxAI-ADE-* / CxAI ADE*.app set; keep folder, replace contents. find "$SHARE_DIR" -maxdepth 1 \( -name "CxAI-ADE-*" -o -name "CxAI ADE*.app" -o -name "build-info.json" \) -exec rm -rf {} + # Re-stage fresh artifacts. ditto "$APP_PATH" "$SHARE_DIR/${PRODUCT_NAME}.app" cp "$STAGE/$TGZ_NAME" "$SHARE_DIR/$TGZ_NAME" cp "$DMG_TMP" "$SHARE_DIR/$DMG_NAME" # Compute hashes & sizes. sha_tgz=$(shasum -a 256 "$SHARE_DIR/$TGZ_NAME" | awk '{print $1}') sha_dmg=$(shasum -a 256 "$SHARE_DIR/$DMG_NAME" | awk '{print $1}') size_dmg=$(stat -f%z "$SHARE_DIR/$DMG_NAME") size_tgz=$(stat -f%z "$SHARE_DIR/$TGZ_NAME") built_at=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # Best-effort git sha (outer iCloud repo). git_sha=$( ( cd "$REPO_ROOT" && git rev-parse --short=12 HEAD 2>/dev/null ) || echo "unknown" ) cat > "$SHARE_DIR/build-info.json" <