name: Tests # builds.sr.ht is the canonical CI for this project, but it has no macOS images # and will not add them, so xcodebuild cannot run there. This job exists to run # the test plan on the GitHub mirror; see builds/swift-ci.yml for the rest. # Prose only: the root docs and Docs/. Both patterns are single-star, so they # match those two levels and nothing deeper — a .md that ever lands inside a # source directory still runs the suite. A skip rule that is too broad is how a # real change slips through ungated. # # Safe on pull_request only because main has no required status checks: a run # skipped by a path filter never reports, so a required check would leave a # docs-only PR waiting forever. on: push: branches: [main] paths-ignore: ['*.md', 'Docs/*.md'] pull_request: paths-ignore: ['*.md', 'Docs/*.md'] workflow_dispatch: # Without this, GITHUB_TOKEN inherits the repository default, which is # read-write for anything created before February 2023. The job only reads code. permissions: contents: read concurrency: group: tests-${{ github.ref }} cancel-in-progress: true jobs: test: name: xcodebuild test # macos-latest still points at macOS 15, which lacks the iOS 26 SDK. runs-on: macos-26 steps: - uses: actions/checkout@v7 - name: Show toolchain run: | xcodebuild -version swift --version - name: Select simulator id: sim run: | set -euo pipefail udid=$(xcrun simctl list devices available --json \ | jq -r '[.devices[][] | select(.name | startswith("iPhone"))] | first | .udid') if [ -z "$udid" ] || [ "$udid" = "null" ]; then echo "No available iPhone simulator on this image" >&2 xcrun simctl list devices available >&2 exit 1 fi echo "udid=$udid" >> "$GITHUB_OUTPUT" - name: Test run: | set -o pipefail xcodebuild test \ -project Hutch.xcodeproj \ -scheme Hutch \ -testPlan HutchTests \ -destination "id=${{ steps.sim.outputs.udid }}" \ -resultBundlePath TestResults.xcresult \ CODE_SIGNING_ALLOWED=NO - name: Upload results if: failure() uses: actions/upload-artifact@v4 with: name: test-results path: TestResults.xcresult retention-days: 7