name: Unit Tests on: workflow_dispatch: push: branches: [develop] pull_request: permissions: {} jobs: tests: name: Tests runs-on: xcode-27 timeout-minutes: 80 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@385a8ecc719e50b8c71af6ab01a624b486b7c3bc # v1.2.5 with: persist-credentials: false - name: Setup environment run: source ci_scripts/ci_common.sh && setup_github_actions_environment - name: Restore compilation cache uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ~/Library/Developer/Xcode/CompilationCache.noindex key: compilation-cache-unit-tests-${{ github.sha }} restore-keys: compilation-cache-unit-tests- - name: Run tests run: swift run -q tools ci unit-tests - name: Save compilation cache # Only develop populates the cache, all of the other runs simply read from it. if: ${{ !cancelled() && github.event_name == 'push' && github.ref == 'refs/heads/develop' }} uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ~/Library/Developer/Xcode/CompilationCache.noindex key: compilation-cache-unit-tests-${{ github.sha }} - name: Archive artifacts uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 # We only care about artefacts if the tests fail if: failure() with: name: Results path: test_output/UnitTests.zip retention-days: 1 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@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 with: report_type: coverage files: test_output/unit-cobertura.xml,test_output/preview-cobertura.xml disable_search: true fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} flags: unittests - 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@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 continue-on-error: true with: report_type: test_results files: test_output/unit-junit.xml,test_output/preview-junit.xml disable_search: true fail_ci_if_error: false token: ${{ secrets.CODECOV_TOKEN }} flags: unittests