Zum Inhalt springen

CI/CD und Governance

Das Repository verwendet vier GitHub Actions Workflows und ein zentralisiertes Template-System für die Governance.

WorkflowDateiAuslöserZweck
GitHub Pages Deploygithub-pages-deploy.ymlPush auf main (docs/**), manueller DispatchErstellt und veröffentlicht die Dokumentationsseite auf GitHub Pages
Build and Publish Docker Imagebuild-image.ymlPush auf main (docker/**, package*.json), täglicher Cron, repository_dispatchErstellt das Docker-Image, pusht zu GHCR und löst Rebuilds in nachgelagerten Repos aus
Require Linked Issuerequire-linked-issue.ymlPull-Request-EventsBlockiert PRs, die kein GitHub Issue referenzieren
Enforce Repository Settingsenforce-repo-settings.ymlAlle 6 Stunden, Push auf Settings-Konfiguration, manueller DispatchWendet standardisierte Repository-Einstellungen aus dem Template an
on:
push:
branches: [main]
paths:
- 'docs/**'
workflow_dispatch:

Delegiert an einen wiederverwendbaren Workflow im Template-Repository:

jobs:
docs:
uses: f5-sales-demo/docs-control/.github/workflows/github-pages-deploy.yml@main

Berechtigungen: contents: read, packages: read, pages: write, id-token: write. Verwendet die Concurrency-Gruppe pages mit cancel-in-progress: true, um veraltete Deployments zu vermeiden.

Wird nur bei Push ausgelöst, wenn sich Dateien unter docs/ ändern. Kann auch manuell über workflow_dispatch ausgelöst werden – so löst der Dispatch-Job in build-image.yml nachgelagerte Rebuilds aus.

on:
push:
branches: [main]
paths:
- 'docker/**'
- 'package.json'
- 'package-lock.json'
schedule:
- cron: '0 6 * * *'
repository_dispatch:
types: [rebuild-image]

Schritte:

  1. Code auschecken
  2. Anmeldung bei ghcr.io mittels docker/login-action
  3. Build und Push mittels docker/build-push-action mit Kontext . und Datei docker/Dockerfile
  4. Tags: ghcr.io/<owner>/<repo>:latest und ghcr.io/<owner>/<repo>:<sha>

Nach einem erfolgreichen Build löst der Dispatch-Job github-pages-deploy.yml per workflow_dispatch in jedem nachgelagerten Repository aus, das in der downstream-repos.json-Konfiguration des Template-Repositories aufgeführt ist. Dadurch wird sichergestellt, dass alle Content-Repos ihre Dokumentation mit dem aktualisierten Builder-Image neu erstellen.

Der tägliche Cron stellt sicher, dass das Image auch ohne Code-Änderungen aktuell bleibt (erfasst Abhängigkeitsaktualisierungen). Das repository_dispatch-Event ermöglicht es externen Systemen, einen Rebuild auszulösen.

Wird nur bei Push ausgelöst, wenn sich docker/-Dateien oder package*.json ändern. Reine Dokumentationsänderungen lösen keinen Image-Rebuild aus.

on:
pull_request_target:
types: [opened, edited, reopened, synchronize]

Verwendet nearform-actions/github-action-check-linked-issues@v1, um sicherzustellen, dass jeder PR ein GitHub Issue referenziert (z. B. Closes #42 in der Beschreibung). Dependabot-PRs werden ausgeschlossen über:

exclude-branches: "dependabot/**"

Eine benutzerdefinierte Nachricht informiert Mitwirkende über das erwartete Format, wenn die Prüfung fehlschlägt. Siehe CONTRIBUTING.md für den vollständigen Contributor-Workflow.

on:
schedule:
- cron: '0 */6 * * *'
push:
branches: [main]
paths:
- '.github/config/repo-settings.json'
workflow_dispatch:

Delegiert an einen wiederverwendbaren Workflow im Template-Repository:

jobs:
enforce:
uses: f5-sales-demo/docs-control/.github/workflows/enforce-repo-settings.yml@main
secrets:
repo-admin-token: ${{ secrets.REPO_ADMIN_TOKEN }}

Läuft alle 6 Stunden und bei Änderungen an der Settings-Konfigurationsdatei. Wendet Branch-Schutzregeln, Merge-Einstellungen und andere Repository-Konfigurationen aus .github/config/repo-settings.json an.

Das Repository f5-sales-demo/docs-control ist die einzige Quelle der Wahrheit für:

  • Wiederverwendbare Workflow-Definitionen (Docs-Deploy, Repository-Settings-Durchsetzung)
  • Verwaltete Dateien, die über alle Repos in der Organisation synchronisiert werden
  • Standardkonfigurationen und Branch-Schutzregeln

Dieser Builder und alle Content-Repos erben ihr CI/CD-Verhalten vom Template.

Das Template-Repository kann verwaltete Dateien (wie Workflow-Definitionen und Konfigurationsdateien) an nachgelagerte Repos pushen. Dies hält alle Repositories ohne manuelle Aktualisierungen synchron. Die Synchronisierung läuft über einen separaten Workflow im Template-Repository.

Der Enforce-Repo-Settings-Workflow wendet Branch-Schutzregeln aus dem Template an, darunter:

  • Erforderliche Status-Checks vor dem Merge
  • Erforderliche Linked-Issue-Prüfung
  • Bevorzugter Squash-Merge
  • Automatisches Löschen von Head-Branches nach dem Merge
SecretQuelleZweck
GITHUB_TOKENAutomatisch (GitHub)Wird von den meisten Workflows für Checkout, Paketveröffentlichung und API-Aufrufe verwendet
REPO_ADMIN_TOKENManuell (Repository-Secret)Erforderlich für Enforce-Repo-Settings und den Dispatch-Job zum Ändern von Branch-Schutz, Repository-Einstellungen und zum Auslösen nachgelagerter Workflows (benötigt Admin-Berechtigung)