Studie / S18
Co chrání neměnná vydání ve workflow GitHub Actions
Co chrání neměnná vydání platformy GitHub ve workflow Actions populárních repozitářů?
Abstrakt
Od 2025-10-28 lze vydání (release) na platformě GitHub publikovat jako neměnné (immutable): jeho tag Git už nelze přesunout ani smazat. Dokumentace GitHub také autorům akcí říká, že tag, který chtějí dále aktualizovat, jako je tag hlavní verze v1, nesmí být svázán s vydáním, a navrhuje, aby „recommend that your users specify a major version“ (doporučili uživatelům uvádět hlavní verzi). Workflow, který obsahuje uses: owner/action@v1, se řídí tímto zdokumentovaným, zamýšleným použitím a neměnná vydání ho nechrání. Dne 2026-10-03 jsme změřili, co tento mechanismus chrání v praxi, a to výhradně přes GitHub API:
- A: 1 000 repozitářů s nejvíce hvězdičkami mezi veřejnými repozitáři, které nejsou forky ani archivované a do nichž proběhl push za posledních 90 dní (hranice 29 565 hvězdiček);
- B: 500 náhodně vybraných repozitářů (seed 20261003) z 20 553 takových repozitářů s 1 000–5 000 hvězdičkami.
Workflow v jejich výchozích větvích obsahují 58 690 vzdálených odkazů uses: v A a 10 472 v B. Každý jsme klasifikovali podle toho, čím je připnut: SHA commitu, tagem neměnného vydání, měnitelným tagem, nebo větví.
Tam, kde autor již publikuje neměnná vydání, není chráněn téměř žádný odkaz. Z odkazů přes tag (tag references) na akce, jejichž nejnovější vydání je neměnné, ukazuje na chráněný tag (protected tag) 312 ze 6 898 (4,5 %) v A (95% interval 2,8–7,1 %, bootstrap přes repozitáře) a 76 z 1 564 (4,9 %) v B. Chráněné odkazy jsou koncentrované: jeden repozitář jich obsahuje 68 z 312 a vynechání kteréhokoli jednotlivého repozitáře dává 3,6–4,6 %. Téměř všechny ostatní jsou tagy hlavní verze jako @v7. U 3 238 ze 6 586 (49,2 %) nechráněných odkazů v A (interval 43,2–56,0 %) už na stejný commit ukazuje tag neměnného vydání, takže přechod na něj by nezměnil kód, který se spouští.
Nejpoužívanější akce. 28 z 50 (56,0 %) repozitářů akcí, které používá nejvíce repozitářů v A, publikuje své nejnovější vydání jako neměnné. Vlastní akce GitHub (first party): 12 z 28 (42,9 %) pro actions/* (ano: setup-node, setup-python, setup-go, setup-java; ne: checkout, cache, upload-artifact, download-artifact, github-script) a 3 ze 6 (50,0 %) pro github/*.
Ochranu nese připínání přes SHA, a to v menšině repozitářů. Celkem je v A připnuto přes SHA 32 978 z 58 690 (56,2 %) vzdálených odkazů (interval 50,7–61,7 %) a v B 4 812 z 10 472 (46,0 %) (interval 29,0–60,1 %; 37,7 % bez jeho největšího repozitáře, open-telemetry/opentelemetry-python, který obsahuje 1 392 odkazů). Typický repozitář připíná málo: medián podílu SHA v jednotlivých repozitářích je 5,0 % v A a 0,0 % v B. Všechny vzdálené odkazy zapsané v souborech workflow jsou připnuty přes SHA nejvýše u 263 z 891 (29,5 %) repozitářů v A a u 174 z 891 (19,5 %), pokud vynecháme 89 repozitářů, které volají i lokální akce, jež jsme nečetli; v B nejvýše u 65 ze 398 (16,3 %), respektive u 55 ze 398 (13,8 %). Neměnné tagy: 0,6 % odkazů v A, 0,8 % v B.
Uzamykání závislostí na úrovni workflow (workflow-level dependency locking), oznámené 2026-03-26 s poznámkou „Public preview 3-6 months“, nebylo ke dni 2026-10-03 dostupné: jeho položky v roadmapě jsou otevřené a nedokumentuje ho žádný záznam v changelogu ani referenční dokumentace syntaxe workflow. Tato čísla popisují stav před jeho zavedením.
Předchozí práce. datosh/pinned-actions sleduje připínání přes SHA u 10 000 repozitářů s nejvíce hvězdičkami („only 7%“ připíná plně, duben 2026; v jeho archivu 506 ze 6 290 repozitářů používajících Actions, 8,0 %) a v dubnu 2026 přidal kontrolu, zda je nejnovější vydání neměnné; joshjohanning/ensure-immutable-actions (od 2025-11) kontroluje, zda odkazy ve workflow používají neměnná vydání. Odborné články naměřily v roce 2022 připínání přes SHA u 1–2 % odkazů; práce z NDSS 2026 zjistila, že 16,2 % repozitářů odkazuje na každou akci třetí strany přes SHA nebo přes tag ověřeného tvůrce. Našich 29,5 % se od 8,0 % u datosh liší hlavně populací (1 000 nejpopulárnějších s nedávnou aktivitou, nikoli 10 000 nejpopulárnějších) a datem; prvních 1 000 položek samotného datosh dává 100 ze 781 (12,8 %). Pokud se nám podařilo dohledat, H1 (kolik odkazů přes tag chrání neměnná vydání) ani 49,2 % s neměnným tagem na stejném commitu dosud nikdo neměřil. Článek a zdroje: https://easybyte.es/lab/studies/s18/paper/.
Automatizace a kontrola. Studii provedli agenti AI a napsali text. Práci zkontroloval nezávislý recenzent AI; jeho zjištění byla zapracována (METHOD.md, oddíl Deviations).
Střet zájmů. EasyByte vyvíjí attest-lint a může vydat scripts/uses_check.py, klasifikátor použitý v této studii, jako bezplatný nástroj. Na rozdíl od ensure-immutable-actions, který navrhuje připnutí přes SHA, uvádí pro každý posuvný tag tag neměnného vydání na stejném commitu.
Citovat tuto studii
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}
}