Zum Inhalt springen

Mitarbeit

provider/ Kern-Vertrag: Provider, RRset, RRSetChange, Capabilities,
optionale Interfaces, Registry, Namens-Kanonik
provider/<name>/ Adapter je Anbieter
core/ Modelle + Event-Sourced-Aggregate (ORM++), Migrationen
app/ Business-Funktionen (Zonen, Sync Groups, Templates,
Quellen, DynDNS, Zertifikate, Benutzer, Teams …)
httpapi/ Fiber-v3-API + Registrierungsschicht für EE/Cloud
server/ wiederverwendbares Wiring (server.Run + Options)
auth/ acme/ mail/ Passwörter/TOTP, ACME-Issuer (lego), SMTP-Versand
jobs/ session/ Scheduler (Drift, Zertifikate, Erinnerungen), Sessions
demo/ In-Memory-Provider + Demo-Seed (DNSE_DEMO=on)
ui/ webui/ Lit/Shoelace-SPA + go:embed des Builds
docs/ diese Dokumentation
Terminal-Fenster
make test # Go-Tests (race) + gofmt + vet + UI-Tests
go test -race ./...
gofmt -l .
go vet ./...

Die Oberfläche liegt gebaut im Repo (webui/dist), damit go:embed funktioniert. Nach Änderungen an ui/ gehört der Build mit in denselben Commit — die CI prüft das:

Terminal-Fenster
cd ui && npm ci && npm run build
Terminal-Fenster
docker compose up -d
PDNS_TEST_ENDPOINT=http://localhost:8081 PDNS_TEST_API_KEY=test-secret \
go test -race -run Integration -v ./provider/powerdns/

Ohne die beiden Variablen werden diese Tests übersprungen. Die CI fährt dieselben Tests gegen einen PowerDNS-Service-Container.

Ein Adapter liegt unter provider/<name>/ und implementiert:

MethodeAufgabe
ZonesZonen des Kontos auflisten (für das Onboarding)
RRsetsIst-Zustand einer Zone lesen
ApplyChangesRecord Sets schreiben und löschen
HealthZugangsdaten prüfen (Verbindungstest)

Dazu gehören ein Descriptor (Anzeigename, Credential-Felder, Portal- und Doku-Link, Kurzanleitung) und die Capabilities. Fehler werden auf die Sentinel-Werte des Pakets abgebildet (ErrUnauthorized, ErrZoneNotFound, ErrInvalidChange, ErrUnreachable) — daran hängen die Account-Zustände in der Oberfläche.

Als Vorlage eignen sich desec (atomares Bulk-Update) und digitalocean (einzelne Records mit Priorität/Gewicht).

  • Default-Branch: develop
  • main: geschützt, nur über Merge Request mit grüner Pipeline
  • Conventional Commits auf Deutsch

Die CI baut jedes Modul ohne go.work. Wer eine neue Abhängigkeit aufnimmt, führt deshalb GOWORK=off go mod tidy aus — sonst landen die Prüfsummen nur in der lokalen go.work.sum und die Pipeline scheitert.