name: UI Tests on: workflow_dispatch: inputs: test_name: description: 'If a test name is provided, only that test will be run. Otherwise, all tests will be run. Use the format "ClassName/testName" to run a single test.' required: false schedule: - cron: "0 2 * * 1-5" permissions: {} jobs: tests: name: Tests runs-on: macos-26 timeout-minutes: 90 strategy: fail-fast: false matrix: device: [iPhone, iPad] concurrency: # Only allow a single run of this workflow on each branch, automatically cancelling older runs. group: ${{ format('ui-tests-{0}-{1}', github.ref, matrix.device) }} cancel-in-progress: true steps: - uses: nschloe/action-cached-lfs-checkout@385a8ecc719e50b8c71af6ab01a624b486b7c3bc # v1.2.5 with: persist-credentials: false - name: Setup environment run: source ci_scripts/ci_common.sh && setup_github_actions_environment - name: Run tests run: | args=(--device-type "${{ matrix.device }}") if [[ -n "${GITHUB_EVENT_INPUTS_TEST_NAME}" ]]; then args+=( --test-name "${GITHUB_EVENT_INPUTS_TEST_NAME}") fi swift run -q tools ci ui-tests "${args[@]}" env: GITHUB_EVENT_INPUTS_TEST_NAME: ${{ github.event.inputs.test_name }} - name: Archive artifacts uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 # We only care about artefacts if the tests fail if: failure() with: name: ${{ matrix.device }} path: test_output/UITests.xcresult.zip retention-days: 7 if-no-files-found: ignore - name: Upload coverage to Codecov # Skip if not successful and in forks if: ${{ success() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 with: report_type: coverage files: test_output/ui-cobertura.xml disable_search: true fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} flags: uitests - name: Upload test results to Codecov # Skip if cancelled and in forks if: ${{ !cancelled() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 continue-on-error: true with: report_type: test_results files: test_output/ui-junit.xml disable_search: true fail_ci_if_error: false token: ${{ secrets.CODECOV_TOKEN }} flags: uitests