mirror of
https://github.com/ElectronNET/Electron.NET.git
synced 2026-02-14 13:44:47 +00:00
- Separate between PR and Push execution (with and without secrets) - Turn tests into re-usable workflows and call them from the main ones
221 lines
7.7 KiB
YAML
221 lines
7.7 KiB
YAML
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."
|