feat: settle screenshots, paste non-Latin text, and gate destructive … #609
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Install | |
| on: | |
| push: | |
| # Every branch, not just main: this repo squash-merges locally and opens no | |
| # pull requests of its own, so a feature branch has no other way to reach | |
| # this lane before it lands. `branches-ignore` rather than deleting the key — | |
| # a push trigger that names `tags` and omits `branches` fires ONLY on tags, | |
| # which would disable branch CI outright. Dependabot is excluded because it | |
| # pushes its branch AND opens a PR, and the two land in different | |
| # concurrency groups, so the push run is a pure duplicate of the PR run. | |
| branches-ignore: ['dependabot/**'] | |
| tags: ['v*'] | |
| paths: | |
| - 'Sources/**' | |
| - 'Package.swift' | |
| - '.github/actions/setup-embacle/**' | |
| - '.github/workflows/install.yml' | |
| # Not a build input. Path filters ARE evaluated for tag pushes, against | |
| # the tagged commit's own diff, so `paths` now gates the v* release lane | |
| # that has fired on all 8 releases. release.yml tags its "chore: bump | |
| # version" commit, which always writes server.json — listing it pins the | |
| # release lane to a file the bump owns rather than leaving it to depend | |
| # on Version.swift continuing to live under Sources/. | |
| - 'server.json' | |
| pull_request: | |
| branches: [main] | |
| # Same list as `push` — the Actions parser has no YAML anchors. Without it, | |
| # dependabot bumps for /website and /runner burn a full macOS release build | |
| # on code this workflow never compiles. | |
| paths: | |
| - 'Sources/**' | |
| - 'Package.swift' | |
| - '.github/actions/setup-embacle/**' | |
| - '.github/workflows/install.yml' | |
| # Not a build input. Path filters ARE evaluated for tag pushes, against | |
| # the tagged commit's own diff, so `paths` now gates the v* release lane | |
| # that has fired on all 8 releases. release.yml tags its "chore: bump | |
| # version" commit, which always writes server.json — listing it pins the | |
| # release lane to a file the bump owns rather than leaving it to depend | |
| # on Version.swift continuing to live under Sources/. | |
| - 'server.json' | |
| workflow_dispatch: | |
| # Cancel superseded runs on the same branch / PR to save runner-minutes. | |
| concurrency: | |
| group: install-${{ github.head_ref || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| install-test: | |
| runs-on: macos-15 | |
| permissions: | |
| contents: read | |
| env: | |
| MCP_BIN: mirroir-mcp | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ./.github/actions/setup-embacle | |
| - name: Build release binaries | |
| run: swift build -c release | |
| - name: Verify binary exists and is executable | |
| run: | | |
| test -x .build/release/$MCP_BIN || { echo "FAIL: $MCP_BIN not found or not executable"; exit 1; } | |
| file .build/release/$MCP_BIN | |
| echo "Binary built successfully." | |
| # --- MCP binary from build path --- | |
| - name: Verify MCP binary responds to JSON-RPC initialize | |
| run: | | |
| echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' \ | |
| | .build/release/$MCP_BIN 2>/dev/null \ | |
| | python3 -c " | |
| import sys, json | |
| obj = json.loads(sys.stdin.readline()) | |
| assert obj['result']['serverInfo']['name'] == 'mirroir-mcp' | |
| print('MCP initialize from build path: OK') | |
| " |