d03ca01172
CI / backend (pull_request) Successful in 52s
CI / frontend (pull_request) Successful in 23s
CI / format (pull_request) Successful in 51s
CI / db-tests (pull_request) Successful in 52s
Security / secrets (pull_request) Successful in 4s
Security / dependencies (pull_request) Successful in 1m1s
.NET 8 security support ends 2026-11-10; .NET 10 is LTS to Nov 2028. - TargetFramework net8.0 -> net10.0 (Directory.Build.props) - EF Core 8.0.4 -> 10.0.9; Npgsql provider 8.0.4 -> 10.0.2; Pgvector.EFCore 0.2.0 -> 0.3.0; ASP.NET/Extensions packages -> 10.0.9 - Dockerfile sdk/aspnet 8.0 -> 10.0; CI setup-dotnet -> 10.0.x - Modernised deprecated APIs: X509CertificateLoader (SYSLIB0057), KnownIPNetworks + System.Net.IPNetwork.Parse (ASPDEPR005) - Adapted tests to Npgsql 10's eager connection-string validation (dummy conn string in test factories; behaviour change from lazy 8.x) Verified: 0 errors/0 warnings; all 54 tests green on net10; the 3 LiveDb tests green against a real pgvector container on the new EF10/Npgsql10/Pgvector 0.3 stack; dotnet format clean; vulnerable-package scan clean; the .NET 10 API Docker image builds successfully. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
55 lines
2.2 KiB
YAML
55 lines
2.2 KiB
YAML
name: Security
|
|
|
|
# Scans run alongside CI on every PR and on pushes to the long-lived branches.
|
|
# This is the DETECTIVE layer (backstop). The PREVENTIVE layer is the local
|
|
# pre-commit hook — this catches anything that slipped past it (e.g. --no-verify)
|
|
# and scans the full history, not just the staged diff.
|
|
on:
|
|
push:
|
|
branches: [main, develop]
|
|
pull_request:
|
|
|
|
jobs:
|
|
secrets:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0 # full history so gitleaks scans every commit
|
|
- name: Secret scan (gitleaks)
|
|
# Run the binary directly — the container-mode runner has no Docker socket,
|
|
# so `docker run` isn't available inside a job.
|
|
run: |
|
|
GITLEAKS_VERSION=8.18.4
|
|
curl -sSL "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" -o /tmp/gitleaks.tar.gz
|
|
tar -xzf /tmp/gitleaks.tar.gz -C /tmp gitleaks
|
|
/tmp/gitleaks detect --source=. --redact --verbose --exit-code=1
|
|
|
|
dependencies:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: '10.0.x'
|
|
- name: Restore
|
|
run: dotnet restore InboxIntel.sln
|
|
- name: .NET vulnerable packages (fail on any)
|
|
# Match dotnet's own "has the following vulnerable packages" line rather
|
|
# than raw severity words, so package/project names can't false-positive.
|
|
run: |
|
|
dotnet list InboxIntel.sln package --vulnerable --include-transitive 2>&1 | tee vuln.txt
|
|
if grep -q "has the following vulnerable" vuln.txt; then
|
|
echo "::error::Vulnerable NuGet packages detected — see the table above."
|
|
exit 1
|
|
fi
|
|
echo "No vulnerable NuGet packages."
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '20'
|
|
- name: npm audit (production deps, fail on high/critical)
|
|
# Only production dependencies ship to users; dev-only toolchain advisories
|
|
# (Vite/PostCSS/etc.) shouldn't block a merge.
|
|
working-directory: frontend
|
|
run: npm audit --omit=dev --audit-level=high
|