72 lines
2.3 KiB
YAML
72 lines
2.3 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
build-and-test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install .NET 8
|
|
run: |
|
|
curl -sSL https://dot.net/v1/dotnet-install.sh -o dotnet-install.sh
|
|
chmod +x dotnet-install.sh
|
|
./dotnet-install.sh --channel 8.0 --install-dir $HOME/.dotnet
|
|
echo "$HOME/.dotnet" >> $GITHUB_PATH
|
|
echo "DOTNET_ROOT=$HOME/.dotnet" >> $GITHUB_ENV
|
|
|
|
- name: Restore (Linux solution filter — excludes Windows-only WPF app)
|
|
run: dotnet restore TeamsISO.Linux.slnf
|
|
|
|
- name: Build (Release, treat warnings as errors)
|
|
run: dotnet build TeamsISO.Linux.slnf --configuration Release --no-restore
|
|
|
|
- name: Test (excluding requires=ndi)
|
|
run: >
|
|
dotnet test TeamsISO.Linux.slnf
|
|
--configuration Release
|
|
--no-build
|
|
--logger "trx;LogFileName=test-results.trx"
|
|
--collect:"XPlat Code Coverage"
|
|
--settings coverlet.runsettings
|
|
--filter "Category!=ndi&requires!=ndi"
|
|
|
|
- name: Install ReportGenerator
|
|
run: dotnet tool install --global dotnet-reportgenerator-globaltool
|
|
|
|
- name: Generate coverage report
|
|
run: |
|
|
export PATH="$PATH:$HOME/.dotnet/tools"
|
|
reportgenerator \
|
|
-reports:"**/coverage.cobertura.xml" \
|
|
-targetdir:coverage-report \
|
|
-reporttypes:"Cobertura;TextSummary" \
|
|
-assemblyfilters:"+TeamsISO.Engine;-TeamsISO.Engine.NdiInterop"
|
|
|
|
- name: Enforce coverage threshold (80%)
|
|
run: |
|
|
summary=$(cat coverage-report/Summary.txt)
|
|
echo "$summary"
|
|
line_coverage=$(echo "$summary" | awk '/Line coverage/ {print $3}' | tr -d '%')
|
|
echo "Line coverage: $line_coverage%"
|
|
awk -v c="$line_coverage" 'BEGIN { if (c+0 < 80) { exit 1 } }'
|
|
|
|
- name: Upload test results
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: test-results
|
|
path: '**/test-results.trx'
|
|
|
|
- name: Upload coverage report
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: coverage-report
|
|
path: coverage-report/
|