Skip to content

Nightly Quality Signals #46

Nightly Quality Signals

Nightly Quality Signals #46

# =============================================================================
# Nightly Quality Signals — scheduled coverage and dependency signal lane.
# Runs at 03:55 UTC daily and on manual dispatch.
# Topology context documented in ci-required.yml header.
# =============================================================================
name: Nightly Quality Signals
on:
schedule:
- cron: '55 3 * * *'
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
backend-coverage:
name: Backend Coverage (Domain + Application)
runs-on: ubuntu-latest
timeout-minutes: 30
env:
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: 8.0.x
cache: true
cache-dependency-path: |
backend/Taskdeck.sln
backend/**/*.csproj
- name: Restore backend dependencies
run: dotnet restore backend/Taskdeck.sln
- name: Run Domain coverage
run: >
dotnet test backend/tests/Taskdeck.Domain.Tests/Taskdeck.Domain.Tests.csproj
-c Release
--no-restore
--collect:"XPlat Code Coverage"
--results-directory artifacts/nightly-quality/backend/domain
- name: Run Application coverage
run: >
dotnet test backend/tests/Taskdeck.Application.Tests/Taskdeck.Application.Tests.csproj
-c Release
--no-restore
--collect:"XPlat Code Coverage"
--results-directory artifacts/nightly-quality/backend/application
- name: Upload backend coverage artifacts
if: always()
uses: actions/upload-artifact@v7
with:
name: nightly-quality-backend-coverage
path: artifacts/nightly-quality/backend
if-no-files-found: ignore
retention-days: 14
frontend-coverage:
name: Frontend Coverage
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 24.13.1
cache: npm
cache-dependency-path: frontend/taskdeck-web/package-lock.json
- name: Install frontend dependencies
working-directory: frontend/taskdeck-web
run: npm ci
- name: Run frontend coverage
working-directory: frontend/taskdeck-web
run: npm run test:coverage
- name: Collect frontend coverage artifacts
if: always()
run: |
mkdir -p artifacts/nightly-quality/frontend
cp -R frontend/taskdeck-web/coverage artifacts/nightly-quality/frontend/coverage || true
cp -R frontend/taskdeck-web/test-results artifacts/nightly-quality/frontend/test-results || true
- name: Upload frontend coverage artifacts
if: always()
uses: actions/upload-artifact@v7
with:
name: nightly-quality-frontend-coverage
path: artifacts/nightly-quality/frontend
if-no-files-found: ignore
retention-days: 14
dependency-security-signals:
name: Dependency and Security Signals (Non-blocking)
uses: ./.github/workflows/reusable-dependency-security-signals.yml
with:
dotnet-version: 8.0.x
node-version: 24.13.1
artifact-name: nightly-quality-dependency-security-signals
retention-days: 14
summary-title: Nightly Quality Dependency Security Summary
workflow-context: nightly-quality