Aller au contenu

CI/CD et gouvernance

Le dépôt utilise quatre workflows GitHub Actions et un système de modèles centralisé pour la gouvernance.

WorkflowFichierDéclencheurObjectif
GitHub Pages Deploygithub-pages-deploy.ymlPush sur main (docs/**), déclenchement manuelCompile et déploie le site de documentation sur GitHub Pages
Build and Publish Docker Imagebuild-image.ymlPush sur main (docker/**, package*.json), cron quotidien, repository_dispatchCompile l’image Docker, la pousse vers GHCR et déclenche les reconstructions dans les dépôts en aval
Require Linked Issuerequire-linked-issue.ymlÉvénements de pull requestBloque les PRs qui ne référencent pas un ticket GitHub
Enforce Repository Settingsenforce-repo-settings.ymlToutes les 6 heures, push sur la configuration des paramètres, déclenchement manuelApplique les paramètres standardisés du dépôt depuis le modèle
on:
push:
branches: [main]
paths:
- 'docs/**'
workflow_dispatch:

Délègue à un workflow réutilisable dans le dépôt de modèles :

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

Permissions : contents: read, packages: read, pages: write, id-token: write. Utilise le groupe de concurrence pages avec cancel-in-progress: true pour éviter les déploiements obsolètes.

Ne se déclenche sur push que lorsque des fichiers sous docs/ changent. Peut également être déclenché manuellement via workflow_dispatch, qui est la méthode utilisée par la tâche de dispatch dans build-image.yml pour déclencher les reconstructions en aval.

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

Étapes :

  1. Checkout du code
  2. Connexion à ghcr.io en utilisant docker/login-action
  3. Compilation et push en utilisant docker/build-push-action avec le contexte . et le fichier docker/Dockerfile
  4. Tags : ghcr.io/<owner>/<repo>:latest et ghcr.io/<owner>/<repo>:<sha>

Après une compilation réussie, la tâche dispatch déclenche github-pages-deploy.yml via workflow_dispatch sur chaque dépôt en aval listé dans la configuration downstream-repos.json du dépôt de modèles. Cela garantit que tous les dépôts de contenu reconstruisent leur documentation avec l’image de compilation mise à jour.

Le cron quotidien garantit que l’image reste à jour même sans modification du code (intègre les mises à jour de dépendances). L’événement repository_dispatch permet aux systèmes externes de déclencher une reconstruction.

Ne se déclenche sur push que lorsque les fichiers de docker/ ou package*.json changent. Les modifications uniquement dans la documentation ne déclenchent pas de reconstruction d’image.

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

Utilise nearform-actions/github-action-check-linked-issues@v1 pour imposer que chaque PR référence un ticket GitHub (par ex., Closes #42 dans la description). Les PRs de Dependabot sont exclues via :

exclude-branches: "dependabot/**"

Un message personnalisé indique aux contributeurs le format attendu si la vérification échoue. Consultez CONTRIBUTING.md pour le workflow complet du contributeur.

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

Délègue à un workflow réutilisable dans le dépôt de modèles :

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

S’exécute toutes les 6 heures et lors des modifications du fichier de configuration des paramètres. Applique les règles de protection de branches, les paramètres de fusion et d’autres configurations du dépôt depuis .github/config/repo-settings.json.

Le dépôt f5-sales-demo/docs-control est la source unique de vérité pour :

  • Les définitions de workflows réutilisables (déploiement de documentation, application des paramètres du dépôt)
  • Les fichiers gérés synchronisés à travers tous les dépôts de l’organisation
  • Les configurations standard et les règles de protection de branches

Ce builder et tous les dépôts de contenu héritent leur comportement CI/CD du modèle.

Le dépôt de modèles peut pousser des fichiers gérés (comme les définitions de workflows et les fichiers de configuration) vers les dépôts en aval. Cela maintient tous les dépôts alignés sans mises à jour manuelles. La synchronisation s’exécute via un workflow séparé dans le dépôt de modèles.

Le workflow enforce-repo-settings applique les règles de protection de branches depuis le modèle, notamment :

  • Vérifications de statut requises avant la fusion
  • Vérification de ticket lié requise
  • Fusion par squash préférée
  • Suppression automatique des branches sources après la fusion
SecretSourceObjectif
GITHUB_TOKENAutomatique (GitHub)Utilisé par la plupart des workflows pour le checkout, la publication de packages et les appels API
REPO_ADMIN_TOKENManuel (secret du dépôt)Requis par enforce-repo-settings et la tâche de dispatch pour modifier la protection de branches, les paramètres du dépôt et déclencher les workflows en aval (nécessite la portée admin)