name: Unit Tests on: workflow_dispatch: push: branches: [ develop ] pull_request: jobs: tests: name: Tests runs-on: macos-15 concurrency: # Only allow a single run of this workflow on each branch, automatically cancelling older runs. group: ${{ format('unit-tests-{0}', github.ref) }} cancel-in-progress: true steps: - uses: nschloe/action-cached-lfs-checkout@f46300cd8952454b9f0a21a3d133d4bd5684cfc2 #v1.2.3 - 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: SwiftFormat run: swiftformat --lint . - name: Run tests run: bundle exec fastlane unit_tests - name: Zip results # for faster upload if: failure() working-directory: fastlane/test_output run: zip -r UnitTests.zip UnitTests.xcresult PreviewTests.xcresult - name: Archive artifacts uses: actions/upload-artifact@v4 # We only care about artefacts if the tests fail if: failure() with: name: Results path: fastlane/test_output/UnitTests.zip retention-days: 1 if-no-files-found: ignore - name: Collect coverage run: | xcresultparser -q -o cobertura -t ElementX -p $(pwd) fastlane/test_output/UnitTests.xcresult > fastlane/test_output/unit-cobertura.xml xcresultparser -q -o cobertura -t ElementX -p $(pwd) fastlane/test_output/PreviewTests.xcresult > fastlane/test_output/preview-cobertura.xml - name: Upload coverage to Codecov if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }} # Skip in forks uses: codecov/codecov-action@ab904c41d6ece82784817410c45d8b8c02684457 # v3.1.6 with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} flags: unittests - name: Collect test results if: ${{ !cancelled() }} run: | xcresultparser -q -o junit -p $(pwd) fastlane/test_output/UnitTests.xcresult > fastlane/test_output/unit-junit.xml xcresultparser -q -o junit -p $(pwd) fastlane/test_output/PreviewTests.xcresult > fastlane/test_output/preview-junit.xml - name: Upload test results to Codecov if: ${{ !cancelled() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1 continue-on-error: true with: fail_ci_if_error: false token: ${{ secrets.CODECOV_TOKEN }} flags: unittests