Contributing Guide¶
Dieser Guide beschreibt den Workflow, die Standards und Prozesse für Code-, Dokumentations- und Fix-Beitraege zu TCM365.
Erste Schritte¶
Voraussetzungen¶
- Den Entwicklungs-Guide lesen und die lokale Entwicklungsumgebung einrichten
- Sich mit den Code-Konventionen vertraut machen
- Den Testing Guide lesen
Entwicklungs-Workflow¶
TCM365 folgt einem Standard Fork-and-Branch Workflow:
1. Repository forken (oder Feature Branch von main erstellen)
2. Feature Branch erstellen
3. Änderungen vornehmen
4. Tests schreiben
5. Commit mit Conventional Commits
6. Push und Pull Request erstellen
7. Review-Feedback adressieren
8. Nach Approval mergen
Branch-Benennung¶
Verwenden Sie beschreibende Branch-Namen mit einem Typ-Präfix:
| Präfix | Zweck | Beispiel |
|---|---|---|
feat/ |
Neues Feature | feat/bulk-snapshot-delete |
fix/ |
Bugfix | fix/drift-severity-calculation |
refactor/ |
Code-Verbesserung | refactor/vendor-adapter-types |
docs/ |
Dokumentationsaenderungen | docs/api-reference-update |
test/ |
Test-Ergaenzungen oder -Fixes | test/cross-tenant-isolation |
chore/ |
Tooling, Dependencies, Config | chore/upgrade-nestjs-10.3 |
Commit-Nachrichten¶
Conventional Commits (Pflicht)¶
Alle Commits müssen der Conventional Commits Spezifikation folgen. Dies wird durch Projektrichtlinien erzwungen und für automatische Changelog-Generierung und Semantic Versioning verwendet.
Format¶
Types¶
| Type | SemVer Auswirkung | Beschreibung |
|---|---|---|
feat |
MINOR | Neues Feature oder Funktionalität |
fix |
PATCH | Bugfix |
docs |
keine | Nur Dokumentation |
test |
keine | Tests hinzufügen oder aktualisieren |
refactor |
keine | Code-Restrukturierung ohne Verhaltensänderung |
perf |
keine | Performance-Verbesserung |
chore |
keine | Dependencies, Config, Tooling |
Breaking Changes¶
Haengen Sie ! nach dem Type an um einen Breaking Change zu signalisieren:
feat!: redesign tenant API response format
BREAKING CHANGE: Tenant API responses now use camelCase instead of snake_case.
All API consumers must update their response parsing logic.
Beispiele¶
# Feature mit Scope
git commit -m "feat(snapshots): add bulk delete endpoint
Adds POST /api/v1/snapshots/bulk-delete for deleting multiple snapshots
in a single request. Includes validation for snapshot ownership."
# Bugfix
git commit -m "fix(drift): correct severity calculation for Zscaler resources"
# Dokumentation
git commit -m "docs(api): update endpoint reference for v2.5.0"
# Test-Ergänzung
git commit -m "test(baselines): add compliance engine unit tests for MITRE mapping"
# Chore
git commit -m "chore(deps): upgrade TypeORM to 0.3.20"
Pull Request Prozess¶
Pull Request erstellen¶
- Branch pushen zum Remote Repository
- Pull Request öffnen gegen den
mainBranch - PR Template ausfüllen mit:
- Zusammenfassung der Änderungen
- Zugehoeriges Issue oder Jira Ticket (falls zutreffend)
- Durchgefuehrte Tests
- Screenshots (für UI-Änderungen)
PR Titel Format¶
Folgen Sie dem gleichen Conventional Commits Format für PR Titel:
feat(snapshots): add bulk delete endpoint
fix(drift): correct severity calculation for Zscaler
docs(api): update endpoint reference
Code Review Checkliste¶
Reviewer verifizieren:
- Conventional Commits -- Alle Commit-Nachrichten folgen der Spezifikation
- Code Style -- Besteht
npm run lintundnpm run format - TypeScript Strict -- Keine
anyTypen, korrekte Null-Behandlung - Tests -- Neuer/geänderter Code hat zugehörige Tests
- Tests bestehen -- Alle bestehenden Tests bestehen (
npm test) - NestJS Patterns -- Korrekte Verwendung von Modulen, Services, Guards, DTOs
- Swagger Decorators -- Neue Endpoints haben
@ApiOperation,@ApiResponse - DTO Validation -- Input DTOs verwenden
class-validatorDecorators - Tenant-Isolation -- Tenant-bezogene Features verwenden
TenantAccessService - Migrationen -- Neue Entities beinhalten TypeORM Migrationen
- Keine Secrets -- Keine Credentials, API Keys oder Secrets im Code
- Dokumentation -- Komplexe Features beinhalten Inline-Dokumentation
Review-Antwort¶
- Alle Review-Kommentare adressieren
- Fixes als neue Commits pushen (kein Force-Push während der Review)
- Review erneut anfordern wenn alles Feedback adressiert ist
Versionierung¶
Semantic Versioning¶
TCM365 folgt Semantic Versioning (SemVer):
| Versionsteil | Wann inkrementieren | Beispiel |
|---|---|---|
| MAJOR | Breaking API oder Verhaltensänderung | 1.0.0 -> 2.0.0 |
| MINOR | Neues Feature (rückwärtskompatibel) | 2.0.0 -> 2.1.0 |
| PATCH | Bugfix (rückwärtskompatibel) | 2.1.0 -> 2.1.1 |
Single Source of Truth¶
Die VERSION Datei im Projekt-Root ist die einzige Wahrheitsquelle für die aktuelle Version:
Weitere Versionsreferenzen (backend-js/package.json, frontend/package.json, CHANGELOG.md) werden atomar durch den Release-Prozess aktualisiert.
Versionen niemals manuell bearbeiten
Bearbeiten Sie package.json Versionsfelder nicht direkt. Verwenden Sie den /release Befehl, um alle Versionsreferenzen atomar zu aktualisieren und Konsistenz sicherzustellen.
Release Workflow¶
| Befehl | Auswirkung | Versionsaenderung |
|---|---|---|
/release patch |
Bugfix Release | 2.5.0 -> 2.5.1 |
/release minor |
Feature Release | 2.5.0 -> 2.6.0 |
/release major |
Breaking Change Release | 2.5.0 -> 3.0.0 |
/release --dry-run |
Vorschau ohne Änderungen | (keine) |
Der Release-Prozess:
- Aktualisiert die
VERSIONDatei - Aktualisiert
backend-js/package.jsonundfrontend/package.json - Aktualisiert
CHANGELOG.mdmit kategorisierten Änderungen seit dem letzten Release - Erstellt einen Git Tag (
v2.6.0) - Erstellt eine Jira Fix Version (falls Jira Integration konfiguriert)
Entwicklungsrichtlinien¶
Empfohlen¶
- Bestehende Patterns und Konventionen in der Codebasis befolgen
- Tests für neue Features und Bugfixes schreiben
- TypeORM Repositories für Datenbankzugriff verwenden
ConfigServicefür Umgebungskonfiguration verwenden- Path Aliases verwenden (
@entities/,@common/, etc.) - Swagger Decorators an neuen Endpoints hinzufügen
- Inputs mit
class-validatorDTOs validieren TenantAccessServicefür tenant-bezogenen Datenzugriff verwendennpm testundnpm run lintvor dem Commit ausführen
Vermeiden¶
process.envdirekt verwenden (stattdessenConfigService)- Rohe SQL Queries schreiben (stattdessen TypeORM Repositories)
- Secrets, API Keys oder Credentials committen
- Tests für kritische Features ueberspringen
- Bestehende Migrationsdateien ändern
anyTypen in TypeScript verwenden (Strict Mode erzwungen)- Force-Push auf geteilte Branches während der Review
- Neue Tabellen für neue Vendors erstellen (stattdessen STI mit
VendorTenant)
Probleme melden¶
Bug Reports¶
Folgende Informationen einschliessen:
- TCM365 Version (
VERSIONDatei oder Footer prüfen) - Schritte zur Reproduktion des Problems
- Erwartetes Verhalten vs. tatsaechliches Verhalten
- Umgebung (OS, Node.js Version, Browser)
- Relevante Logs (Backend Structured Logs, Browser Console)
- Screenshots (für UI-Probleme)
Feature Requests¶
Beschreiben Sie:
- Use Case -- Welches Problem löst dies?
- Vorgeschlagene Lösung -- Wie sollte es funktionieren?
- Betrachtete Alternativen -- Welche anderen Ansaetze existieren?
- Auswirkung -- Welche Module oder Features sind betroffen?
Hilfe erhalten¶
- Dokumentation: Beginnen Sie mit diesem Entwicklungs-Guide und dem
CLAUDE.md - Swagger UI: API unter
http://localhost:8000/api/docserkunden - Diagnostics: Systemgesundheit unter
GET /api/v1/diagnosticsprüfen - Team: Das Entwicklungsteam für Architekturfragen kontaktieren