Mueve los reusable workflows a .gitea/workflows/ (restriccion real de Gitea: workflow_call no puede vivir en una ruta arbitraria, confirmado en vivo). Corrige todos los 'uses:' cross-repo a URL absoluta (https://gitea.cruzcloud.net/...) -- la forma corta de GitHub se resuelve contra github.com en esta instancia, confirmado en vivo con un test real (reusable workflow + composite action ejecutando gitleaks de punta a punta). Limpia los archivos de prueba.
Arquetipo: sitio estático (nginx)
Cuándo usar este arquetipo: un sitio generado a HTML estático (MkDocs, Hugo, Astro, un build de Vite sin backend) servido por nginx, sin runtime de aplicación. Si tu app necesita ejecutar código en cada request, no es este arquetipo.
Qué asume de tu repo:
- Un
Dockerfileenapp_dirbasado en (o compatible con)dockerfiles/static-nginx.Dockerfile. cosign.pubcommiteado enapp_dir.- Un manifiesto K8s (
manifest_file, el Deployment) con la imagen a actualizar tras cada build.
Diferencia real con los otros 2 arquetipos: Gitleaks y Trivy IaC
escanean todo app_dir (no un único archivo) — un sitio estático suele
tener varios manifiestos K8s por separado (deployment/service/ingress)
en vez de uno solo con todo adentro.
Dónde vive el archivo real
Misma restricción de Gitea que los otros 2 arquetipos (ver
pipelines/archetype-nextjs-frontend/README.md para el detalle
completo). Archivo real:
.gitea/workflows/archetype-static-site.yaml
Cómo usarlo desde tu repo
jobs:
build:
uses: https://gitea.cruzcloud.net/devops/platform-templates/.gitea/workflows/archetype-static-site.yaml@main
with:
app_dir: sitio
image_name: gitea.cruzcloud.net/devops/mi-sitio
manifest_file: workloads/mi-sitio/deployment.yaml
secrets:
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
Mismas advertencias sobre uses: con URL absoluta y @main vs
tag/commit — ver el README del arquetipo de Next.js.
Semgrep: por qué este ruleset
p/python,p/security-audit — asume MkDocs (Python). Si tu generador es
Hugo/Astro (Go/JS), este ruleset no aplica realmente — ajustalo al
lenguaje real de tu build (o quitá el step si tu sitio no tiene ningún
código ejecutable propio, solo contenido).
docs-portal real todavía no usa nginx no-root
dockerfiles/static-nginx.Dockerfile corre nginx sin privilegios
(nginxinc/nginx-unprivileged) — mejora encontrada al armar este
template. El docs-portal real del lab todavía corre
nginx:1.27-alpine estándar (root), es un gap real, pendiente de
aplicar por separado (no forma parte de la migración de manifiestos de
esta tarea — cambiar la imagen es un cambio de app aparte).