Studies / S18
Wat onveranderlijke releases beschermen in GitHub Actions-workflows
Wat beschermen de onveranderlijke releases van GitHub in de Actions-workflows van populaire repository's?
Samenvatting
Sinds 2025-10-28 kan een GitHub-release als onveranderlijk (immutable) worden gepubliceerd: de Git-tag ervan kan dan niet meer worden verplaatst of verwijderd. De documentatie van GitHub zegt bovendien tegen auteurs van actions dat een tag die ze willen blijven bijwerken, zoals de major-versietag v1, niet aan een release gekoppeld mag zijn, en stelt voor dat ze “recommend that your users specify a major version” (hun gebruikers aanraden een major-versie op te geven). Een workflow die uses: owner/action@v1 schrijft, volgt dat gedocumenteerde, bedoelde gebruik, en onveranderlijke releases beschermen hem niet. We hebben op 2026-10-03 uitsluitend via de GitHub-API gemeten wat het mechanisme in de praktijk beschermt:
- A: de top 1.000 repository's naar aantal sterren onder de openbare repository's die geen fork en niet gearchiveerd zijn en in de laatste 90 dagen een push kregen (grens 29.565 sterren);
- B: 500 repository's, willekeurig getrokken (seed 20261003) uit de 20.553 zulke repository's met 1.000–5.000 sterren.
Hun workflows in de standaardbranch bevatten 58.690 remote uses:-verwijzingen in A en 10.472 in B. Elke verwijzing is ingedeeld naargelang ze is vastgepind op een commit-SHA, op de tag van een onveranderlijke release, op een veranderlijke tag of op een branch.
Waar de auteur al onveranderlijke releases publiceert, is bijna geen verwijzing beschermd. Van de tagverwijzingen naar actions waarvan de nieuwste release onveranderlijk is, verwijzen er in A 312 van 6.898 (4,5%; 95%-BI 2,8–7,1%, bootstrap over repository's) naar een beschermde tag (protected tag), en in B 76 van 1.564 (4,9%). De beschermde zijn geconcentreerd: één repository bevat 68 van de 312, en het weglaten van één repository, welk dan ook, geeft 3,6–4,6%. Bijna alle overige zijn major-tags zoals @v7. Bij 3.238 van 6.586 (49,2%) van de onbeschermde verwijzingen in A (BI 43,2–56,0%) wijst er al een tag van een onveranderlijke release naar dezelfde commit, dus overstappen op die tag zou de code die wordt uitgevoerd niet veranderen.
Meest gebruikte actions. 28 van de 50 action-repository's (56,0%) die door de meeste repository's in A worden gebruikt, publiceren hun nieuwste release als onveranderlijk. Van GitHub zelf: 12 van 28 (42,9%) bij actions/* (ja: setup-node, setup-python, setup-go, setup-java; nee: checkout, cache, upload-artifact, download-artifact, github-script) en 3 van 6 (50,0%) bij github/*.
De bescherming komt van SHA-pinning, in een minderheid van de repository's. Samengenomen zijn in A 32.978 van 58.690 remote verwijzingen (56,2%; BI 50,7–61,7%) vastgepind op SHA, en in B 4.812 van 10.472 (46,0%; BI 29,0–60,1%; 37,7% zonder het grootste repository, open-telemetry/opentelemetry-python, dat 1.392 verwijzingen bevat). Het typische repository pint er weinig vast: de mediaan van het SHA-aandeel per repository is 5,0% in A en 0,0% in B. Alle remote verwijzingen in de workflowbestanden zijn op SHA vastgepind in hoogstens 263 van 891 repository's (29,5%) in A, en in 174 van 891 (19,5%) als de 89 die ook lokale actions aanroepen die we niet hebben gelezen, niet worden meegeteld; in B in hoogstens 65 van 398 (16,3%), of 55 van 398 (13,8%). Onveranderlijke tags: 0,6% van de verwijzingen in A, 0,8% in B.
Het vastleggen van afhankelijkheden op workflowniveau (workflow-level dependency locking), op 2026-03-26 aangekondigd met “Public preview 3-6 months” (openbare preview over 3–6 maanden), was op 2026-10-03 nog niet uitgebracht: de bijbehorende roadmap-items staan open, en geen changelog-item of referentie van de workflowsyntaxis documenteert het. Deze cijfers beschrijven de toestand voordat het wordt uitgebracht.
Eerder werk. datosh/pinned-actions volgt SHA-pinning in de top 10.000 repository's naar aantal sterren (“only 7%”, oftewel slechts 7%, pint volledig vast, april 2026; 506 van 6.290 repository's die Actions gebruiken, 8,0%, in zijn archief) en voegde in april 2026 een controle toe of de nieuwste release onveranderlijk is; joshjohanning/ensure-immutable-actions (sinds 2025-11) controleert of verwijzingen in workflows onveranderlijke releases gebruiken. Wetenschappelijke artikelen maten in 2022 SHA-pinning bij 1–2% van de verwijzingen; een artikel op NDSS 2026 vond dat 16,2% van de repository's naar elke action van derden verwijst via SHA of via een tag van een geverifieerde maker. Onze 29,5% verschilt van de 8,0% van datosh vooral door de populatie (top 1.000 met recente activiteit, niet top 10.000) en de datum; de eerste 1.000 vermeldingen van datosh zelf geven 100 van 781 (12,8%). Voor zover we konden nagaan, waren H1 (hoeveel tagverwijzingen onveranderlijke releases beschermen) en de 49,2% met een onveranderlijke tag op dezelfde commit nog niet gemeten. Paper en bronnen: https://easybyte.es/lab/studies/s18/paper/.
Automatisering en controle. AI-agents voerden de studie uit en schreven de tekst. Een onafhankelijke AI-reviewer heeft het werk gecontroleerd; zijn bevindingen zijn verwerkt (METHOD.md, sectie Deviations).
Belangenconflicten. EasyByte ontwikkelt attest-lint en brengt scripts/uses_check.py, de hier gebruikte classifier, mogelijk uit als gratis tool. Anders dan ensure-immutable-actions, dat SHA-pins voorstelt, geeft het voor elke verplaatsbare tag de tag van een onveranderlijke release die naar dezelfde commit wijst.
Deze studie citeren
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}
}