EasyxLab
Nyelv: HU Magyar

Az angol eredeti mesterséges intelligenciával készült fordítása; a referenciaváltozat az angol eredeti. Olvasás angolul

Tanulmányok / S18

Mit védenek a módosíthatatlan kiadások a GitHub Actions-munkafolyamatokban

Mit védenek a GitHub módosíthatatlan kiadásai (immutable releases) a népszerű tárolók Actions-munkafolyamataiban?

MunkaváltozatKözzétéve 2026-10-03

Összefoglaló

2025. október 28. óta egy GitHub-kiadás (release) módosíthatatlanként (immutable) is közzétehető: Git-címkéje ezután nem helyezhető át és nem törölhető. A GitHub dokumentációja emellett azt írja az actionök szerzőinek, hogy egy olyan címke, amelyet tovább akarnak frissíteni, például a v1 főverzió-címke, nem köthető kiadáshoz, és azt javasolja, hogy „recommend that your users specify a major version” (javasolják a felhasználóiknak, hogy főverziót adjanak meg). Az a munkafolyamat, amely uses: owner/action@v1 hivatkozást ír, ezt a dokumentált, rendeltetésszerű használatot követi, és a módosíthatatlan kiadások nem védik. 2026. október 3-án, kizárólag a GitHub API-ján keresztül megmértük, mit véd a mechanizmus a gyakorlatban:

  • A: a legtöbb csillaggal rendelkező 1000 tároló azok közül a nyilvános tárolók közül, amelyek nem forkok, nincsenek archiválva, és az elmúlt 90 napban push érkezett beléjük (határ: 29 565 csillag);
  • B: 500 véletlenszerűen kiválasztott tároló (véletlenszám-mag: 20261003) a 20 553 ilyen, 1000–5000 csillaggal rendelkező tároló közül.

Alapértelmezett águk munkafolyamatai 58 690 távoli uses:-hivatkozást tartalmaznak az A-ban és 10 472-t a B-ben. Mindegyiket aszerint soroltuk be, hogy commit SHA-val, módosíthatatlan kiadás címkéjével, módosítható címkével vagy ággal rögzítették.

Ahol a szerző már módosíthatatlan kiadásokat tesz közzé, ott szinte egyetlen hivatkozás sem védett. Azon címkehivatkozások közül, amelyek olyan actionökre mutatnak, amelyeknek legutóbbi kiadása módosíthatatlan, az A-ban 6898-ból 312 (4,5%; 95%-os CI: 2,8–7,1%, tárolók szerinti bootstrap) mutat védett címkére (protected tag), a B-ben 1564-ből 76 (4,9%). A védettek koncentráltan fordulnak elő: egyetlen tároló adja a 312-ből 68-at, és bármelyik egyetlen tároló kihagyásával 3,6–4,6% adódik. A többi szinte mind főverzió-címke, például @v7. Az A-ban a védetlen hivatkozások közül 6586-ból 3238-nál (49,2%; CI: 43,2–56,0%) már egy módosíthatatlan kiadás címkéje is ugyanarra a commitra mutat, így az arra való átállás nem változtatná meg a futó kódot.

A leggyakrabban használt actionök. Az A-ban a legtöbb tároló által használt 50 action-tároló közül 28 (56,0%) módosíthatatlanként teszi közzé legutóbbi kiadását. A GitHub saját actionjei: az actions/* esetében 28-ból 12 (42,9%; igen: setup-node, setup-python, setup-go, setup-java; nem: checkout, cache, upload-artifact, download-artifact, github-script), a github/* esetében 6-ból 3 (50,0%).

A védelmet az SHA-rögzítés adja, a tárolók kisebbségében. Összesítve az A-ban 58 690 távoli hivatkozásból 32 978 (56,2%; CI: 50,7–61,7%) SHA-val rögzített, a B-ben 10 472-ből 4812 (46,0%; CI: 29,0–60,1%; legnagyobb tárolója, az 1392 hivatkozást tartalmazó open-telemetry/opentelemetry-python nélkül 37,7%). A tipikus tároló keveset rögzít: az SHA-arány tárolónkénti mediánja az A-ban 5,0%, a B-ben 0,0%. A munkafolyamat-fájlokba írt összes távoli hivatkozás SHA-val rögzített az A-ban legfeljebb 891-ből 263 tárolóban (29,5%), és 891-ből 174-ben (19,5%), ha nem számítjuk azt a 89-et, amely olyan helyi actionöket is hív, amelyeket nem olvastunk be; a B-ben legfeljebb 398-ból 65-ben (16,3%), illetve 398-ból 55-ben (13,8%). Módosíthatatlan címkék: a hivatkozások 0,6%-a az A-ban, 0,8%-a a B-ben.

A munkafolyamat-szintű függőségzárolás (workflow-level dependency locking), amelyet 2026. március 26-án „Public preview 3-6 months” (nyilvános előzetes 3–6 hónapon belül) jelzéssel jelentettek be, 2026. október 3-án még nem jelent meg: ütemterv-bejegyzései nyitottak, és sem changelog-bejegyzés, sem a munkafolyamat-szintaxis referenciája nem dokumentálja. Ezek a számok a megjelenése előtti állapotot írják le.

Korábbi munkák. A datosh/pinned-actions a csillagok szerinti első 10 000 tárolóban követi az SHA-rögzítést („only 7%”, azaz csak 7% rögzít teljesen, 2026. április; archívumában a GitHub Actions szolgáltatást használó 6290 tárolóból 506, 8,0%), és 2026 áprilisában ellenőrzést adott hozzá arra, hogy a legutóbbi kiadás módosíthatatlan-e; a joshjohanning/ensure-immutable-actions (2025 novembere óta) azt ellenőrzi, hogy a munkafolyamatok hivatkozásai módosíthatatlan kiadásokat használnak-e. Tudományos cikkek 2022-ben a hivatkozások 1–2%-ánál mértek SHA-rögzítést; egy NDSS 2026-os cikk szerint a tárolók 16,2%-a minden harmadik féltől származó actionre SHA-val vagy ellenőrzött készítő címkéjével hivatkozik. A mi 29,5%-os eredményünk főként a sokaság (a friss aktivitású első 1000, nem az első 10 000) és a dátum miatt tér el a datosh 8,0%-ától; a datosh saját első 1000 bejegyzése 781-ből 100-at (12,8%) ad. Amennyire meg tudtuk állapítani, a H1-et (hány címkehivatkozást védenek a módosíthatatlan kiadások) és az azonos commitnál módosíthatatlan címkével rendelkező 49,2%-ot korábban nem mérték. Cikk és források: https://easybyte.es/lab/studies/s18/paper/.

Automatizálás és felülvizsgálat. A tanulmányt MI-ügynökök végezték el, és ők írták a szöveget. Egy független MI-bíráló ellenőrizte a munkát; megállapításait átvezettük (METHOD.md, Deviations szakasz).

Érdekütközés. Az EasyByte fejleszti az attest-lint eszközt, és ingyenes eszközként kiadhatja az itt használt osztályozót (scripts/uses_check.py). Az ensure-immutable-actions eszközzel ellentétben, amely SHA-rögzítést javasol, ez minden áthelyezhető címkéhez megadja az ugyanarra a commitra mutató módosíthatatlan kiadás címkéjét.

Hivatkozás erre a tanulmányra

Hivatkozás
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
BibTeX
@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}
}