Tests, CI und Secret-Scan
Tests nur gegen das SDK, der CI-Workflow eines Template-Repos und die Gitleaks-Konfiguration.
Tests
Die Tests eines Templates brauchen nur @patriotconnect/template-sdk – das Paket ist ohne die Plattform prüfbar,
auch allein geklont. Drei Gruppen gehören in jedes Template:
Manifest und Lizenz
- Kennung, Version, Regionen, Whitelist;
Settings.parse({})liefert die Defaults; Formularfelder passen zum Schema - unbekannte Schlüssel und freie Farben werden abgelehnt
defineTemplateManifestwirftTemplateManifestErrorbei Widersprüchen, z. B. ungültigemlicense.catalogKeyisTemplateLicensed(templateManifest, port): ohnelicense-Feld immertrue, mit Feld entscheidet der Port
Darstellung
- Seitentitel als einzige H1, benannte Navigationen, Hinweis bei leerer Seite
- aktive Seite mit
aria-current, neue Tabs mitrel="noopener noreferrer" - Link „Datenschutz-Einstellungen“ mit
data-pc-consent-open - jede Einstellung wirkt, ungültige fallen auf Defaults zurück
- Dunkelmodus: keine festen Farben
Barrierefreiheit – jede Variante mit axe-core gegen WCAG 2.1 A/AA und Best Practice prüfen.
pnpm build
pnpm typecheck
pnpm test # vitest + jsdom + axe-coreDas Andocken an die Plattform (Katalog, Prüfung der Template-Wahl, Web-Registry, Rückfall auf standard) prüft die
Plattform selbst; im Monorepo stellt pnpm verify zusätzlich sicher, dass die generierten Template-Listen aktuell sind.
CI-Workflow
Jedes Template-Repo hat .github/workflows/ci.yml mit zwei Jobs:
| Job | Schritte |
|---|---|
gitleaks | Checkout der gesamten Historie, Secret-Scan mit .gitleaks.toml |
build | pnpm (fest 10.25.0), Node 22, Registry des Scopes @patriotconnect, workspace: umschreiben, install, build, typecheck, test |
Die Actions sind per Commit-SHA gepinnt. Die SDK-Version für eigenständige Builds steuert die Repo-Variable
SDK_VERSION (Standard ^0.1.0).
Secret-Scan mit Gitleaks
Ein Template braucht keine Zugangsdaten. Damit trotzdem nie ein Schlüssel, Token oder Passwort in einem
Template-Repo landet, prüft der Job gitleaks bei jedem Push und Pull-Request die gesamte Git-Historie.
title = "Secret-Scan @patriotconnect/template-mein-template"
[extend]
useDefault = true
[[allowlists]]
description = "Fremd- und Build-Verzeichnisse, Lockfiles (Integritäts-Hashes sind keine Geheimnisse)"
paths = [
'''(^|/)node_modules/''',
'''(^|/)dist/''',
'''(^|/)coverage/''',
'''(^|/)\.preview/''',
'''(^|/)pnpm-lock\.yaml$''',
'''(^|/)package-lock\.json$''',
]gitleaks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
fetch-depth: 0
- name: Secret-Scan (gesamte Historie, Gitleaks gepinnt, nur im Runner)
run: |
docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/repo" -w /repo ghcr.io/gitleaks/gitleaks:v8.30.1 \
git /repo --config=/repo/.gitleaks.toml --log-opts=--all --redact --no-banner --verbose- Standardregeln + eng begrenzte Ausnahmen. Ausgenommen sind nur Verzeichnisse, in denen nie Geheimnisse liegen. Testdateien sind nicht ausgenommen – ein Template braucht auch dort keine Schlüssel.
- Nur im Runner. Gitleaks läuft als gepinnter Container in der CI; es wird weder ins Repo noch auf einen
Arbeitsplatz installiert. Funde erscheinen geschwärzt (
--redact). - Ein Fund ist immer ein Fehler. Geheimnis sofort beim Anbieter widerrufen bzw. rotieren, dann aus der Historie entfernen. Funde werden nie per Ausnahme ausgeblendet.
Ein Template-Repo wird erst nach grünem Secret-Scan und Freigabe durch den Betreiber öffentlich geschaltet.