EasyxLab
Idioma: PT Português

Tradução feita por IA do original em inglês, que é a versão de referência. Ler em inglês

Estudos / S18

O que protegem as versões imutáveis nos fluxos de trabalho do GitHub Actions

O que protegem as versões imutáveis do GitHub nos fluxos de trabalho do Actions dos repositórios populares?

Versão de trabalhoPublicado 2026-10-03

Resumo

Desde 2025-10-28, uma versão (release) do GitHub pode ser publicada como imutável: a sua etiqueta (tag) Git deixa de poder ser movida ou eliminada. A documentação do GitHub diz também aos autores de ações que uma etiqueta que queiram continuar a atualizar, como a etiqueta de versão principal v1, não pode estar associada a uma versão, e sugere-lhes «recommend that your users specify a major version» (que recomendem aos seus utilizadores que especifiquem uma versão principal). Um fluxo de trabalho que escreve uses: owner/action@v1 segue esse uso documentado e previsto, e as versões imutáveis não o protegem. Medimos o que o mecanismo protege na prática, em 2026-10-03, apenas através da API do GitHub:

  • A: os 1000 repositórios com mais estrelas entre os repositórios públicos que não são forks nem estão arquivados e que receberam algum push nos últimos 90 dias (limiar: 29 565 estrelas);
  • B: 500 repositórios sorteados (semente 20261003) entre os 20 553 repositórios desse tipo com 1000 a 5000 estrelas.

Os fluxos de trabalho do ramo predefinido destes repositórios contêm 58 690 referências uses: remotas em A e 10 472 em B. Cada uma foi classificada como fixada por SHA de commit, pela etiqueta de uma versão imutável, por uma etiqueta mutável ou por um ramo.

Onde o autor já publica versões imutáveis, quase nenhuma referência está protegida. Das referências por etiqueta a ações cuja última versão é imutável, 312 de 6898 (4,5%) apontam para uma etiqueta protegida em A (intervalo de 95%: 2,8–7,1%, bootstrap por repositório) e 76 de 1564 (4,9%) em B. As protegidas estão concentradas: um único repositório tem 68 das 312, e excluir qualquer repositório individual dá 3,6–4,6%. Quase todas as restantes são etiquetas de versão principal como @v7. Em 3238 de 6586 (49,2%) das referências não protegidas em A (intervalo 43,2–56,0%), uma etiqueta de versão imutável já aponta para o mesmo commit, pelo que mudar para ela não alteraria o código executado.

Ações mais usadas. 28 de 50 (56,0%) dos repositórios de ações usados por mais repositórios em A publicam a sua última versão como imutável. Ações do próprio GitHub: 12 de 28 (42,9%) em actions/* (sim: setup-node, setup-python, setup-go, setup-java; não: checkout, cache, upload-artifact, download-artifact, github-script) e 3 de 6 (50,0%) em github/*.

É a fixação por SHA que garante a proteção, numa minoria de repositórios. No conjunto, 32 978 de 58 690 (56,2%) referências remotas em A estão fixadas por SHA (intervalo 50,7–61,7%) e 4812 de 10 472 (46,0%) em B (intervalo 29,0–60,1%; 37,7% sem o seu maior repositório, open-telemetry/opentelemetry-python, que tem 1392 referências). O repositório típico fixa poucas: a mediana, por repositório, da proporção fixada por SHA é de 5,0% em A e de 0,0% em B. Todas as referências remotas escritas nos ficheiros de fluxo de trabalho estão fixadas por SHA em, no máximo, 263 de 891 (29,5%) repositórios em A, e em 174 de 891 (19,5%) se forem descartados os 89 que também chamam ações locais que não lemos; em B, no máximo em 65 de 398 (16,3%), ou em 55 de 398 (13,8%). Etiquetas imutáveis: 0,6% das referências em A, 0,8% em B.

O bloqueio de dependências ao nível do fluxo de trabalho (workflow-level dependency locking), anunciado em 2026-03-26 com «Public preview 3-6 months» (pré-visualização pública dentro de 3-6 meses), ainda não tinha sido lançado em 2026-10-03: os respetivos itens do roteiro continuam abertos, e nenhuma entrada do registo de alterações (changelog) nem a referência de sintaxe dos fluxos de trabalho o documentam. Estes valores descrevem a situação anterior ao seu lançamento.

Trabalhos anteriores. O datosh/pinned-actions acompanha a fixação por SHA nos 10 000 repositórios com mais estrelas («only 7%» [apenas 7%] fixam por completo, abril de 2026; 506 de 6290 repositórios que usam Actions, 8,0%, no seu arquivo) e acrescentou em abril de 2026 uma verificação da imutabilidade da última versão; o joshjohanning/ensure-immutable-actions (desde 2025-11) verifica se as referências dos fluxos de trabalho usam versões imutáveis. Vários artigos mediram em 2022 uma fixação por SHA de 1–2% das referências; o NDSS 2026 encontrou 16,2% de repositórios que referenciam todas as ações de terceiros por SHA ou por uma etiqueta de um criador verificado. Os nossos 29,5% diferem dos 8,0% do datosh sobretudo pela população (os primeiros 1000 com atividade recente, não os primeiros 10 000) e pela data; as primeiras 1000 entradas do próprio datosh dão 100 de 781 (12,8%). Tanto quanto conseguimos apurar, H1 (quantas referências por etiqueta são protegidas pelas versões imutáveis) e os 49,2% com uma etiqueta imutável no mesmo commit não tinham sido medidos. Artigo e fontes: https://easybyte.es/lab/studies/s18/paper/.

Automatização e revisão. Agentes de IA realizaram o estudo e redigiram o texto. Um revisor de IA independente verificou o trabalho; as suas observações foram aplicadas (METHOD.md, secção Deviations).

Conflito de interesses. A EasyByte desenvolve o attest-lint e poderá disponibilizar scripts/uses_check.py, o classificador aqui usado, como ferramenta gratuita. Ao contrário do ensure-immutable-actions, que sugere fixações por SHA, este indica, para cada etiqueta móvel, a etiqueta de versão imutável no mesmo commit.

Citar este estudo

Citação
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}
}