name: Build on: pull_request: branches: [main] push: branches: [main] workflow_dispatch: jobs: macos: runs-on: macos-15 steps: - uses: actions/checkout@v4 - name: Build Meetingnotes run: >- xcodebuild -project Meetingnotes.xcodeproj -scheme meetingnotes -configuration Release -destination 'generic/platform=macOS' -derivedDataPath "$RUNNER_TEMP/DerivedData" ARCHS="arm64 x86_64" ONLY_ACTIVE_ARCH=NO CODE_SIGNING_ALLOWED=NO build - name: Sign test build run: | app_path="$RUNNER_TEMP/DerivedData/Build/Products/Release/Meetingnotes.app" codesign --force --deep --sign - \ --entitlements meetingnotes/meetingnotes.entitlements \ "$app_path" codesign --verify --deep --strict "$app_path" codesign -d --entitlements :- "$app_path" 2>&1 \ | grep -q 'com.apple.security.network.server' - name: Smoke test local API run: | defaults write net.jamesbone.meetingnotes muteDeckAPIEnabled -bool true defaults write net.jamesbone.meetingnotes muteDeckAPIPort -int 19880 "$RUNNER_TEMP/DerivedData/Build/Products/Release/Meetingnotes.app/Contents/MacOS/Meetingnotes" >"$RUNNER_TEMP/meetingnotes.log" 2>&1 & app_pid=$! trap 'kill "$app_pid" 2>/dev/null || true' EXIT for _ in {1..20}; do if curl -fsS http://127.0.0.1:19880/api/info >"$RUNNER_TEMP/api-info.json"; then break fi sleep 1 done grep -q '"name":"MeetingDebrief"' "$RUNNER_TEMP/api-info.json" test "$(curl -sS -o /dev/null -w '%{http_code}' http://127.0.0.1:19880/api/recording/status)" = "401" - name: Package test build run: | app_path="$RUNNER_TEMP/DerivedData/Build/Products/Release/Meetingnotes.app" ditto -c -k --sequesterRsrc --keepParent \ "$app_path" "$RUNNER_TEMP/Meetingnotes-macOS.zip" - name: Upload test build uses: actions/upload-artifact@v4 with: name: Meetingnotes-macOS-${{ github.sha }} path: ${{ runner.temp }}/Meetingnotes-macOS.zip retention-days: 30