CI and GitHub
Runs in CI, suites as checks on commits, and comments on pull requests.
TestedOK runs wherever a simulator or emulator runs: a Mac in GitHub Actions, Xcode Cloud, a Mac mini under a desk. The result comes back as a check on the commit and a comment on the pull request.
Running in CI
jobs:
flows:
runs-on: macos-15
steps:
- uses: actions/checkout@v4
- run: xcodebuild -scheme Rote -destination 'platform=iOS Simulator,name=iPhone 17 Pro' -derivedDataPath build build
- run: curl -fsSL https://testedok.dev/install | sh
- run: xcrun simctl boot "iPhone 17 Pro" && xcrun simctl install booted build/Build/Products/Debug-iphonesimulator/Rote.app
- run: testedok run --suite smoke --env ci --junit report.xml
env:
TESTEDOK_API_URL: https://api.testedok.dev
TESTEDOK_TOKEN: ${{ secrets.TESTEDOK_TOKEN }}
TESTEDOK_SECRET_STAGING_PASSWORD: ${{ secrets.STAGING_PASSWORD }}TESTEDOK_TOKEN is an API token from Plan and tokens in the dashboard. Secrets arrive as TESTEDOK_SECRET_<NAME>. The job fails when a flow does, and --junit gives the runner something to show. An environment in testedok.yaml whose app is the built .app path installs it itself.
Where a run came from
The CLI records the commit, repository, branch and pull request with each run: from GITHUB_SHA, GITHUB_REPOSITORY and GITHUB_REF in GitHub Actions, from the checkout elsewhere, or from TESTEDOK_COMMIT, TESTEDOK_REPO, TESTEDOK_BRANCH and TESTEDOK_PR for pipelines that know better. The run page shows them.
The GitHub App
Connect it once per project (Settings → GitHub → Connect GitHub), choosing the repositories. From then on, every run that knows its commit posts a check run on that commit: one check named after the suite, listing every flow that ran on the commit with its result, time and a link to the run, red if any failed. On a pull request the same summary is kept as one comment, edited as runs finish, never one per run.
Checks are what branch protection reads. Make the smoke suite required and a broken flow stops the merge; leave a nightly suite unrequired and it only reports.
Other pipelines
Xcode Cloud, Expo EAS and Fastlane can all run the same two lines: install the CLI, run a suite with --junit. A Fastlane action and copyable Xcode Cloud and EAS scripts are coming; until then, ci_post_xcodebuild.sh with the commands above is enough.