Estudos / S18
Que protexen as versións inmutables nos fluxos de traballo de GitHub Actions
Que protexen as versións inmutables de GitHub nos fluxos de traballo de Actions dos repositorios populares?
Resumo
Desde o 2025-10-28, unha versión (release) de GitHub pode publicarse como inmutable: a súa etiqueta de Git xa non se pode mover nin eliminar. A documentación de GitHub tamén lles indica aos autores de accións que unha etiqueta que queiran seguir actualizando, como a etiqueta de versión principal v1, non debe vincularse a unha versión, e suxírelles «recommend that your users specify a major version» (que lles recomenden aos seus usuarios especificar unha versión principal). Un fluxo de traballo que escribe uses: owner/action@v1 segue ese uso documentado e previsto, e as versións inmutables non o protexen. Medimos o que protexe o mecanismo na práctica o 2026-10-03, só a través da API de GitHub:
- A: os 1000 repositorios con máis estrelas entre os repositorios públicos que non son bifurcacións (forks) nin están arquivados e que recibiron algún push nos últimos 90 días (limiar: 29.565 estrelas);
- B: 500 repositorios extraídos ao chou (semente 20261003) dos 20.553 repositorios dese tipo que teñen entre 1000 e 5000 estrelas.
Os fluxos de traballo da súa rama predeterminada conteñen 58.690 referencias uses: remotas en A e 10.472 en B. Cada unha clasificouse como fixada por SHA de commit, pola etiqueta dunha versión inmutable, por unha etiqueta mutable ou por unha rama.
Onde o autor xa publica versións inmutables, case ningunha referencia está protexida. Das referencias por etiqueta a accións cuxa última versión é inmutable, 312 de 6898 (4,5 %) apuntan a unha etiqueta protexida en A (intervalo do 95 %: 2,8–7,1 %, bootstrap por repositorios), e 76 de 1564 (4,9 %) en B. As protexidas están concentradas: un só repositorio reúne 68 das 312, e ao excluír calquera repositorio individual obtense un 3,6–4,6 %. Case todas as demais son etiquetas de versión principal como @v7. En 3238 de 6586 (49,2 %) das referencias non protexidas de A (intervalo 43,2–56,0 %), unha etiqueta de versión inmutable xa apunta ao mesmo commit, así que cambiar a ela non alteraría o código que se executa.
Accións máis usadas. 28 de 50 (56,0 %) dos repositorios de accións que máis repositorios de A usan publican a súa última versión como inmutable. Accións propias de GitHub: 12 de 28 (42,9 %) en actions/* (si: setup-node, setup-python, setup-go, setup-java; non: checkout, cache, upload-artifact, download-artifact, github-script) e 3 de 6 (50,0 %) en github/*.
A fixación por SHA é a que achega a protección, nunha minoría de repositorios. En conxunto, 32.978 de 58.690 (56,2 %) referencias remotas de A están fixadas por SHA (intervalo 50,7–61,7 %), e 4812 de 10.472 (46,0 %) en B (intervalo 29,0–60,1 %; 37,7 % sen o seu repositorio máis grande, open-telemetry/opentelemetry-python, que reúne 1392 referencias). O repositorio típico fixa poucas: a mediana por repositorio da proporción fixada por SHA é do 5,0 % en A e do 0,0 % en B. Todas as referencias remotas escritas nos ficheiros de fluxo de traballo están fixadas por SHA como máximo en 263 de 891 (29,5 %) repositorios de A, e en 174 de 891 (19,5 %) se se descartan os 89 que ademais chaman a accións locais que non lemos; en B, como máximo en 65 de 398 (16,3 %), ou en 55 de 398 (13,8 %). Etiquetas inmutables: 0,6 % das referencias en A e 0,8 % en B.
O bloqueo de dependencias a nivel de fluxo de traballo (workflow-level dependency locking), anunciado o 2026-03-26 con «Public preview 3-6 months» (vista previa pública en 3-6 meses), aínda non se lanzara o 2026-10-03: os seus elementos da folla de ruta seguen abertos, e non o documenta ningunha entrada do rexistro de cambios nin a referencia de sintaxe dos fluxos de traballo. Estas cifras describen a situación anterior ao seu lanzamento.
Traballos previos. datosh/pinned-actions segue a fixación por SHA nos 10.000 repositorios con máis estrelas («only 7%» [só un 7 %] fixa todas as súas referencias, abril de 2026; 506 de 6290 repositorios que usan Actions, o 8,0 %, no seu arquivo) e en abril de 2026 engadiu unha comprobación da inmutabilidade da última versión; joshjohanning/ensure-immutable-actions (desde 2025-11) comproba se as referencias dos fluxos de traballo usan versións inmutables. Varios artigos mediron en 2022 unha fixación por SHA do 1–2 % das referencias; NDSS 2026 atopou un 16,2 % de repositorios que referencian todas as accións de terceiros por SHA ou por unha etiqueta dun creador verificado. O noso 29,5 % difire do 8,0 % de datosh sobre todo pola poboación (os 1000 primeiros con actividade recente, non os 10.000 primeiros) e pola data; as 1000 primeiras entradas do propio datosh dan 100 de 781 (12,8 %). Ata onde puidemos atopar, H1 (cantas referencias por etiqueta quedan protexidas polas versións inmutables) e o 49,2 % cunha etiqueta inmutable no mesmo commit non se mediran. Artigo e fontes: https://easybyte.es/lab/studies/s18/paper/.
Automatización e revisión. Axentes de IA realizaron o estudo e redactaron o texto. Un revisor de IA independente comprobou o traballo; as súas observacións aplicáronse (METHOD.md, apartado Deviations).
Conflito de intereses. EasyByte desenvolve attest-lint e podería publicar scripts/uses_check.py, o clasificador usado aquí, como ferramenta gratuíta. A diferenza de ensure-immutable-actions, que suxire fixacións por SHA, para cada etiqueta desprazable indica a etiqueta de versión inmutable que apunta ao mesmo commit.
Citar este estudo
EasyxLab (2026). What immutable releases protect in GitHub Actions workflows. Study S18. EasyByte Hub S. Coop. Mad. https://github.com/easybytehub/easyxlab/tree/main/studies/s18-actions-immutable-releases@techreport{easyxlab_s18,
title = {What immutable releases protect in GitHub Actions workflows},
author = {{EasyxLab}},
institution = {EasyByte Hub S. Coop. Mad.},
number = {S18},
year = {2026},
url = {https://github.com/easybytehub/easyxlab/tree/main/studies/s18-actions-immutable-releases}
}