Študije / S18
Kaj ščitijo nespremenljive izdaje v potekih dela GitHub Actions
Kaj ščitijo nespremenljive izdaje platforme GitHub v potekih dela Actions priljubljenih repozitorijev?
Povzetek
Od 2025-10-28 je mogoče izdajo (release) na platformi GitHub objaviti kot nespremenljivo (immutable): njene oznake Git (tag) ni več mogoče premakniti ali izbrisati. Dokumentacija GitHub avtorjem akcij tudi pove, da oznaka, ki jo želijo še naprej posodabljati, na primer oznaka glavne različice v1, ne sme biti vezana na izdajo, in predlaga, naj „recommend that your users specify a major version“ (uporabnikom priporočijo, naj navajajo glavno različico). Potek dela (workflow), ki vsebuje uses: owner/action@v1, sledi tej dokumentirani, predvideni rabi, nespremenljive izdaje pa ga ne ščitijo. Dne 2026-10-03 smo izmerili, kaj ta mehanizem ščiti v praksi, in sicer izključno prek GitHub API:
- A: 1.000 repozitorijev z največ zvezdicami med javnimi repozitoriji, ki niso razcepi (fork) in niso arhivirani ter so v zadnjih 90 dneh prejeli push (prag 29.565 zvezdic);
- B: 500 naključno izbranih repozitorijev (seme 20261003) izmed 20.553 takih repozitorijev z 1.000–5.000 zvezdicami.
Poteki dela v njihovih privzetih vejah vsebujejo 58.690 oddaljenih sklicev uses: v A in 10.472 v B. Vsakega smo razvrstili glede na to, s čim je pripet: s SHA commita, z oznako nespremenljive izdaje, s spremenljivo oznako ali z vejo.
Kjer avtor že objavlja nespremenljive izdaje, skoraj noben sklic ni zaščiten. Med sklici prek oznake (tag references) na akcije, katerih najnovejša izdaja je nespremenljiva, jih v A na zaščiteno oznako (protected tag) kaže 312 od 6.898 (4,5 %) (95 % interval 2,8–7,1 %, bootstrap po repozitorijih), v B pa 76 od 1.564 (4,9 %). Zaščiteni sklici so zgoščeni: en repozitorij jih vsebuje 68 od 312, izpustitev katerega koli posameznega repozitorija pa da 3,6–4,6 %. Skoraj vsi preostali so oznake glavne različice, kot je @v7. Pri 3.238 od 6.586 (49,2 %) nezaščitenih sklicev v A (interval 43,2–56,0 %) na isti commit že kaže oznaka nespremenljive izdaje, zato prehod nanjo ne bi spremenil kode, ki se izvaja.
Najpogosteje uporabljene akcije. 28 od 50 (56,0 %) repozitorijev akcij, ki jih uporablja največ repozitorijev v A, objavlja svojo najnovejšo izdajo kot nespremenljivo. Lastne akcije GitHub (first party): 12 od 28 (42,9 %) za actions/* (da: setup-node, setup-python, setup-go, setup-java; ne: checkout, cache, upload-artifact, download-artifact, github-script) in 3 od 6 (50,0 %) za github/*.
Zaščito nosi pripenjanje s SHA, in to v manjšini repozitorijev. Skupno je v A s SHA pripetih 32.978 od 58.690 (56,2 %) oddaljenih sklicev (interval 50,7–61,7 %), v B pa 4.812 od 10.472 (46,0 %) (interval 29,0–60,1 %; 37,7 % brez njegovega največjega repozitorija, open-telemetry/opentelemetry-python, ki vsebuje 1.392 sklicev). Tipičen repozitorij pripne malo: mediana deleža SHA po repozitorijih je 5,0 % v A in 0,0 % v B. Vsi oddaljeni sklici, zapisani v datotekah potekov dela, so s SHA pripeti v največ 263 od 891 (29,5 %) repozitorijev v A in v 174 od 891 (19,5 %), če izpustimo 89 repozitorijev, ki kličejo tudi lokalne akcije, ki jih nismo prebrali; v B v največ 65 od 398 (16,3 %) oziroma v 55 od 398 (13,8 %). Nespremenljive oznake: 0,6 % sklicev v A, 0,8 % v B.
Zaklepanje odvisnosti na ravni poteka dela (workflow-level dependency locking), napovedano 2026-03-26 z navedbo „Public preview 3-6 months“, dne 2026-10-03 še ni bilo na voljo: njegove postavke na načrtu razvoja (roadmap) so odprte in ne dokumentira ga noben vnos v dnevniku sprememb (changelog) niti referenčna dokumentacija sintakse potekov dela. Te številke opisujejo stanje pred njegovo uvedbo.
Predhodno delo. datosh/pinned-actions spremlja pripenjanje s SHA v 10.000 repozitorijih z največ zvezdicami („only 7%“ jih pripne v celoti, april 2026; v njegovem arhivu 506 od 6.290 repozitorijev, ki uporabljajo Actions, 8,0 %) in je aprila 2026 dodal preverjanje, ali je najnovejša izdaja nespremenljiva; joshjohanning/ensure-immutable-actions (od 2025-11) preverja, ali sklici v potekih dela uporabljajo nespremenljive izdaje. Članki so leta 2022 izmerili pripenjanje s SHA pri 1–2 % sklicev; prispevek z NDSS 2026 je ugotovil, da se 16,2 % repozitorijev na vsako akcijo tretje osebe sklicuje s SHA ali z oznako preverjenega ustvarjalca. Naših 29,5 % se od 8,0 % pri datosh razlikuje predvsem po populaciji (1.000 najbolj priljubljenih z nedavno dejavnostjo, ne 10.000 najbolj priljubljenih) in datumu; prvih 1.000 vnosov samega datosh da 100 od 781 (12,8 %). Kolikor smo lahko ugotovili, H1 (koliko sklicev prek oznake ščitijo nespremenljive izdaje) in 49,2 % z nespremenljivo oznako na istem commitu še nista bila izmerjena. Članek in viri: https://easybyte.es/lab/studies/s18/paper/.
Avtomatizacija in pregled. Študijo so izvedli agenti UI in napisali besedilo. Delo je preveril neodvisen recenzent UI; njegove ugotovitve so bile upoštevane (METHOD.md, razdelek Deviations).
Nasprotje interesov. EasyByte razvija attest-lint in lahko scripts/uses_check.py, tu uporabljeni klasifikator, izda kot brezplačno orodje. Za razliko od ensure-immutable-actions, ki predlaga pripenjanje s SHA, za vsako premično oznako navede oznako nespremenljive izdaje na istem commitu.
Citirajte to študijo
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}
}