Entwicklerportal
Templates

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
  • defineTemplateManifest wirft TemplateManifestError bei Widersprüchen, z. B. ungültigem license.catalogKey
  • isTemplateLicensed(templateManifest, port): ohne license-Feld immer true, mit Feld entscheidet der Port

Darstellung

  • Seitentitel als einzige H1, benannte Navigationen, Hinweis bei leerer Seite
  • aktive Seite mit aria-current, neue Tabs mit rel="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-core

Das 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:

JobSchritte
gitleaksCheckout der gesamten Historie, Secret-Scan mit .gitleaks.toml
buildpnpm (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.

.gitleaks.toml
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$''',
]
.github/workflows/ci.yml (Auszug)
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.

On this page