name: Build & Test Terminal.Gui with .NET Core on: push: branches: [ v2_release, v2_develop ] paths-ignore: - '**.md' pull_request: branches: [ v2_release, v2_develop ] paths-ignore: - '**.md' jobs: build_and_test: runs-on: ${{ matrix.os }} strategy: # Turn off fail-fast to let all runners run even if there are errors fail-fast: true matrix: os: [ ubuntu-latest, windows-latest, macos-latest ] timeout-minutes: 10 steps: # Build - 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: Install dependencies run: | dotnet restore - name: Build Debug run: dotnet build --configuration Debug --no-restore # Test # Note: The --blame and VSTEST_DUMP_PATH stuff is needed to diagnose the test runner crashing on ubuntu/mac # See https://github.com/microsoft/vstest/issues/2952 for why the --blame stuff below is needed. # Without it, the test runner crashes on ubuntu (but not Windows or mac) - name: MacOS - Patch test runner settings to stop on fail if: runner.os == 'macOS' run: | brew install gnu-sed gsed -i 's/"stopOnFail": false/"stopOnFail": true/g' UnitTests/xunit.runner.json - name: Windows/Linux - Patch test runner settings to stop on fail if: runner.os != 'macOS' run: | sed -i 's/"stopOnFail": false/"stopOnFail": true/g' UnitTests/xunit.runner.json - name: Set VSTEST_DUMP_PATH shell: bash run: echo "{VSTEST_DUMP_PATH}={logs/${{ runner.os }}/}" >> $GITHUB_ENV - name: Test run: | dotnet test --verbosity normal --collect:"XPlat Code Coverage" --settings UnitTests/coverlet.runsettings --diag:logs/${{ runner.os }}/logs.txt --blame --blame-crash --blame-hang --blame-hang-timeout 60s --blame-crash-collect-always # mv -v UnitTests/TestResults/*/*.* UnitTests/TestResults/ - name: Upload Test Logs if: always() uses: actions/upload-artifact@v4 with: name: test-logs-${{ runner.os }} path: | logs/ UnitTests/TestResults/ # Note: this step is currently not writing to the gist for some reason # - name: Create Test Coverage Badge # uses: simon-k/dotnet-code-coverage-badge@v1.0.0 # id: create_coverage_badge # with: # label: Unit Test Coverage # color: brightgreen # path: UnitTests/TestResults/coverage.opencover.xml # gist-filename: code-coverage.json # # https://gist.github.com/migueldeicaza/90ef67a684cb71db1817921a970f8d27 # gist-id: 90ef67a684cb71db1817921a970f8d27 # gist-auth-token: ${{ secrets.GIST_AUTH_TOKEN }} # - name: Print Code Coverage # run: | # echo "Code coverage percentage: ${{steps.create_coverage_badge.outputs.percentage}}%" # echo "Badge data: ${{steps.create_coverage_badge.outputs.badge}}"