Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions AGENTS.de.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<a id="repository-guidance"></a>

# Repository-Leitlinien

[English](AGENTS.md) | [Deutsch](AGENTS.de.md)

Vor Codeaenderungen [CONTRIBUTING.de.md](CONTRIBUTING.de.md) lesen.
Fuer Terraform auch den [Terraform-Stilguide](docs/terraform-style.de.md)
lesen und befolgen; die dokumentierten Konventionen fuer
Root-/Child-Provider-Versionen erhalten.

<a id="boundaries"></a>

## Grenzen

- `src/` ist der unabhaengig nutzbare Accelerator.
Keine Abhaengigkeit von Configurator-API, Datenbank oder gehostetem Service
einfuehren.
- `landing-zone-configurator/` enthaelt eigene App, Vertraege, Compiler,
HCL-Adapter, Runner-Paketierung und Betreiber-IaC.
Der [komponentenuebergreifenden Entwicklungsuebersicht](landing-zone-configurator/docs/development.de.md)
folgen.
- Native Eingaben, generierte Kataloge, Domaenenvalidierung, API-/Jobvertraege,
Frontend/Sprachen, Runner und Assistant-Wissen konsistent halten.
Artefakte mit bestehenden Befehlen generieren;
generierte Inhalte nicht manuell bearbeiten.
- Importierte Felder, stabile Ressourcenidentitaeten, Null-/Default-Semantik,
Tenant-Autorisierung und revisionsgebundene Freigaben erhalten.
Assistant-Annahme ist weder Persistenz noch Erlaubnis fuer Plan/Apply.

<a id="verification-and-operations"></a>

## Verifikation und Betrieb

- Gepinnte Tools und kleinste relevante bestehende Pruefungen verwenden,
danach den vollstaendigen betroffenen Ablauf validieren.
Uebersprungene Pruefungen und offene Fehler explizit berichten.
- Aenderungen an Assistant-Fakten oder -Faehigkeiten benoetigen
quellengebundene Realmodell-Qualifikation gemaess Wissensvertrag.
Fehlgeschlagene Wiederholungen sind Fehler, keine Retries;
Validierung nicht fuer einen gruenen Nachweis abschwaechen.
- Niemals Secrets, Kundenzustand, rohe Plaene oder private Betriebsevidenz
offenlegen.
Keine Cloud-Mutationen oder Deployments ohne explizite Autorisierung.
- Configurator-Provisionierung und Anwendungsdeployment sind manuelle
Workflows.
Ein Source-Merge ist keine Deployment-Freigabe;
Produktion ist ein getrennter Folgeschritt.
- Nicht betroffene Worktree-Aenderungen erhalten.
Direkt zugehoerige oeffentliche und Contributor-Dokumentation
aktualisieren, keine datierten Sitzungsnotizen oder Uebergabedateien.
- Englisch als primaere Dokumentationssprache und deutsche Begleiter
gemaess [CONTRIBUTING.de.md](CONTRIBUTING.de.md) pflegen;
generierte und maschinell eingelesene Quellvertraege erhalten.
5 changes: 5 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Repository guidance

[English](AGENTS.md) | [Deutsch](AGENTS.de.md)

Read [CONTRIBUTING.md](CONTRIBUTING.md) before changing code. For Terraform,
also read and follow [the Terraform style guide](docs/terraform-style.md);
preserve the documented root/child provider-version conventions.
Expand Down Expand Up @@ -31,3 +33,6 @@ preserve the documented root/child provider-version conventions.
A source merge is not deployment approval; production is a separate follow-up.
- Preserve unrelated worktree changes. Update directly related public and
contributor documentation, not dated session notes or handoff files.
- Maintain English-first documentation and German companions according to
[CONTRIBUTING.md](CONTRIBUTING.md); preserve generated and machine-ingested
source contracts.
161 changes: 161 additions & 0 deletions CONTRIBUTING.de.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
<a id="contributing"></a>
# Mitwirken

[English](CONTRIBUTING.md) | [Deutsch](CONTRIBUTING.de.md)

Vielen Dank, dass Sie sich die Zeit nehmen, einen Beitrag zu leisten. Dieses Dokument beschreibt die lokale Einrichtung, die Konventionen dieses Repositorys und den erwarteten Inhalt eines Pull Requests.

<a id="local-setup"></a>
## Lokale Einrichtung

Die Werkzeugversionen sind in `mise.toml` festgelegt. Installieren Sie sie einmalig:

```bash
mise install
```

Damit stehen OpenTofu, die STACKIT CLI, `terraform-docs` und `pre-commit` in den Versionen bereit, gegen die dieses Repository getestet wird.

Installieren Sie die Git-Hooks:

```bash
pre-commit install
```

Die Hooks führen `tofu fmt` aus und erzeugen die Moduldokumentation neu. Wenn ein Hook eine Datei umschreibt, nehmen Sie das Ergebnis in den Staging-Bereich auf und versuchen Sie den Commit erneut.

Der Dokumentations-Hook ruft `terraform-docs` über `mise exec` auf. So verwendet er die in `mise.toml` festgelegte Version und funktioniert auch, wenn Git aus einem Editor ohne geladene mise-Umgebung gestartet wird.

Für eine Bereitstellung in einer echten STACKIT-Organisation ist zusätzlich ein Dienstkontoschlüssel erforderlich. `mise.toml` erwartet ihn unter `~/.stackit/credentials.json`; siehe [docs/getting-started.md](docs/getting-started.de.md).

<a id="before-you-open-a-pull-request"></a>
## Vor dem Öffnen eines Pull Requests

```bash
cd src
tofu fmt -recursive
tofu init -backend=false
tofu validate
tofu test
```

`tofu test` führt die Konfigurationssuiten in `src/tests/` als lokale, reine
Plan-Läufe mit Mock-Providern aus. Diese Tests erstellen keine Cloud-Ressourcen.
Die Prüfung in der echten Cloud ist ein separater, manuell gestarteter Workflow,
keine gewöhnliche PR-Prüfung.

<a id="conventions"></a>
## Konventionen

<a id="changes-that-cross-the-accelerator-and-configurator"></a>
### Änderungen über Accelerator und Configurator hinweg

Der Accelerator bleibt unabhängig nutzbar. Configurator-Funktionen betreffen oft
mehrere Komponenten; aktualisieren Sie den vollständigen Vertrag, nicht nur ein
sichtbares UI-Feld. Lesen Sie zuerst die
[Entwicklungsübersicht](landing-zone-configurator/docs/development.de.md) und die
[Architektur](landing-zone-configurator/docs/architecture.de.md).

1. **Native Infrastruktur:** Ergänzen oder ändern Sie Root-/Moduleingaben und -ausgaben,
Standardwerte, Validierung und Modultests in `src/`. Bewahren Sie State-Adressen und
Kompatibilität oder dokumentieren Sie die Migration ausdrücklich.
2. **Eingabe-/Katalogadapter:** Aktualisieren Sie HCL-Import/-Export und erzeugen Sie
die geprüften Kataloge für native Eingaben und Templates über die bestehenden
[Adapterbefehle](landing-zone-configurator/tools/hcl-adapter/README.de.md) neu.
3. **Domain/Compiler:** Verdrahten Sie native Felder, die Semantik von optional/null/Standardwerten,
die Erhaltung von Werten und deterministische Validierung in `app/packages/domain`.
4. **API/Verträge:** Aktualisieren Sie gemeinsame Anfrage-/Jobverträge und serverseitige Mandanten-,
Berechtigungs-, Revisions- und Lebenszyklusprüfungen. Verlassen Sie sich nicht auf reine Browserprüfungen.
5. **Frontend:** Bilden Sie denselben Vertrag, beide Sprachen, hilfreiche Validierung und
ausdrückliche Prüfung/Annahme ab. Testen Sie Desktop/Mobilgeräte und den Erhalt von Entwürfen.
6. **Runner/Release:** Führen Sie geänderte Eingaben und Ausgaben durch Broker, State,
Migrationen, festgelegte Pakete und Jobergebnisse. Halten Sie die Quellherkunft von API/UI
und Runner konsistent; führen Sie niemals einen beliebigen Repository-Head aus.
7. **Assistant:** Prüfen Sie Themenzuständigkeit, kuratierte Fakten, Berechtigungen und Vorschlagsschemata.
Erzeugen Sie Wissen/Abdeckung neu, ergänzen Sie faktische positive und negative
Oracle-Tests und qualifizieren Sie betroffene Fälle mit dem echten Modell mindestens zweimal.
Eine neue Fähigkeit oder eine breite Vertragsänderung benötigt außerdem die vollständige
wiederholte Suite und den durchgängigen Dialog. Schwächen Sie kein Oracle ab, um einen echten Fehler zu verbergen.
8. **Dokumentation:** Aktualisieren Sie sichtbares Benutzerverhalten, Architektur und Hinweise
für Mitwirkende. Verlinken Sie Folge-Issues für bewusst gesetzte Grenzen.

Verwenden Sie für die Configurator-Einrichtung Node **24.21.0**, npm **11.19.0** und dessen eigene Lockdatei:

```sh
cd landing-zone-configurator/app
npm ci
npm run check
```

Verwenden Sie während der Entwicklung die kleinsten relevanten Tests und vor der
Prüfung die zutreffenden Integrationsprüfungen:

| Änderung | Erforderlicher Nachweis |
| --- | --- |
| Native Eingaben/Templates | Modultests; Adapter `go test ./...` und Katalogprüfungen; `npm run test:common-contract` |
| Domain/API/UI | `npm run check`; relevante Datenbank- und Playwright-Tests |
| Broker, Vorbereitungen, Runner oder State | Relevante Worker-/Brokertests; `npm run test:platform-database`; Paketierungs- und State-Regressionstests |
| Assistant | `npm run assistant:generate`, Formatierung generierter Dateien, `npm run assistant:check`, faktische Unit-Tests und quellgebundene Live-Nachweise |
| Operator-CI/IaC | Relevante `node --test`-Prüfungen; Workflow-Lint; Formatierung/Initialisierung/Validierung und Mock-Tests für betroffene IaC-Roots |

Die [Anwendungs-README](landing-zone-configurator/app/README.de.md) dokumentiert die
genauen Befehle für Generierung, Datenbank, Browser und das echte Modell.
Datenbank-/Browsertests verwenden isolierte Testdienste. Gewöhnliche PR-Prüfungen
dürfen keine Kundeninfrastruktur bereitstellen. Teilen Sie keine
Ausführungszugangsdaten mit der ausschließlich für Inferenz vorgesehenen Umgebung
`assistant-tests`. Configurator-Provisionierung und -Bereitstellung bleiben manuell;
die Produktionseinrichtung ist eine separate Aufgabe.

Der [Workflow-Katalog](docs/workflows.de.md) führt alle Pipelines, automatischen/manuellen
Auslöser und Startanleitungen für die Oberfläche auf. Aktualisieren Sie ihn bei Änderungen
an Workflow-Namen, Auslösern, Eingaben oder betrieblichen Freigabeschranken; halten Sie
die Bereitstellungsfreigabe getrennt von der PR-Freigabe.

<a id="terraform-conventions"></a>
### Terraform-Konventionen

Befolgen Sie neben den folgenden bestehenden Modulkonventionen den vollständigen
[Terraform-Stilleitfaden](docs/terraform-style.de.md).

**Terraform-Struktur.** Jedes Modul hält seinen `terraform`-Block in `terraform.tf`, seine Variablen in `variables.tf` und seine Ausgaben in `outputs.tf`. Ressourcendateien erhalten ein numerisches Präfix, wenn die Lesereihenfolge wichtig ist; jede Ressourcengruppe wird durch einen eingerahmten Abschnittskopf eingeleitet.

**Provider-Versionen.** Das Root-Modul in `src/terraform.tf` legt jeden Provider auf eine exakte Version fest. Child-Module unter `src/modules/` deklarieren nur eine Mindestversion mit `>=`. Fügen Sie niemals eine Obergrenze in einem Child-Modul hinzu; diese blockiert unbemerkt ein Upgrade im Root-Modul.

**Benennung.** `snake_case` für alle Blockbezeichnungen, Variablen, Ausgaben und lokalen Werte. Ressourcennamen wiederholen den Ressourcentyp nicht.

**Variablen und Ausgaben.** Jede Variable benötigt `type` und `description`. Jede Ausgabe benötigt `description` vor `value`.

**Kommentare.** Ein Kommentar erklärt eine Einschränkung, die der Code nicht zeigen kann, etwa einen Provider-Fehler oder eine Besonderheit der OPNsense-API. Beschreibungen der Funktionsweise des Codes oder des Architekturzusammenhangs gehören in [docs/architecture.md](docs/architecture.de.md).

**Dokumentation.** Modul-READMEs werden generiert. Bearbeiten Sie den Block zwischen den Markern `BEGIN_TF_DOCS` und `END_TF_DOCS` nicht von Hand; führen Sie stattdessen den pre-commit-Hook aus.

**Beispielkonfiguration.** Die tfvars-Dateien in `src/config/` dienen als Dokumentation. Belassen Sie Platzhalterwerte wie `owner@example.com` und eine Null-UUID für die Organisation. Committen Sie niemals eine Kennung aus einer echten Umgebung.

<a id="bilingual-documentation"></a>
### Zweisprachige Dokumentation

Englische `.md`-Dateien sind maßgeblich; Dokumentation für Menschen erhält
vollständige deutsche `.de.md`-Pendants, keine Zusammenfassungen. Setzen Sie die
wechselseitige Navigation `[English](name.md) | [Deutsch](name.de.md)` unmittelbar
nach jede H1 und aktualisieren Sie bei Prosaänderungen beide Sprachen. Bewahren Sie
Befehle, Beispiele, exakte Werte und bestehende Überschriftenanker.

Lassen Sie generatorverwaltete Verträge unverändert: Erzeugen Sie die englische
Referenz mit den bestehenden Werkzeugen neu und übernehmen Sie ihre technischen
Blöcke wortgetreu in das deutsche Pendant, mit einer deutschen Einleitung samt
Link zur maßgeblichen Referenz. Maschinell eingelesene Assistant-Themen bleiben
unverändert auf Englisch; verzeichnen Sie ihre separaten deutschen Übersetzungen
für Menschen in der Assistant-Wissens-README, statt die eingelesenen Themen zu ändern.

<a id="commits-and-pull-requests"></a>
## Commits und Pull Requests

Commit-Nachrichten folgen [Conventional Commits](https://www.conventionalcommits.org/), mit dem Modul als optionalem Scope:

```
feat(connectivity): add active/passive CARP support
fix(audit-logs): add HTTPS scheme to URLs
docs: clarify firewall bootstrap steps
```

Öffnen Sie den Pull Request gegen `main`. Beschreiben Sie, was sich für Nutzer der Landing Zone ändert, und geben Sie an, mit welcher Variante Sie getestet haben. CI führt Formatierung, Validierung, TFLint und die Testsuiten aus; alle müssen vor der Prüfung erfolgreich sein.
16 changes: 16 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Contributing

[English](CONTRIBUTING.md) | [Deutsch](CONTRIBUTING.de.md)

Thanks for taking the time to contribute. This document describes the local setup, the conventions this repository follows, and what a pull request is expected to contain.

## Local setup
Expand Down Expand Up @@ -120,6 +122,20 @@ existing module conventions below.

**Example configuration.** The tfvars files in `src/config/` are documentation. Keep them on placeholder values such as `owner@example.com` and a zero UUID for the organization. Never commit an identifier from a real environment.

### Bilingual documentation

English `.md` files are canonical; human-facing documentation has complete German
`.de.md` peers, not summaries. Put reciprocal `[English](name.md) | [Deutsch](name.de.md)`
navigation immediately after each H1 and update both languages whenever prose
changes. Preserve commands, examples, exact values and existing heading anchors.

Keep generator-owned contracts unchanged: regenerate the English reference with
the existing tooling and copy its technical blocks verbatim into the German peer,
with a German introduction linking the canonical reference. Machine-ingested
Assistant topics remain unchanged in English; index their separate human-readable
German translations in the Assistant knowledge README rather than changing the
ingested topics.

## Commits and pull requests

Commit messages follow [Conventional Commits](https://www.conventionalcommits.org/), with the module as the optional scope:
Expand Down
45 changes: 45 additions & 0 deletions README.de.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<div align="center">
<br>
<img src=".github/images/stackit-logo.svg" alt="STACKIT logo" width="50%"/>
<br>
<br>
</div>

# Landing Zone Accelerator

[English](README.md) | [Deutsch](README.de.md)

[![Terraform](https://img.shields.io/badge/Terraform-1.15+-623CE4?logo=terraform&logoColor=white)](https://www.terraform.io/)
[![OpenTofu](https://img.shields.io/badge/OpenTofu-1.12+-FFDA18?logo=opentofu&logoColor=black)](https://opentofu.org/)
[![STACKIT](https://img.shields.io/badge/STACKIT-Cloud-004E5A)](https://www.stackit.de/)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)

Der STACKIT Landing Zone Accelerator bietet ein umfassendes Terraform-basiertes Framework für die Bereitstellung sicherer, skalierbarer und durchdacht aufgebauter Cloud-Umgebungen auf STACKIT. Auf Basis bewährter Unternehmenspraktiken können Teams damit schnell Grundlagen für Governance, Netzwerke und Sicherheit schaffen.

Der Accelerator bleibt mit Terraform/OpenTofu unabhängig nutzbar. Der
Configurator ist ein optionales Werkzeug, keine erforderliche API, Template-Engine
oder Zustandsverwaltung. Für getrennte Platform- und Application-Phasen siehe den
[unabhängigen CLI-Ablauf](src/application/README.de.md#independent-two-phase-cli-workflow).
Die Plattform exportiert geprüfte, nicht geheime Referenzen; Application-Eingaben
können manuell ausgefüllt werden und verwenden ein separates Backend mit eigenem State.

<a id="-documentation"></a>
## 📚 Dokumentation

- [Erste Schritte](docs/getting-started.de.md)
- [Architektur/Module](docs/architecture.de.md)
- [Landing Zone Configurator](landing-zone-configurator/README.de.md)
- [Configurator-Architektur](landing-zone-configurator/docs/architecture.de.md)
- [Configurator-Benutzerhandbuch](landing-zone-configurator/docs/user-guide.de.md)
- [Configurator-Entwicklung](landing-zone-configurator/docs/development.de.md)
- [GitHub-Actions-Workflows](docs/workflows.de.md) – alle Pipelines, automatische/manuelle Auslöser, Startanleitungen für die Oberfläche, Eingaben und Auswirkungen auf Bereitstellungen

<a id="-contributing"></a>
## 🤝 Mitwirken

Beiträge sind willkommen. [CONTRIBUTING.md](CONTRIBUTING.de.md) beschreibt die lokale Einrichtung, die Konventionen dieses Repositorys und den erwarteten Inhalt eines Pull Requests.

<a id="-license"></a>
## 📄 Lizenz

Dieses Projekt ist unter der Apache 2.0 License lizenziert – Einzelheiten stehen in [LICENSE](LICENSE).
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

# Landing Zone Accelerator

[English](README.md) | [Deutsch](README.de.md)

[![Terraform](https://img.shields.io/badge/Terraform-1.15+-623CE4?logo=terraform&logoColor=white)](https://www.terraform.io/)
[![OpenTofu](https://img.shields.io/badge/OpenTofu-1.12+-FFDA18?logo=opentofu&logoColor=black)](https://opentofu.org/)
[![STACKIT](https://img.shields.io/badge/STACKIT-Cloud-004E5A)](https://www.stackit.de/)
Expand Down
Loading
Loading