Skip to main content
Skip to content

Arquivos de bloqueio de dependências do fluxo de trabalho

Um arquivo de bloqueio fixa todas as ações das quais seus fluxos de trabalho dependem em um commit verificado, portanto, o código que você analisou é o código que é executado.

Observação

Os arquivos de bloqueio de dependência de fluxo de trabalho estão em prévia pública e sujeitos a alterações.

Por que bloquear dependências de fluxo de trabalho?

Quando um fluxo de trabalho faz referência a uma ação por uma marca ou branch, como uses: octo-org/deploy-action@v3 ou uses: octo-org/deploy-action@main, GitHub Actions resolve essa referência para qualquer commit para o qual a marca ou branch aponta em tempo de execução.

Tags e branches podem ser movidos, portanto, não há garantia de que o código executado seja o código que o autor do fluxo de trabalho revisou originalmente. Se a conta de um mantenedor upstream for comprometida e uma tag for redirecionada, seus repositórios poderão executar código mal-intencionado.

Um arquivo de bloqueio de dependência de fluxo de trabalho associa um SHA do commit a cada ação (incluindo dependências transitivas) e a qualquer fluxo de trabalho reutilizável de que seus fluxos de trabalho dependam. Isso lhe dá:

  • Compilações reproduzíveis
  • Alterações de dependência revisíveis e Dependabot atualizações de versão
  • Um inventário auditável das dependências dos seus sistemas de CI/CD

Como funciona o arquivo de bloqueio?

O arquivo de bloqueio é definido em um repositório em .github/workflows/actions.lock. Ela é gerada por gh actions-lockuma GitHub CLI extensão e nunca deve ser editada manualmente.

Você pode integrar os fluxos de trabalho de um repositório ao arquivo de bloqueio um de cada vez ou tudo de uma vez. Depois que um fluxo de trabalho é configurado:

  • Cada dependência de ação que o fluxo de trabalho usa deve estar presente no arquivo de bloqueio.
  • O commit bloqueado é o que é executado quando o fluxo de trabalho é executado e o que as políticas de ações permitidas verificam. Esse commit deve existir em um branch do repositório de origem.

Um arquivo de bloqueio abrange os fluxos de trabalho em seu próprio repositório. Ele se estende a dependências transitivas (ações que as dependências da sua ação usam), exceto para dependências de chamadas de fluxo de trabalho reutilizáveis. Um fluxo de trabalho reutilizável é coberto pelo lockfile do repositório em que ele é definido.

O que o arquivo de bloqueio registra?

O arquivo de bloqueio tem duas seções. workflows registra quais dependências cada fluxo de trabalho integrado usa, e dependencies registra a qual commit cada uma dessas referências corresponde.

# This file is machine-generated by `gh actions-lock`.
# Do not edit by hand; run `gh actions-lock` to update.
version: 'v0.0.2'
workflows:
    '.github/workflows/ci.yml':
        - 'octo-org/[email protected]'
dependencies:
    'octo-org/[email protected]':
        ref: 'v3.1.0'
        commit: 'sha1-...'
        owner_id: 44036562
        repo_id: 197814629

Cada dependência registra:

  • ref: a referência que o fluxo de trabalho usa, como uma marca ou ramificação.
  • commit: o commit exato ao qual a referência foi resolvida. Esse é o código que será executado.
  • owner_id e repo_id: a identidade numérica do repositório de origem. GitHub Actions usa-os para confirmar em tempo de execução que o repositório por trás do nome ainda é aquele que você travou.

Como os arquivos de bloqueio se comparam com a fixação por SHA?

GitHub historicamente recomendou fixar ações de terceiros em um SHA de commit completo em seus arquivos de fluxo de trabalho. Para repositórios que adotam um arquivo de bloqueio, a fixação SHA em arquivos de fluxo de trabalho não é mais necessária. O arquivo de bloqueio é a melhor opção porque dá suporte a dependências transitivas, facilita a leitura de arquivos de fluxo de trabalho e registra a identidade do repositório de origem.

Próximas Etapas 

Para criar um arquivo de bloqueio para um repositório, consulte Bloqueio de dependências de ação nos fluxos de trabalho de um repositório.