Skip to main content
Glama
macos-ci.yml11.7 kB
name: macOS CI on: push: branches: [ main ] pull_request: branches: [ main ] concurrency: group: macos-ci-${{ github.ref }} cancel-in-progress: true jobs: peekaboo-core: name: PeekabooCore build & tests runs-on: macos-latest env: PEEKABOO_INCLUDE_AUTOMATION_TESTS: "false" RUN_AUTOMATION_TESTS: "false" RUN_LOCAL_TESTS: "false" steps: - uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 1 - name: Install Bun runtime uses: oven-sh/setup-bun@v1 with: bun-version: "latest" - name: Docs lint run: ./runner node scripts/docs-lint.mjs - name: Select Xcode 26.1 (if present) or fallback to default run: | set -euo pipefail for candidate in /Applications/Xcode_26.1.app /Applications/Xcode_26.0.app /Applications/Xcode_16.4.app /Applications/Xcode_16.3.app /Applications/Xcode.app; do if [[ -d "$candidate" ]]; then sudo xcode-select -s "$candidate" echo "DEVELOPER_DIR=${candidate}/Contents/Developer" >> "$GITHUB_ENV" break fi done /usr/bin/xcodebuild -version - name: Prepare Swift Argument Parser fork run: | sudo mkdir -p /Users/steipete/Projects sudo chown $USER /Users/steipete sudo mkdir -p /Users/steipete/Projects sudo chown $USER /Users/steipete/Projects if [ -d /Users/steipete/Projects/swift-argument-parser ]; then cd /Users/steipete/Projects/swift-argument-parser git fetch origin approachable-concurrency git checkout approachable-concurrency git pull --ff-only origin approachable-concurrency else git clone --branch approachable-concurrency --depth 1 https://github.com/steipete/swift-argument-parser.git /Users/steipete/Projects/swift-argument-parser fi - name: Compute SwiftPM cache key (PeekabooCore) id: cache-key-core env: CACHE_PREFIX: ${{ runner.os }}-spm-core- run: | set -euo pipefail if [ -f Core/PeekabooCore/Package.resolved ]; then HASH=$(shasum Core/PeekabooCore/Package.resolved | awk '{print $1}') else echo "Package.resolved missing, falling back to commit SHA" HASH=${GITHUB_SHA} fi echo "key=${CACHE_PREFIX}${HASH}" >> "$GITHUB_OUTPUT" - name: Cache SwiftPM (PeekabooCore) uses: actions/cache@v4 with: path: | ~/.swiftpm ~/.cache/org.swift.swiftpm Core/PeekabooCore/.build key: ${{ steps.cache-key-core.outputs.key }} restore-keys: | ${{ runner.os }}-spm-core- - name: Show Xcode version run: xcodebuild -version - name: Show Swift toolchain version run: swift --version - name: Build PeekabooCore working-directory: Core/PeekabooCore run: | swift build --configuration debug - name: Run focused Swift tests working-directory: Core/PeekabooCore run: | swift test --no-parallel --filter ScreenCaptureServiceFlowTests peekaboo-cli: name: Peekaboo CLI build & tests runs-on: macos-latest needs: peekaboo-core env: PEEKABOO_INCLUDE_AUTOMATION_TESTS: "false" PEEKABOO_SKIP_AUTOMATION: "1" steps: - uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 1 - name: Select Xcode 26.1 (if present) or fallback to default run: | set -euo pipefail for candidate in /Applications/Xcode_26.1.app /Applications/Xcode_26.0.app /Applications/Xcode_16.4.app /Applications/Xcode_16.3.app /Applications/Xcode.app; do if [[ -d "$candidate" ]]; then sudo xcode-select -s "$candidate" echo "DEVELOPER_DIR=${candidate}/Contents/Developer" >> "$GITHUB_ENV" break fi done /usr/bin/xcodebuild -version - name: Prepare Swift Argument Parser fork run: | sudo mkdir -p /Users/steipete/Projects sudo chown $USER /Users/steipete sudo mkdir -p /Users/steipete/Projects sudo chown $USER /Users/steipete/Projects if [ -d /Users/steipete/Projects/swift-argument-parser ]; then cd /Users/steipete/Projects/swift-argument-parser git fetch origin approachable-concurrency git checkout approachable-concurrency git pull --ff-only origin approachable-concurrency else git clone --branch approachable-concurrency --depth 1 https://github.com/steipete/swift-argument-parser.git /Users/steipete/Projects/swift-argument-parser fi - name: Compute SwiftPM cache key (CLI) id: cache-key-cli env: CACHE_PREFIX: ${{ runner.os }}-spm-cli- run: | set -euo pipefail if [ -f Apps/CLI/Package.resolved ]; then HASH=$(shasum Apps/CLI/Package.resolved | awk '{print $1}') else echo "Package.resolved missing, falling back to commit SHA" HASH=${GITHUB_SHA} fi echo "key=${CACHE_PREFIX}${HASH}" >> "$GITHUB_OUTPUT" - name: Cache SwiftPM (CLI) uses: actions/cache@v4 with: path: | ~/.swiftpm ~/.cache/org.swift.swiftpm Apps/CLI/.build key: ${{ steps.cache-key-cli.outputs.key }} restore-keys: | ${{ runner.os }}-spm-cli- - name: Show Swift toolchain version run: swift --version - name: Show Xcode version run: xcodebuild -version - name: Build CLI target working-directory: Apps/CLI run: | swift build --configuration debug - name: Run CLI unit tests (skip automation) working-directory: Apps/CLI run: | swift test --no-parallel -Xswiftc -DPEEKABOO_SKIP_AUTOMATION tachikoma: name: Tachikoma build & tests runs-on: macos-latest needs: peekaboo-cli env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} steps: - uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 1 - name: Select Xcode 26.1 (if present) or fallback to default run: | set -euo pipefail for candidate in /Applications/Xcode_26.1.app /Applications/Xcode_26.0.app /Applications/Xcode_16.4.app /Applications/Xcode_16.3.app /Applications/Xcode.app; do if [[ -d "$candidate" ]]; then sudo xcode-select -s "$candidate" echo "DEVELOPER_DIR=${candidate}/Contents/Developer" >> "$GITHUB_ENV" break fi done /usr/bin/xcodebuild -version - name: Remove phantom submodule metadata run: | rm -f .gitmodules git config --local --remove-section submodule.Tachikoma || true - name: Prepare Swift Argument Parser fork run: | sudo mkdir -p /Users/steipete/Projects sudo chown $USER /Users/steipete sudo mkdir -p /Users/steipete/Projects sudo chown $USER /Users/steipete/Projects if [ -d /Users/steipete/Projects/swift-argument-parser ]; then cd /Users/steipete/Projects/swift-argument-parser git fetch origin approachable-concurrency git checkout approachable-concurrency git pull --ff-only origin approachable-concurrency else git clone --branch approachable-concurrency --depth 1 https://github.com/steipete/swift-argument-parser.git /Users/steipete/Projects/swift-argument-parser fi - name: Compute SwiftPM cache key (Tachikoma) id: cache-key-tachikoma env: CACHE_PREFIX: ${{ runner.os }}-spm-tachikoma- run: | set -euo pipefail if [ -f Tachikoma/Package.resolved ]; then HASH=$(shasum Tachikoma/Package.resolved | awk '{print $1}') else echo "Package.resolved missing, falling back to commit SHA" HASH=${GITHUB_SHA} fi echo "key=${CACHE_PREFIX}${HASH}" >> "$GITHUB_OUTPUT" - name: Cache SwiftPM (Tachikoma) uses: actions/cache@v4 with: path: | ~/.swiftpm ~/.cache/org.swift.swiftpm Tachikoma/.build key: ${{ steps.cache-key-tachikoma.outputs.key }} restore-keys: | ${{ runner.os }}-spm-tachikoma- - name: Show Swift toolchain version run: swift --version - name: Show Xcode version run: xcodebuild -version - name: Build Tachikoma working-directory: Tachikoma run: | swift build --configuration debug - name: Run Tachikoma unit tests working-directory: Tachikoma run: | swift test --no-parallel --filter unit mac-apps: name: Build macOS apps (Peekaboo + Inspector) runs-on: macos-latest needs: [peekaboo-cli, tachikoma] continue-on-error: true steps: - uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 1 - name: Select Xcode 26.1 (if present) or fallback to default run: | set -euo pipefail for candidate in /Applications/Xcode_26.1.app /Applications/Xcode_26.0.app /Applications/Xcode_16.4.app /Applications/Xcode_16.3.app /Applications/Xcode.app; do if [[ -d "$candidate" ]]; then sudo xcode-select -s "$candidate" echo "DEVELOPER_DIR=${candidate}/Contents/Developer" >> "$GITHUB_ENV" break fi done /usr/bin/xcodebuild -version - name: Build Peekaboo app (Xcode) working-directory: Apps run: | /usr/bin/env \ -u DYLD_LIBRARY_PATH \ -u DYLD_FRAMEWORK_PATH \ -u DYLD_FALLBACK_FRAMEWORK_PATH \ -u DYLD_ROOT_PATH \ -u DYLD_INSERT_LIBRARIES \ -u DYLD_IMAGE_SUFFIX \ -u DYLD_VERSIONED_LIBRARY_PATH \ -u DYLD_VERSIONED_FRAMEWORK_PATH \ xcodebuild -workspace Peekaboo.xcworkspace \ -scheme Peekaboo \ -configuration Debug \ -sdk macosx \ CODE_SIGNING_ALLOWED=NO \ -derivedDataPath /tmp/DerivedData-Peekaboo - name: Build Inspector app (Xcode) working-directory: Apps/PeekabooInspector run: | /usr/bin/env \ -u DYLD_LIBRARY_PATH \ -u DYLD_FRAMEWORK_PATH \ -u DYLD_FALLBACK_FRAMEWORK_PATH \ -u DYLD_ROOT_PATH \ -u DYLD_INSERT_LIBRARIES \ -u DYLD_IMAGE_SUFFIX \ -u DYLD_VERSIONED_LIBRARY_PATH \ -u DYLD_VERSIONED_FRAMEWORK_PATH \ xcodebuild -project Inspector.xcodeproj \ -scheme Inspector \ -configuration Debug \ -sdk macosx \ CODE_SIGNING_ALLOWED=NO \ -derivedDataPath /tmp/DerivedData-Inspector lint: name: SwiftLint (core + CLI) runs-on: macos-latest needs: [peekaboo-cli, tachikoma, mac-apps] steps: - uses: actions/checkout@v4 - name: Install SwiftLint run: brew install swiftlint - name: Run SwiftLint with CI config run: swiftlint --config .swiftlint-ci.yml

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/steipete/Peekaboo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server