Ctrl K
ComunidadGuías…

CONTRIBUTING.de.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
[English](CONTRIBUTING.md) · **Deutsch**

# Zu RootGuard beitragen

Danke für dein Interesse an RootGuard. Beiträge können Code, Tests,
Dokumentation, Übersetzungen oder reproduzierbare Fehlerberichte sein.

## Einstieg

1. Prüfe bestehende [Issues](https://github.com/foxly-it/rootguard/issues) und
   die [Roadmap](ROADMAP.md).
2. Für den ersten Beitrag eignen sich insbesondere
   [`good first issue`](https://github.com/foxly-it/rootguard/labels/good%20first%20issue)
   und [`help wanted`](https://github.com/foxly-it/rootguard/labels/help%20wanted).
3. Beschreibe bei größeren Änderungen vor der Umsetzung kurz den geplanten
   Lösungsweg im Issue.

Sicherheitslücken gehören nicht in öffentliche Issues. Verwende dafür den in
[SECURITY.md](SECURITY.md) beschriebenen vertraulichen Meldeweg.

## Entwicklungsumgebung

```sh
git clone https://github.com/foxly-it/rootguard.git
cd rootguard
cp .env.example .env
```

Setze in `.env` ein starkes Admin-Passwort sowie getrennte zufällige API- und
Recovery-Token. Anschließend lässt sich der Entwicklungsstack bauen:

```sh
docker compose up --build -d
```

## Das richtige Verzeichnis wählen

RootGuard ist ein Monorepo. Anwendungscode gehört in das jeweilige
Komponentenverzeichnis, jedes mit eigenem Dockerfile und eigenem
pfadgefiltertem CI-Workflow:

- `rootguard-core` – Orchestrierung und interne API
- `rootguard-webapp` – Benutzeroberfläche und Anmeldung
- `rootguard-updater` – kontrollierte Core-/WebApp-Updates
- `rootguard-unbound` – Unbound-Image und Resolver-Basis

Ein Pull Request kann ein oder mehrere dieser Verzeichnisse gemeinsam mit den
zugehörigen Doku-Updates (`ROADMAP.md`, `docs/project-state.md`) in einem
Schritt ändern.

## Änderungen umsetzen

- Halte einen Pull Request auf ein klar abgegrenztes Problem beschränkt.
- Ergänze oder aktualisiere Tests für geändertes Verhalten.
- Aktualisiere Handbuch, Wiki und Projektstatus, wenn sich sichtbares Verhalten
  oder der dokumentierte Funktionsumfang ändert.
- Veröffentliche keine Zugangsdaten, `.env`-Dateien, Tokens oder privaten
  Netzwerkdetails.
- Verwende für neue Texte die deutsche und englische Variante, wenn die
  betroffene Oberfläche zweisprachig ist.

## Commit-Nachrichten

Der Titel jedes Commits (bzw. bei einem gesquashten Pull Request: der
Merge-Commit-Titel) folgt [Conventional Commits](https://www.conventionalcommits.org/):

```
<typ>(<optionaler bereich>): <kurze beschreibung>
```

Gebräuchliche Typen: `feat` (neues Verhalten), `fix` (Bugfix), `docs`
(Dokumentation), `refactor`, `perf`, `test`, `ci`, `chore`. Ein
`!` nach dem Typ/Bereich (z. B. `feat!:`) oder eine `BREAKING CHANGE:`-Zeile
im Commit-Body markiert eine rückwärtsinkompatible Änderung.

Daraus generiert `cliff.toml` bei jedem Release automatisch den Abschnitt in
[CHANGELOG.md](CHANGELOG.md) - ein Commit ohne passenden Typ landet dort
lediglich unter „Other" statt in der passenden Kategorie, bricht aber nichts.

## Vor dem Pull Request

Für Änderungen im Hauptrepository:

```sh
git diff --check
docker compose config
```

Führe zusätzlich die Tests des betroffenen Komponentenverzeichnisses aus. Die
Integrations-CI startet zudem einen vollständigen Stack und prüft Login,
Setup, DNS-Auflösung und DNSSEC.

## Pull Request

Ein Pull Request sollte enthalten:

- eine kurze Erklärung des Problems und der Lösung;
- die ausgeführten Prüfungen;
- Screenshots bei sichtbaren Änderungen;
- Hinweise zu Migration, Konfiguration oder bekannten Einschränkungen;
- eine Verknüpfung zum zugehörigen Issue, sofern vorhanden.

Mit einem Beitrag erklärst du dich damit einverstanden, ihn unter der
Projektlizenz [AGPL-3.0-or-later](LICENSE) zu veröffentlichen.

## Release-Prozess (nur Maintainer)

Ein neuer Alpha-Release wird über den Workflow „Cut next alpha release"
(`.github/workflows/release-version-bump.yml`, manuell per
`workflow_dispatch` ausgelöst) angestoßen. Er ermittelt die nächste
Versionsnummer selbst, generiert den passenden Abschnitt in
[CHANGELOG.md](CHANGELOG.md) aus der Commit-Historie seit dem letzten Tag,
committet und taggt - der bestehende `release-alpha.yml`-Workflow übernimmt
danach unverändert Build, Signierung und Veröffentlichung wie bisher.