name: Build & Run Integration Tests on: push: branches: [ v2_release, v2_develop ] paths-ignore: - '**.md' pull_request: branches: [ v2_release, v2_develop ] paths-ignore: - '**.md' jobs: build: uses: ./.github/workflows/quick-build.yml integration_tests: name: Integration Tests runs-on: ${{ matrix.os }} needs: build strategy: fail-fast: false # Let all OSes finish even if one fails 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/IntegrationTests/${{ runner.os }}/" >> $GITHUB_ENV - name: Run IntegrationTests shell: bash run: | if [ "${{ runner.os }}" == "Linux" ]; then # Run with coverage on Linux only dotnet test Tests/IntegrationTests \ --no-build \ --verbosity minimal \ --collect:"XPlat Code Coverage" \ --settings Tests/IntegrationTests/runsettings.coverage.xml \ --diag:logs/IntegrationTests/${{ 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/IntegrationTests \ --no-build \ --verbosity minimal \ --settings Tests/IntegrationTests/runsettings.xml \ --diag:logs/IntegrationTests/${{ runner.os }}/logs.txt \ --blame \ --blame-crash \ --blame-hang \ --blame-hang-timeout 60s \ --blame-crash-collect-always fi - name: Upload Integration Test Logs if: always() uses: actions/upload-artifact@v4 with: name: integration_tests-logs-${{ runner.os }} path: | logs/IntegrationTests/ TestResults/ - name: Upload Integration Tests Coverage to Codecov if: matrix.os == 'ubuntu-latest' && always() uses: codecov/codecov-action@v4 with: files: TestResults/**/coverage.cobertura.xml flags: integrationtests name: IntegrationTests-${{ runner.os }} token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: false