| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- name: Build & Run Unit Tests
- on:
- push:
- branches: [ v2_release, v2_develop ]
- paths-ignore:
- - '**.md'
- pull_request:
- branches: [ v2_release, v2_develop ]
- paths-ignore:
- - '**.md'
-
- jobs:
- # Call the quick-build workflow to build Debug configuration only
- build:
- uses: ./.github/workflows/quick-build.yml
- non_parallel_unittests:
- name: Non-Parallel Unit Tests
- runs-on: ${{ matrix.os }}
- needs: build
- strategy:
- # Turn off fail-fast to let all runners run even if there are errors
- fail-fast: false
- matrix:
- os: [ ubuntu-latest, windows-latest, macos-latest ]
- timeout-minutes: 15 # Increased from 10 for Windows
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: 8.x
- dotnet-quality: 'ga'
- - name: Download build artifacts
- uses: actions/download-artifact@v4
- with:
- name: test-build-artifacts
- path: .
- # KEEP THIS - It's needed for --no-build to work
- - name: Restore NuGet packages
- run: dotnet restore
- # Optimize Windows performance
- - name: Disable Windows Defender (Windows only)
- if: runner.os == 'Windows'
- shell: powershell
- run: |
- Add-MpPreference -ExclusionPath "${{ github.workspace }}"
- Add-MpPreference -ExclusionProcess "dotnet.exe"
- Add-MpPreference -ExclusionProcess "testhost.exe"
- Add-MpPreference -ExclusionProcess "VSTest.Console.exe"
- - name: Set VSTEST_DUMP_PATH
- shell: bash
- run: echo "VSTEST_DUMP_PATH=logs/UnitTests/${{ runner.os }}/" >> $GITHUB_ENV
- - name: Run UnitTests
- shell: bash
- run: |
- if [ "${{ runner.os }}" == "Linux" ]; then
- # Run with coverage on Linux only
- dotnet test Tests/UnitTests \
- --no-build \
- --verbosity normal \
- --collect:"XPlat Code Coverage" \
- --settings Tests/UnitTests/runsettings.xml \
- --diag:logs/UnitTests/${{ runner.os }}/logs.txt \
- --blame \
- --blame-crash \
- --blame-hang \
- --blame-hang-timeout 60s \
- --blame-crash-collect-always
- else
- # Run without coverage on Windows/macOS for speed
- dotnet test Tests/UnitTests \
- --no-build \
- --verbosity normal \
- --settings Tests/UnitTests/runsettings.xml \
- --diag:logs/UnitTests/${{ runner.os }}/logs.txt \
- --blame \
- --blame-crash \
- --blame-hang \
- --blame-hang-timeout 120s \
- --blame-crash-collect-always
- fi
- - name: Upload Test Logs
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: non_parallel_unittests-logs-${{ runner.os }}
- path: |
- logs/UnitTests
- TestResults/
-
- - name: Upload Non-Parallel UnitTests Coverage to Codecov
- if: matrix.os == 'ubuntu-latest' && always()
- uses: codecov/codecov-action@v4
- with:
- files: TestResults/**/coverage.cobertura.xml
- flags: unittests-nonparallel
- name: UnitTests-${{ runner.os }}
- token: ${{ secrets.CODECOV_TOKEN }}
- fail_ci_if_error: false
- parallel_unittests:
- name: Parallel Unit Tests
- runs-on: ${{ matrix.os }}
- needs: build
- strategy:
- # Turn off fail-fast to let all runners run even if there are errors
- fail-fast: false
- matrix:
- os: [ ubuntu-latest, windows-latest, macos-latest ]
- timeout-minutes: 15
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: 8.x
- dotnet-quality: 'ga'
- - name: Download build artifacts
- uses: actions/download-artifact@v4
- with:
- name: test-build-artifacts
- path: .
- - name: Restore NuGet packages
- run: dotnet restore
- - name: Disable Windows Defender (Windows only)
- if: runner.os == 'Windows'
- shell: powershell
- run: |
- Add-MpPreference -ExclusionPath "${{ github.workspace }}"
- Add-MpPreference -ExclusionProcess "dotnet.exe"
- Add-MpPreference -ExclusionProcess "testhost.exe"
- Add-MpPreference -ExclusionProcess "VSTest.Console.exe"
- - name: Set VSTEST_DUMP_PATH
- shell: bash
- run: echo "VSTEST_DUMP_PATH=logs/UnitTestsParallelizable/${{ runner.os }}/" >> $GITHUB_ENV
- - name: Run UnitTestsParallelizable
- shell: bash
- run: |
- if [ "${{ runner.os }}" == "Linux" ]; then
- # Run with coverage on Linux only
- dotnet test Tests/UnitTestsParallelizable \
- --no-build \
- --verbosity normal \
- --collect:"XPlat Code Coverage" \
- --settings Tests/UnitTests/runsettings.coverage.xml \
- --diag:logs/UnitTestsParallelizable/${{ runner.os }}/logs.txt \
- --blame \
- --blame-crash \
- --blame-hang \
- --blame-hang-timeout 60s \
- --blame-crash-collect-always
- else
- # Run without coverage on Windows/macOS for speed
- dotnet test Tests/UnitTestsParallelizable \
- --no-build \
- --verbosity normal \
- --settings Tests/UnitTestsParallelizable/runsettings.xml \
- --diag:logs/UnitTestsParallelizable/${{ runner.os }}/logs.txt \
- --blame \
- --blame-crash \
- --blame-hang \
- --blame-hang-timeout 60s \
- --blame-crash-collect-always
- fi
- - name: Upload UnitTestsParallelizable Logs
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: parallel_unittests-logs-${{ runner.os }}
- path: |
- logs/UnitTestsParallelizable/
- TestResults/
-
- - name: Upload Parallelizable UnitTests Coverage to Codecov
- if: matrix.os == 'ubuntu-latest' && always()
- uses: codecov/codecov-action@v4
- with:
- files: TestResults/**/coverage.cobertura.xml
- flags: unittests-parallel
- name: UnitTestsParallelizable-${{ runner.os }}
- token: ${{ secrets.CODECOV_TOKEN }}
- fail_ci_if_error: false
|