feat(ci): plantillas de CI/CD propias para repos Go #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "ci/plantillas-go"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Las plantillas actuales son multilenguaje y de diciembre de 2025. Para un
repo Go dejan cuatro huecos que impiden probar y publicar bien:
dependa de Postgres real: FOR UPDATE SKIP LOCKED, índices únicos parciales,
concurrencia. Tampoco corre lint.
escanear: si Trivy encuentra algo crítico, la imagen ya está en el registry.
tiene paso de migración.
historial; Trivy solo ve la imagen.
Se añaden cuatro workflows reutilizables específicos de Go, sin tocar los
existentes:
_go-test.yaml lint, unitarias con puerta de cobertura, componente
contra Postgres real y e2e con docker compose
_go-analytics.yaml govulncheck, gitleaks, Opengrep y SonarQube
_go-build.yaml buildx multi-arquitectura, escaneo previo a publicar,
SBOM y digest de salida
_go-deploy.yaml migración como Job que bloquea el rollout, varios
deployments por repo, despliegue por digest y rollback
Decisiones que vale la pena mirar en la revisión:
medir, quitando cmd/, generados, mocks y testdata. Un 90% que incluye el
cliente generado se sube escribiendo pruebas de lo que no importa.
el código donde una falla cuesta plata.
clonadas desde infra.
Cadena de suministro y manejo de secretos:
con la versión en un comentario al lado. Ninguna referencia móvil.
el primero con 'go install', que verifica contra la base de sumas de Go;
el segundo descargando y comprobando el sha256 publicado. El job del
deploy es el único que tiene el kubeconfig, y cuanto menos código ajeno
corra ahí, mejor.
falta, porque 'kubectl apply -k' ya trae kustomize incorporado.
ningún .netrc en el contexto de build, así que no hay archivo que una
acción de terceros pueda leer ni que termine horneado en la imagen.
entorno. Ninguna entrada se interpola dentro del YAML ni pasa por el
shell, así que un comando con comillas, $ o saltos de línea no inyecta.
Falta verificar contra el runner, no está probado: si admite contenedores
de servicio, si admite buildx con QEMU, y si el caché type=gha funciona o
hay que pasarlo a type=registry.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_012oVizRo2WB4FeZVRnHr9Ye
Las plantillas actuales son multilenguaje y de diciembre de 2025. Para un repo Go dejan cuatro huecos que impiden probar y publicar bien: - _test.yaml no levanta base de datos, así que no se puede probar nada que dependa de Postgres real: FOR UPDATE SKIP LOCKED, índices únicos parciales, concurrencia. Tampoco corre lint. - _build-docker.yaml construye una sola arquitectura, y publica antes de escanear: si Trivy encuentra algo crítico, la imagen ya está en el registry. - _deploy-k8s.yaml asume un deployment por servicio, namespaces fijos y no tiene paso de migración. - No hay govulncheck ni gitleaks, que es lo que mira el módulo Go y el historial; Trivy solo ve la imagen. Se añaden cuatro workflows reutilizables específicos de Go, sin tocar los existentes: _go-test.yaml lint, unitarias con puerta de cobertura, componente contra Postgres real y e2e con docker compose _go-analytics.yaml govulncheck, gitleaks, Opengrep y SonarQube _go-build.yaml buildx multi-arquitectura, escaneo previo a publicar, SBOM y digest de salida _go-deploy.yaml migración como Job que bloquea el rollout, varios deployments por repo, despliegue por digest y rollback Decisiones que vale la pena mirar en la revisión: - La cobertura se mide sobre el código propio: el perfil se filtra antes de medir, quitando cmd/, generados, mocks y testdata. Un 90% que incluye el cliente generado se sube escribiendo pruebas de lo que no importa. - package_threshold permite pisos por paquete más altos que el global, para el código donde una falla cuesta plata. - Componente y e2e vienen apagados: un repo Go simple pasa sin configurar. - El namespace del deploy es obligatorio y explícito, sin valor heredado. - Los overlays de kustomize viven en el repo, no como plantillas con sed clonadas desde infra. Cadena de suministro y manejo de secretos: - Todas las acciones de terceros quedan fijadas por SHA de 40 caracteres, con la versión en un comentario al lado. Ninguna referencia móvil. - golangci-lint y kubectl se instalan fijados en vez de usar acciones: el primero con 'go install', que verifica contra la base de sumas de Go; el segundo descargando y comprobando el sha256 publicado. El job del deploy es el único que tiene el kubeconfig, y cuanto menos código ajeno corra ahí, mejor. - Se elimina el 'curl | bash' de kustomize desde la rama master: no hacía falta, porque 'kubectl apply -k' ya trae kustomize incorporado. - El secreto de módulos privados va en línea a BuildKit: no se escribe ningún .netrc en el contexto de build, así que no hay archivo que una acción de terceros pueda leer ni que termine horneado en la imagen. - El manifiesto del Job de migración se arma en Python leyendo variables de entorno. Ninguna entrada se interpola dentro del YAML ni pasa por el shell, así que un comando con comillas, $ o saltos de línea no inyecta. - gitleaks y opengrep fijados por versión en vez de :latest. Falta verificar contra el runner, no está probado: si admite contenedores de servicio, si admite buildx con QEMU, y si el caché type=gha funciona o hay que pasarlo a type=registry. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012oVizRo2WB4FeZVRnHr9Ye