teamsiso/.forgejo/workflows/ci.yml

73 lines
2.3 KiB
YAML
Raw Normal View History

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/