Files
nexarch/dms/scripts/check-security-test-coverage_selftest.sh
patrickandClaude Sonnet 5 6f31d22396
CI / Core-Modul (Build/Vet/Test) (push) Failing after 3s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 2s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 1m2s
CI / Web (dms-browser) (push) Failing after 50s
CI / Web (pdf-viewer) (push) Failing after 42s
CI / Web (shl) (push) Failing after 17s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
FDN-07: ci-pipeline & testharness
.gitea/workflows/ci.yml deckt Core-Modul, DMS-Modul und die drei
Frontend-Pakete (shl, dms-browser, pdf-viewer) ab: Build/Vet/Test mit
Testabdeckung, golangci-lint, govulncheck (Go) und npm audit (JS/TS) als
Supply-Chain-Scan, reproduzierbarer Artefakt-Build (zweifacher Build +
cmp). Läuft auf dem bestehenden act_runner (192.168.1.131, aus QA-07).

Neues Merge-Gate dms/scripts/check-security-test-coverage.sh erzwingt
Tests für sicherheitsrelevante Pakete (crypto, storage, downloadapi,
versioningapi, audittrail) als eigener CI-Job vor dem eigentlichen
Testlauf (needs:), mit Selbstbeweis (_selftest.sh), der die Ablehnung bei
fehlenden Tests tatsächlich provoziert statt sie nur zu behaupten.

Offen und im Prüfprotokoll dokumentiert: NEXARCH_DMS_TEST_DB_PASSWORD als
Gitea-Actions-Secret und die Branch-Protection-Regel für main konnten in
dieser Sitzung nicht gesetzt werden (Auto-Mode-Classifier blockiert
schreibende Zugriffe auf Secret-Store und sicherheitsrelevante
Server-/Repo-Einstellungen) - beides erfordert eine einmalige manuelle
Aktion einer berechtigten Person.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 13:47:31 +02:00

28 lines
1.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Beweistest fuer das Merge-Gate selbst (FDN-07 Pruefung 5): entfernt testweise
# alle Tests eines sicherheitsrelevanten Pakets in eine Kopie des Repos und
# bestaetigt, dass die Gate den Merge dann ablehnt (Exit-Code != 0) -
# sowie dass sie im Normalfall durchlaesst (Exit-Code 0).
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
WORKDIR=$(mktemp -d)
trap 'rm -rf "$WORKDIR"' EXIT
cp -r "$REPO_ROOT" "$WORKDIR/dms"
echo "== Fall 1: unveraendertes Repo -> Gate muss bestehen =="
if ! bash "$WORKDIR/dms/scripts/check-security-test-coverage.sh"; then
echo "FEHLER: Gate schlug im Normalfall fehl (falsch-positiv)" >&2
exit 1
fi
echo "== Fall 2: Tests von internal/crypto entfernt -> Gate muss ablehnen =="
rm -f "$WORKDIR"/dms/internal/crypto/*_test.go
if bash "$WORKDIR/dms/scripts/check-security-test-coverage.sh"; then
echo "FEHLER: Gate liess Merge ohne Sicherheitstests durch (falsch-negativ)" >&2
exit 1
fi
echo "Beweistest bestanden: Gate lehnt fehlende Sicherheitstests technisch ab."