Salta ai contenuti

CI/CD e Governance

Il repository utilizza quattro workflow di GitHub Actions e un sistema centralizzato di template per la governance.

WorkflowFileTriggerScopo
GitHub Pages Deploygithub-pages-deploy.ymlPush su main (docs/**), dispatch manualeCompila e distribuisce il sito di documentazione su GitHub Pages
Build and Publish Docker Imagebuild-image.ymlPush su main (docker/**, package*.json), cron giornaliero, repository_dispatchCompila l’immagine Docker, la pubblica su GHCR e invia dispatch di rebuild ai repository downstream
Require Linked Issuerequire-linked-issue.ymlEventi di pull requestBlocca le PR che non fanno riferimento a una issue di GitHub
Enforce Repository Settingsenforce-repo-settings.ymlOgni 6 ore, push sulla configurazione delle impostazioni, dispatch manualeApplica le impostazioni standardizzate del repository dal template
on:
push:
branches: [main]
paths:
- 'docs/**'
workflow_dispatch:

Delega a un workflow riutilizzabile nel repository template:

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

Permessi: contents: read, packages: read, pages: write, id-token: write. Utilizza il gruppo di concorrenza pages con cancel-in-progress: true per evitare distribuzioni obsolete.

Si attiva al push solo quando vengono modificati file nella directory docs/. Può anche essere attivato manualmente tramite workflow_dispatch, che è il modo in cui il job di dispatch in build-image.yml attiva le rebuild downstream.

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

Passaggi:

  1. Checkout del codice
  2. Login su ghcr.io tramite docker/login-action
  3. Build e push tramite docker/build-push-action con contesto . e file docker/Dockerfile
  4. Tag: ghcr.io/<owner>/<repo>:latest e ghcr.io/<owner>/<repo>:<sha>

Dopo una build riuscita, il job dispatch attiva github-pages-deploy.yml tramite workflow_dispatch su ogni repository downstream elencato nella configurazione downstream-repos.json del repository template. Questo garantisce che tutti i repository di contenuti ricompilino la loro documentazione con l’immagine builder aggiornata.

Il cron giornaliero garantisce che l’immagine rimanga aggiornata anche senza modifiche al codice (incorporando gli aggiornamenti delle dipendenze). L’evento repository_dispatch consente ai sistemi esterni di attivare una rebuild.

Si attiva al push solo quando vengono modificati i file in docker/ o package*.json. Le modifiche alla sola documentazione non attivano una rebuild dell’immagine.

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

Utilizza nearform-actions/github-action-check-linked-issues@v1 per imporre che ogni PR faccia riferimento a una issue di GitHub (ad esempio, Closes #42 nella descrizione). Le PR di Dependabot sono escluse tramite:

exclude-branches: "dependabot/**"

Un messaggio personalizzato informa i contributori del formato atteso nel caso in cui il controllo fallisca. Consultare CONTRIBUTING.md per il flusso di lavoro completo dei contributori.

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

Delega a un workflow riutilizzabile nel repository template:

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

Viene eseguito ogni 6 ore e in caso di modifiche al file di configurazione delle impostazioni. Applica le regole di protezione dei branch, le impostazioni di merge e altre configurazioni del repository da .github/config/repo-settings.json.

Il repository f5-sales-demo/docs-control è l’unica fonte di verità per:

  • Definizioni di workflow riutilizzabili (deploy della documentazione, applicazione delle impostazioni del repository)
  • File gestiti sincronizzati tra tutti i repository dell’organizzazione
  • Configurazioni standard e regole di protezione dei branch

Questo builder e tutti i repository di contenuti ereditano il loro comportamento CI/CD dal template.

Il repository template può pubblicare file gestiti (come definizioni di workflow e file di configurazione) verso i repository downstream. Questo mantiene tutti i repository allineati senza aggiornamenti manuali. La sincronizzazione viene eseguita tramite un workflow separato nel repository template.

Il workflow enforce-repo-settings applica le regole di protezione dei branch dal template, tra cui:

  • Controlli di stato obbligatori prima del merge
  • Controllo di issue collegata obbligatorio
  • Squash merge preferito
  • Eliminazione automatica dei branch head dopo il merge
SegretoOrigineScopo
GITHUB_TOKENAutomatico (GitHub)Utilizzato dalla maggior parte dei workflow per checkout, pubblicazione di pacchetti e chiamate API
REPO_ADMIN_TOKENManuale (segreto del repository)Richiesto da enforce-repo-settings e dal job di dispatch per modificare la protezione dei branch, le impostazioni del repository e attivare i workflow downstream (richiede scope admin)