name: Tests on: workflow_call: concurrency: group: integration-tests-${{ github.ref }} cancel-in-progress: true jobs: tests: name: ${{ matrix.os }} API-${{ matrix.electronVersion }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-22.04, ubuntu-24.04, windows-2022, windows-2025, macos-14, macos-15-intel, macos-26] electronVersion: ['30.4.0', '38.2.2'] include: - os: ubuntu-22.04 rid: linux-x64 - os: ubuntu-24.04 rid: linux-x64 - os: windows-2022 rid: win-x64 - os: windows-2025 rid: win-x64 - os: macos-14 rid: osx-arm64 - os: macos-15-intel rid: osx-x64 - os: macos-26 rid: osx-arm64 env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 DOTNET_NOLOGO: 1 CI: true ELECTRON_ENABLE_LOGGING: 1 steps: - name: Checkout uses: actions/checkout@v4 - name: Random delay (0-20 seconds) shell: bash run: | DELAY=$((RANDOM % 21)) echo "Waiting for $DELAY seconds..." sleep $DELAY - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' - name: Restore run: dotnet restore -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:ElectronVersion=${{ matrix.electronVersion }} src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj - name: Build run: dotnet build --no-restore -c Release -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:ElectronVersion=${{ matrix.electronVersion }} src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj - name: Install Linux GUI dependencies if: runner.os == 'Linux' run: | set -e sudo apt-get update . /etc/os-release if [ "$VERSION_ID" = "24.04" ]; then ALSA_PKG=libasound2t64; else ALSA_PKG=libasound2; fi echo "Using ALSA package: $ALSA_PKG" sudo apt-get install -y xvfb \ libgtk-3-0 libnss3 libgdk-pixbuf-2.0-0 libdrm2 libgbm1 libxss1 libxtst6 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 libx11-xcb1 "$ALSA_PKG" - name: Run tests (Linux) if: runner.os == 'Linux' continue-on-error: true run: | mkdir -p test-results xvfb-run -a dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj \ -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:ElectronVersion=${{ matrix.electronVersion }} \ --logger "trx;LogFileName=${{ matrix.os }}-electron-${{ matrix.electronVersion }}.trx" \ --logger "console;verbosity=detailed" \ --results-directory test-results - name: Run tests (Windows) if: runner.os == 'Windows' continue-on-error: true run: | New-Item -ItemType Directory -Force -Path test-results | Out-Null dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:ElectronVersion=${{ matrix.electronVersion }} --logger "trx;LogFileName=${{ matrix.os }}-electron-${{ matrix.electronVersion }}.trx" --logger "console;verbosity=detailed" --results-directory test-results - name: Run tests (macOS) if: runner.os == 'macOS' continue-on-error: true run: | mkdir -p test-results dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:ElectronVersion=${{ matrix.electronVersion }} --logger "trx;LogFileName=${{ matrix.os }}-electron-${{ matrix.electronVersion }}.trx" --logger "console;verbosity=detailed" --results-directory test-results - name: Upload raw test results if: always() uses: actions/upload-artifact@v4 with: name: test-results-${{ matrix.os }}-electron-${{ matrix.electronVersion }} path: test-results/*.trx retention-days: 7 summary: name: Test Results runs-on: ubuntu-24.04 if: always() needs: [tests] permissions: actions: read contents: read checks: write pull-requests: write steps: - name: Download all test results uses: actions/download-artifact@v4 with: path: test-results - name: Setup .NET (for CTRF conversion) uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - name: Install CTRF TRX→CTRF converter (dotnet tool) run: | dotnet new tool-manifest dotnet tool install DotnetCtrfJsonReporter --local - name: Convert TRX → CTRF and clean names (filePath=OS|Electron X.Y.Z) shell: bash run: | set -euo pipefail mkdir -p ctrf shopt -s globstar nullglob conv=0 for trx in test-results/**/*.trx; do base="$(basename "$trx" .trx)" # e.g. ubuntu-22.04-electron-30.4.0 os="${base%%-electron-*}" electron="${base#*-electron-}" label="$os|Electron $electron" outdir="ctrf/${label}" mkdir -p "$outdir" out="${outdir}/ctrf-report.json" dotnet tool run DotnetCtrfJsonReporter -p "$trx" -d "$outdir" -f "ctrf-report.json" jq --arg fp "$label" '.results.tests |= map(.filePath = $fp)' "$out" > "${out}.tmp" && mv "${out}.tmp" "$out" echo "Converted & normalized $trx -> $out" conv=$((conv+1)) done echo "Processed $conv TRX file(s)" - name: Publish Test Report if: always() uses: ctrf-io/github-test-reporter@v1 with: report-path: 'ctrf/**/*.json' summary: true pull-request: false status-check: false status-check-name: 'Integration Tests' use-suite-name: true update-comment: true always-group-by: true overwrite-comment: true exit-on-fail: true group-by: 'suite' upload-artifact: true fetch-previous-results: true summary-report: false summary-delta-report: true github-report: true test-report: false test-list-report: false failed-report: true failed-folded-report: false skipped-report: true suite-folded-report: true suite-list-report: false file-report: true previous-results-report: true insights-report: true flaky-report: true flaky-rate-report: true fail-rate-report: false slowest-report: false report-order: 'summary-delta-report,failed-report,skipped-report,suite-folded-report,file-report,previous-results-report,github-report' env: GITHUB_TOKEN: ${{ github.token }} - name: Save PR Number if: github.event_name == 'pull_request' run: echo "PR_NUMBER=${{ github.event.pull_request.number }}" >> $GITHUB_ENV - name: Write PR Number to File if: github.event_name == 'pull_request' run: echo "$PR_NUMBER" > pr_number.txt shell: bash - name: Upload PR Number Artifact if: github.event_name == 'pull_request' uses: actions/upload-artifact@v4 with: name: pr_number path: pr_number.txt - name: Summary run: echo "All matrix test jobs completed."