Ir al contenido

CI/CD y Gobernanza

El repositorio utiliza cuatro flujos de trabajo de GitHub Actions y un sistema de plantillas centralizado para la gobernanza.

Flujo de trabajoArchivoDisparadorPropósito
GitHub Pages Deploygithub-pages-deploy.ymlPush a main (docs/**), despacho manualConstruye y despliega el sitio de documentación en GitHub Pages
Build and Publish Docker Imagebuild-image.ymlPush a main (docker/**, package*.json), cron diario, repository_dispatchConstruye la imagen Docker, la publica en GHCR y despacha reconstrucciones a los repositorios dependientes
Require Linked Issuerequire-linked-issue.ymlEventos de pull requestBloquea los PRs que no referencian un issue de GitHub
Enforce Repository Settingsenforce-repo-settings.ymlCada 6 horas, push a la configuración de ajustes, despacho manualAplica la configuración estandarizada del repositorio desde la plantilla
on:
push:
branches: [main]
paths:
- 'docs/**'
workflow_dispatch:

Delega a un flujo de trabajo reutilizable en el repositorio de plantilla:

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

Permisos: contents: read, packages: read, pages: write, id-token: write. Utiliza el grupo de concurrencia pages con cancel-in-progress: true para evitar despliegues obsoletos.

Solo se activa en push cuando cambian archivos bajo docs/. También puede activarse manualmente mediante workflow_dispatch, que es como el trabajo de despacho en build-image.yml activa las reconstrucciones de los repositorios dependientes.

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

Pasos:

  1. Checkout del código
  2. Inicio de sesión en ghcr.io usando docker/login-action
  3. Construcción y publicación usando docker/build-push-action con contexto . y archivo docker/Dockerfile
  4. Etiquetas: ghcr.io/<owner>/<repo>:latest y ghcr.io/<owner>/<repo>:<sha>

Después de una construcción exitosa, el trabajo de despacho activa github-pages-deploy.yml mediante workflow_dispatch en cada repositorio dependiente listado en la configuración downstream-repos.json del repositorio de plantilla. Esto asegura que todos los repositorios de contenido reconstruyan su documentación con la imagen del constructor actualizada.

El cron diario asegura que la imagen se mantenga actualizada incluso sin cambios en el código (recoge actualizaciones de dependencias). El evento repository_dispatch permite que sistemas externos activen una reconstrucción.

Solo se activa en push cuando cambian archivos en docker/ o package*.json. Los cambios exclusivos de documentación no activan una reconstrucción de imagen.

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

Utiliza nearform-actions/github-action-check-linked-issues@v1 para exigir que cada PR referencie un issue de GitHub (p. ej., Closes #42 en la descripción). Los PRs de Dependabot se excluyen mediante:

exclude-branches: "dependabot/**"

Un mensaje personalizado indica a los colaboradores el formato esperado si la verificación falla. Consulte CONTRIBUTING.md para el flujo de trabajo completo del colaborador.

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

Delega a un flujo de trabajo reutilizable en el repositorio de plantilla:

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

Se ejecuta cada 6 horas y ante cambios en el archivo de configuración de ajustes. Aplica reglas de protección de ramas, configuración de fusión y otras configuraciones del repositorio desde .github/config/repo-settings.json.

El repositorio f5-sales-demo/docs-control es la fuente única de verdad para:

  • Definiciones de flujos de trabajo reutilizables (despliegue de documentación, aplicación de configuración del repositorio)
  • Archivos gestionados sincronizados en todos los repositorios de la organización
  • Configuraciones estándar y reglas de protección de ramas

Este constructor y todos los repositorios de contenido heredan su comportamiento de CI/CD de la plantilla.

El repositorio de plantilla puede enviar archivos gestionados (como definiciones de flujos de trabajo y archivos de configuración) a los repositorios dependientes. Esto mantiene todos los repositorios alineados sin actualizaciones manuales. La sincronización se ejecuta mediante un flujo de trabajo separado en el repositorio de plantilla.

El flujo de trabajo enforce-repo-settings aplica reglas de protección de ramas desde la plantilla, incluyendo:

  • Verificaciones de estado requeridas antes de la fusión
  • Verificación de issue vinculado requerida
  • Fusión squash preferida
  • Eliminación automática de ramas head después de la fusión
SecretoOrigenPropósito
GITHUB_TOKENAutomático (GitHub)Utilizado por la mayoría de los flujos de trabajo para checkout, publicación de paquetes y llamadas a la API
REPO_ADMIN_TOKENManual (secreto del repositorio)Requerido por enforce-repo-settings y el trabajo de despacho para modificar la protección de ramas, configuración del repositorio y activar flujos de trabajo en repositorios dependientes (necesita alcance de administrador)