Estudis / S18
Què protegeixen les versions immutables en els fluxos de treball de GitHub Actions
Què protegeixen les versions immutables de GitHub en els fluxos de treball d'Actions dels repositoris populars?
Resum
Des del 2025-10-28, una versió (release) de GitHub es pot publicar com a immutable: la seva etiqueta de Git ja no es pot moure ni eliminar. La documentació de GitHub també indica als autors d'accions que una etiqueta que vulguin continuar actualitzant, com l'etiqueta de versió principal v1, no s'ha de vincular a una versió, i els suggereix «recommend that your users specify a major version» (que recomanin als seus usuaris especificar una versió principal). Un flux de treball que escriu uses: owner/action@v1 segueix aquest ús documentat i previst, i les versions immutables no el protegeixen. Vam mesurar què protegeix el mecanisme a la pràctica el 2026-10-03, només a través de l'API de GitHub:
- A: els 1.000 repositoris amb més estrelles d'entre els repositoris públics que no són bifurcacions (forks) ni estan arxivats i que han rebut algun push en els darrers 90 dies (llindar: 29.565 estrelles);
- B: 500 repositoris extrets a l'atzar (llavor 20261003) dels 20.553 repositoris d'aquest tipus que tenen entre 1.000 i 5.000 estrelles.
Els fluxos de treball de la seva branca per defecte contenen 58.690 referències uses: remotes a A i 10.472 a B. Cadascuna es va classificar com a fixada per SHA de commit, per l'etiqueta d'una versió immutable, per una etiqueta mutable o per una branca.
On l'autor ja publica versions immutables, gairebé cap referència no està protegida. De les referències per etiqueta a accions l'última versió de les quals és immutable, 312 de 6.898 (4,5 %) apunten a una etiqueta protegida a A (interval del 95 %: 2,8–7,1 %, bootstrap per repositoris), i 76 de 1.564 (4,9 %) a B. Les protegides estan concentrades: un sol repositori en té 68 de les 312, i si s'exclou qualsevol repositori individual s'obté un 3,6–4,6 %. Gairebé totes les altres són etiquetes de versió principal com @v7. En 3.238 de 6.586 (49,2 %) de les referències no protegides d'A (interval 43,2–56,0 %), una etiqueta de versió immutable ja apunta al mateix commit, de manera que canviar-hi no alteraria el codi que s'executa.
Accions més utilitzades. 28 de 50 (56,0 %) dels repositoris d'accions que fan servir més repositoris d'A publiquen la seva última versió com a immutable. Accions pròpies de GitHub: 12 de 28 (42,9 %) a actions/* (sí: setup-node, setup-python, setup-go, setup-java; no: checkout, cache, upload-artifact, download-artifact, github-script) i 3 de 6 (50,0 %) a github/*.
És la fixació per SHA la que aporta la protecció, en una minoria de repositoris. En conjunt, 32.978 de 58.690 (56,2 %) referències remotes d'A estan fixades per SHA (interval 50,7–61,7 %), i 4.812 de 10.472 (46,0 %) a B (interval 29,0–60,1 %; 37,7 % sense el seu repositori més gran, open-telemetry/opentelemetry-python, que conté 1.392 referències). El repositori típic en fixa poques: la mediana per repositori de la proporció fixada per SHA és del 5,0 % a A i del 0,0 % a B. Totes les referències remotes escrites als fitxers de flux de treball estan fixades per SHA com a màxim en 263 de 891 (29,5 %) repositoris d'A, i en 174 de 891 (19,5 %) si es descarten els 89 que també criden accions locals que no vam llegir; a B, com a màxim en 65 de 398 (16,3 %), o en 55 de 398 (13,8 %). Etiquetes immutables: 0,6 % de les referències a A i 0,8 % a B.
El bloqueig de dependències a nivell de flux de treball (workflow-level dependency locking), anunciat el 2026-03-26 amb «Public preview 3-6 months» (previsualització pública d'aquí a 3-6 mesos), encara no s'havia llançat el 2026-10-03: els seus elements del full de ruta continuen oberts, i cap entrada del registre de canvis ni la referència de sintaxi dels fluxos de treball no el documenta. Aquestes xifres descriuen la situació anterior al seu llançament.
Treballs previs. datosh/pinned-actions fa el seguiment de la fixació per SHA en els 10.000 repositoris amb més estrelles («only 7%» [només un 7 %] fixa totes les seves referències, abril de 2026; 506 de 6.290 repositoris que fan servir Actions, el 8,0 %, al seu arxiu) i l'abril de 2026 hi va afegir una comprovació de la immutabilitat de l'última versió; joshjohanning/ensure-immutable-actions (des del 2025-11) comprova si les referències dels fluxos de treball fan servir versions immutables. Diversos articles van mesurar el 2022 una fixació per SHA de l'1–2 % de les referències; NDSS 2026 va trobar un 16,2 % de repositoris que referencien totes les accions de tercers per SHA o per una etiqueta d'un creador verificat. El nostre 29,5 % difereix del 8,0 % de datosh sobretot per la població (els 1.000 primers amb activitat recent, no els 10.000 primers) i per la data; les 1.000 primeres entrades del mateix datosh donen 100 de 781 (12,8 %). Fins on hem pogut trobar, H1 (quantes referències per etiqueta queden protegides per les versions immutables) i el 49,2 % amb una etiqueta immutable al mateix commit no s'havien mesurat. Article i fonts: https://easybyte.es/lab/studies/s18/paper/.
Automatització i revisió. Agents d'IA van fer l'estudi i van redactar el text. Un revisor d'IA independent va comprovar la feina; se'n van aplicar les observacions (METHOD.md, apartat Deviations).
Conflicte d'interessos. EasyByte desenvolupa attest-lint i podria publicar scripts/uses_check.py, el classificador utilitzat aquí, com a eina gratuïta. A diferència d'ensure-immutable-actions, que suggereix fixacions per SHA, per a cada etiqueta movible indica l'etiqueta de versió immutable que apunta al mateix commit.
Cita aquest estudi
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}
}