Skip to content

Add dependencias fijas - #1

Closed
liamburja wants to merge 2 commits into
mainfrom
feat/67-cli-la-cli-debe-instalar-dependencias-con-versiones-fijas-no-con-latest
Closed

liamburja wants to merge 2 commits into
mainfrom
feat/67-cli-la-cli-debe-instalar-dependencias-con-versiones-fijas-no-con-latest

Conversation

@liamburja

@liamburja liamburja commented Oct 18, 2026 •

Copy link
Copy Markdown

Versiones fijas para los scanners y dependencias de la CLI

Contexto

Hasta la 1.1.0, la CLI instalaba Trivy y Syft ejecutando su install.sh desde la rama main, y Gitleaks desde releases/latest, sin verificar nada. Si una release upstream sale comprometida, entra directamente en todos los pipelines que ejecutan gops creport scan.

La 1.2.1 ya fijó versión y SHA-256 de cada archivo. Esta PR cierra lo que faltaba: verificar los binarios ya instalados, comprobar la firma de las releases, fijar dependencias y actions, y actualizar las versiones de forma controlada.

Cambios

Verificación de los scanners

  • tool-versions.ts guarda también el SHA-256 del binario de cada archivo (binarySha256). Las versiones no cambian (trivy 0.74.0, syft 1.52.0, gitleaks 8.30.1) y los hashes de los archivos son los mismos.
  • installs.ts verifica el binario extraído y, en cada uso, el que ya está en caché. Si no coincide (caché de CI o imagen Docker manipulada), avisa y lo reinstala desde una descarga verificada.

Firmas en tools:update

  • Antes de fiarse de checksums.txt, el script verifica con cosign su firma keyless de sigstore. Solo acepta la identidad del workflow de release oficial de cada proyecto.
    • Trivy: reusable-release.yaml@refs/tags/vX
    • Syft: release.yaml@refs/heads/main. Soporta tanto el bundle de sigstore como el formato .pem+.sig que usaba antes de la 1.54.0.
    • Gitleaks no publica firmas: solo se verifica contra checksums.txt y el digest de GitHub, y el script avisa.
  • Ahora hace falta cosign para ejecutar npm run tools:update.
  • Nuevo modo --latest: fija la última versión estable de cada herramienta con al menos 7 días.

Actualización semanal

  • Nuevo workflow Update scanners (lunes 06:00 UTC o manual). Ejecuta tools:update --latest y abre o actualiza una PR en chore/update-scanners con los enlaces a las release notes.

Ejecución de los scanners (scan.ts)

  • Trivy descarga su base de datos de vulnerabilidades desde los repositorios oficiales, pasados como flags. Así un trivy.yaml del repo escaneado no puede redirigirla. La base de datos se sigue actualizando en cada escaneo.
  • Desactivados el aviso de versiones y la telemetría de Trivy, y la comprobación de actualizaciones de Syft.

Dependencias y CI

  • Dependencias npm a versión exacta (commander 12.1.0, etc.) y .npmrc con save-exact=true. commander es la única dependencia que se instala en las máquinas de los usuarios, que no usan nuestro lockfile.
  • Actions fijadas por SHA, con la versión en un comentario (checkout, setup-node, cli-github-action, cosign-installer).
  • El job scan-action instala la CLI con version: 1.2.1. El default de la action es latest.
  • dependabot.yml para github-actions y npm, con cooldown de 7 días (la misma política que tools:update).

Pruebas

  • npm test (15/15) y tsc sin errores.
  • gops tools install desde cero: descarga y verifica los tres scanners.
  • Gitleaks manipulado en la caché: se detecta y se reinstala.
  • Cosign rechaza la firma de Trivy con una identidad distinta.
  • tools:update regenera el fichero actual sin cambios en los hashes de los archivos. Con --latest subiría trivy a 0.75.0 y syft a 1.54.1, con firmas verificadas (no incluido en esta PR).
  • Escaneo real de Trivy y Syft con los flags nuevos.
  • No probado: los workflows. Solo se pueden probar en GitHub.

Después de mergear

  1. Activar Settings → Actions → General → Allow GitHub Actions to create and approve pull requests. Sin esto, Update scanners no puede abrir la PR.
  2. Las PRs que abre el workflow no lanzan code-report, porque GitHub no ejecuta workflows en PRs creadas con su propio token. Si hace falta, se puede usar un token de GitHub App.
  3. Publicar una versión nueva de la CLI (por ejemplo, 1.2.2). Hasta entonces los usuarios no tienen la verificación del binario ni los flags nuevos.
  4. Marcar como obsoletas las versiones que instalan con latest:
    npm deprecate @getgitops/cli@"<1.2.1" "Instala los scanners sin versión fija. Actualiza a >=1.2.1"
  5. En getgitops/cli-github-action, cambiar el default del input version de latest a una versión fija.

Relacionado (PRs aparte en otros repos) FALTA POR HACER

  • gitops, gitops-base, gitops-platform: CLI fijada a @1.2.1, actions por SHA, bun-version: 1.4.3 y dependabot.yml.
  • gitops-web: install.sh instala una versión fija (se puede cambiar con GOPS_VERSION), y la documentación y el blog ya no usan latest.

🤖 Generated with Claude Code

@liamburja liamburja closed this Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant