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 0,12 * * 1-5' jobs: tests: name: Tests runs-on: perf-only concurrency: # Only allow a single run of this workflow on each branch, automatically cancelling older runs. group: ${{ format('ui-tests-{0}', github.ref) }} cancel-in-progress: true steps: - uses: nschloe/action-cached-lfs-checkout@v1 - uses: actions/cache@v4 with: path: vendor/bundle key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }} restore-keys: | ${{ runner.os }}-gems- - name: Setup environment run: source ci_scripts/ci_common.sh && setup_github_actions_environment - name: Run tests run: | if [[ -z "${{ github.event.inputs.test_name }}" ]]; then bundle exec fastlane ui_tests else bundle exec fastlane ui_tests test_name:${{ github.event.inputs.test_name }} fi - name: Zip results # for faster upload if: failure() working-directory: fastlane/test_output run: zip -r UITests.xcresult.zip UITests.xcresult - name: Archive artifacts uses: actions/upload-artifact@v4 if: failure() with: name: Results path: fastlane/test_output/UITests.xcresult.zip retention-days: 7 if-no-files-found: ignore - name: Collect coverage run: xcresultparser -q -o cobertura -t ElementX -p $(pwd) fastlane/test_output/UITests.xcresult > fastlane/test_output/ui-cobertura.xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} flags: uitests