Tutkimukset / S18
Mitä muuttumattomat julkaisut suojaavat GitHub Actions -työnkuluissa
Mitä GitHubin muuttumattomat julkaisut (immutable releases) suojaavat suosittujen repositorioiden Actions-työnkuluissa?
Tiivistelmä
28.10.2025 lähtien GitHub-julkaisun voi julkaista muuttumattomana (immutable): sen Git-tagia ei sen jälkeen voi siirtää eikä poistaa. GitHubin dokumentaatio kertoo lisäksi actionien tekijöille, että tagia, jota he haluavat edelleen päivittää, kuten pääversiotagia v1, ei saa sitoa julkaisuun, ja ehdottaa, että he ”recommend that your users specify a major version” (suosittelevat käyttäjilleen pääversion määrittämistä). Työnkulku, jossa on uses: owner/action@v1, noudattaa tätä dokumentoitua, tarkoitettua käyttötapaa, eivätkä muuttumattomat julkaisut suojaa sitä. Mittasimme 3.10.2026 pelkästään GitHubin API:n kautta, mitä mekanismi käytännössä suojaa:
- A: 1 000 eniten tähtiä saanutta repositoriota niistä julkisista repositorioista, jotka eivät ole forkkeja eivätkä arkistoituja ja joihin on tehty push viimeisten 90 päivän aikana (raja 29 565 tähteä);
- B: 500 satunnaisesti poimittua repositoriota (siemenluku 20261003) niistä 20 553 vastaavasta repositoriosta, joilla on 1 000–5 000 tähteä.
Niiden oletushaaran työnkuluissa on 58 690 ulkoista uses:-viittausta A:ssa ja 10 472 B:ssä. Jokainen viittaus luokiteltiin sen mukaan, onko se kiinnitetty commitin SHA:han, muuttumattoman julkaisun tagiin, muuttuvaan tagiin vai haaraan.
Kun tekijä jo julkaisee muuttumattomia julkaisuja, lähes mikään viittaus ei ole suojattu. Niistä tagiviittauksista, jotka kohdistuvat actioneihin, joiden uusin julkaisu on muuttumaton, A:ssa 312 viittausta 6 898:sta (4,5 %; 95 %:n LV 2,8–7,1 %, bootstrap repositorioittain) osoittaa suojattuun tagiin (protected tag) ja B:ssä 76 viittausta 1 564:stä (4,9 %). Suojatut ovat keskittyneitä: yksi repositorio sisältää 68 niistä 312:sta, ja minkä tahansa yksittäisen repositorion pois jättäminen antaa tulokseksi 3,6–4,6 %. Lähes kaikki muut ovat pääversiotageja, kuten @v7. A:n suojaamattomista viittauksista 3 238:ssa 6 586:sta (49,2 %; LV 43,2–56,0 %) samaan commitiin osoittaa jo muuttumattoman julkaisun tagi, joten siihen vaihtaminen ei muuttaisi suoritettavaa koodia.
Käytetyimmät actionit. 28 niistä 50 action-repositoriosta (56,0 %), joita A:ssa käyttää suurin määrä repositorioita, julkaisee uusimman julkaisunsa muuttumattomana. GitHubin omat: 12 actions/*-repositoriota 28:sta (42,9 %; kyllä: setup-node, setup-python, setup-go, setup-java; ei: checkout, cache, upload-artifact, download-artifact, github-script) ja 3 github/*-repositoriota 6:sta (50,0 %).
Suojan antaa SHA-kiinnitys – repositorioiden vähemmistössä. Kaikkiaan A:n 58 690 ulkoisesta viittauksesta 32 978 (56,2 %; LV 50,7–61,7 %) on kiinnitetty SHA:lla ja B:n 10 472 viittauksesta 4 812 (46,0 %; LV 29,0–60,1 %; 37,7 % ilman B:n suurinta repositoriota open-telemetry/opentelemetry-python, jossa on 1 392 viittausta). Tyypillinen repositorio kiinnittää harvoja viittauksia: SHA-osuuden repositoriokohtainen mediaani on A:ssa 5,0 % ja B:ssä 0,0 %. Kaikki työnkulkutiedostoihin kirjoitetut ulkoiset viittaukset on kiinnitetty SHA:lla enintään 263 repositoriossa 891:stä (29,5 %) A:ssa ja 174 repositoriossa 891:stä (19,5 %), jos niitä 89:ää, jotka kutsuvat myös paikallisia actioneita, joita emme lukeneet, ei lasketa mukaan; B:ssä enintään 65 repositoriossa 398:sta (16,3 %) tai 55 repositoriossa 398:sta (13,8 %). Muuttumattomat tagit: 0,6 % viittauksista A:ssa ja 0,8 % B:ssä.
Riippuvuuksien lukitus työnkulun tasolla (workflow-level dependency locking), joka julkistettiin 26.3.2026 maininnalla ”Public preview 3-6 months” (julkinen esiversio 3–6 kuukauden kuluttua), ei ollut vielä julkaistu 3.10.2026: sen tiekarttakohdat ovat avoinna, eikä mikään muutoslokin merkintä tai työnkulkusyntaksin viiteohje dokumentoi sitä. Nämä luvut kuvaavat tilannetta ennen sen julkaisua.
Aiempi tutkimus. datosh/pinned-actions seuraa SHA-kiinnitystä 10 000 eniten tähtiä saaneessa repositoriossa (”only 7%” eli vain 7 % kiinnittää kaiken, huhtikuu 2026; sen arkistossa 506 Actionsia käyttävää repositoriota 6 290:stä, 8,0 %) ja lisäsi huhtikuussa 2026 tarkistuksen siitä, onko uusin julkaisu muuttumaton; joshjohanning/ensure-immutable-actions (marraskuusta 2025) tarkistaa, käyttävätkö työnkulkujen viittaukset muuttumattomia julkaisuja. Tieteelliset artikkelit mittasivat vuonna 2022 SHA-kiinnityksen osuudeksi 1–2 % viittauksista; NDSS 2026 -konferenssin artikkeli totesi, että 16,2 % repositorioista viittaa jokaiseen kolmannen osapuolen actioniin SHA:lla tai vahvistetun tekijän tagilla. Saamamme 29,5 % eroaa datoshin 8,0 %:sta lähinnä populaation (1 000 kärkirepositoriota, joissa on tuoretta toimintaa, ei 10 000 kärkirepositoriota) ja ajankohdan vuoksi; datoshin omat 1 000 ensimmäistä merkintää antavat 100 repositoriota 781:stä (12,8 %). Sikäli kuin olemme löytäneet, H1:tä (kuinka monta tagiviittausta muuttumattomat julkaisut suojaavat) ja niitä 49,2 %:a, joilla on muuttumaton tagi samassa commitissa, ei ollut mitattu. Artikkeli ja lähteet: https://easybyte.es/lab/studies/s18/paper/.
Automaatio ja arviointi. Tekoälyagentit toteuttivat tutkimuksen ja kirjoittivat tekstin. Riippumaton tekoälyarvioija tarkasti työn; sen havainnot on otettu huomioon (METHOD.md, kohta Deviations).
Sidonnaisuudet. EasyByte kehittää attest-lint-työkalua ja saattaa julkaista tässä käytetyn luokittelijan scripts/uses_check.py maksuttomana työkaluna. Toisin kuin ensure-immutable-actions, joka ehdottaa SHA-kiinnityksiä, se ilmoittaa jokaiselle siirrettävälle tagille saman commitin muuttumattoman julkaisun tagin.
Viittaa tähän tutkimukseen
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}
}