Todos los artículos

La etiqueta revisada no es el código que corre: lockfiles en Actions

GitHub · 4 min de lectura ·

Revisas un pull request que añade uses: some-org/deploy-action@v4 a un workflow. La acción parece correcta, la apruebas y se ejecuta. Un mes después el mismo workflow vuelve a correr, sigue apuntando a v4 y ejecuta código que nadie de tu equipo ha leído. En tu repositorio no cambió nada. Lo que se movió fue la etiqueta. El 14 de octubre de 2026 GitHub lanzó en vista previa pública los lockfiles de workflow para cerrar justo ese hueco, y están disponibles en los planes Free y Team además de Enterprise Cloud.

día de la revisión día de la ejecución etiqueta v4 commit A lo leíste tú etiqueta v4 commit B nadie lo leyó el mismo archivo de workflow tu repositorio no cambió, la etiqueta sí
Una etiqueta es un puntero que controla otra persona. Tu revisión aprobó aquello a lo que apuntaba ese día.

Por qué un workflow revisado no es una ejecución revisada

Las etiquetas y las ramas se pueden mover después de revisar un workflow. GitHub describe el riesgo sin rodeos: si una acción está comprometida, una etiqueta o rama movida puede meter código malicioso en tus ejecuciones sin ningún cambio en tu repositorio. El historial de diffs sigue limpio, la protección de rama nunca salta y el cambio solo existe en el repositorio de otra persona. Para un workflow que guarda una clave de despliegue o un token de registro, eso es lo único que importa.

Qué fija el lockfile

Según GitHub, el lockfile te deja mantener referencias legibles como @v4 en el workflow mientras Actions ejecuta los commits exactos que bloqueaste. Se genera con la extensión gh actions-lock de GitHub CLI, que escribe .github/workflows/actions.lock con commits revisables para tus acciones, sus dependencias transitivas y las dependencias de los workflows reutilizables que llamas. Si la etiqueta se mueve después, GitHub dice que la ejecución sigue usando el commit registrado.

el workflow dice uses ...@v4 actions.lock acción: commit A su dependencia: commit C se ejecutan A y C etiqueta v4 movida al commit B se ignora hasta que regeneres el lock
La referencia sigue siendo legible para las personas. El commit que se ejecuta es el que queda escrito en el lockfile.

En qué se diferencia de fijar SHA a mano

La solución manual de siempre, como práctica general, es escribir el SHA completo de 40 caracteres del commit en la línea uses:. Funciona, pero cuesta leerlo, es fácil olvidarse de actualizarlo y solo fija la acción que nombraste. Si esa acción es compuesta y llama a otras acciones por etiqueta, esas referencias internas siguen pudiendo moverse. El lockfile cubre esa capa transitiva. Y con Dependabot, según GitHub, una actualización de versión de una acción en un workflow ya incorporado regenera la entrada correspondiente del lockfile en el mismo pull request, de modo que el pin y la actualización se revisan juntos.

Adoptarlo sin un cambio de golpe

La extensión de GitHub permite incorporar los workflows de uno en uno. Una vez incorporado, un workflow tiene que tener entradas en el lockfile para sus dependencias, y sus ejecuciones usan los commits registrados. La misma extensión puede detectar un lockfile desactualizado sin modificar archivos, lo que encaja con un paso de CI que haga fallar el pull request cuando el lock se quede atrás. Los administradores a nivel de repositorio, organización o empresa también pueden activar la política "Require lockfile", igualmente en vista previa pública.

Un lockfile hace que el código que se ejecuta siga siendo el que revisaste. No hace que ese código sea seguro: lo dice la propia GitHub, así que revisa una acción antes de bloquearla.

Un primer paso práctico: elige el workflow de tu repositorio que guarda el secreto más delicado, normalmente el de despliegue, ejecuta gh actions-lock sobre él, lee los commits que registra y añade a la CI la comprobación de lockfile desactualizado. Luego pasa al siguiente workflow. GitHub agradece a Andrew Nesbitt, François Proulx, Jesse Houwing y William Woodruff su colaboración en la función. Fuente: GitHub Changelog, workflow lockfiles in public preview.

Notas de los lectores

  1. Todavía no hay notas. La primera siempre es la más valiente.
¿Estás construyendo algo parecido? Puedo ayudarte. Escríbeme por WhatsApp