Neste artigo vamos nos aprofundar em como usar artefatos nos workflows do Github Actions.
Vamos começar explicando esse conceito de artefatos. Em seguida, vamos ver como usá-los dentro dos nossos workflows no GitHub Actions. Finalmente, mostraremos uma aplicação prática.
Afinal, o que são artefatos?
Um artefato é um arquivo, ou uma coleção de arquivos, produzidos durante a execução de um fluxo de trabalho (workflow).
No contexto do Github Actions, os artefatos permitem que você mantenha os dados após a conclusão de um job e compartilhe esses dados com outro job no mesmo workflow.
Por exemplo, você pode usar artefatos para salvar o build do seu programa, ou um arquivo de output de testes, após o término da execução do workflow (ou job) relacionado.
Seguem alguns exemplos de artefatos comuns que você pode fazer upload:
- Arquivos de logs.
- Arquivos binários ou compactados.
- Resultados de testes.
- Resultados de cobertura de código.
Nota: Por padrão, o GitHub armazena logs e artefatos de compilação por 90 dias, e esse período de retenção pode ser personalizado.
Como usar artefatos em um workflow
O GitHub fornece duas ações que você pode usar para fazer upload e download de artefatos de compilação:
É preciso usar ambas para compartilhar dados entre jobs.
Em primeiro lugar, fazendo upload de arquivos:
- Informando o nome do arquivo enviado.
- Informando o path a partir do qual o artefato vai ser criado (pode ser para uma pasta ou um arquivo específico).
- uses: actions/upload-artifact@v2
with:
name: my-artifact
path: path/to/artifact/world.txt
Em segundo lugar, fazendo download de arquivos:
Informando o nome do artefato que foi carregado no mesmo workflow (geralmente num job anterior).
- uses: actions/download-artifact@v2
with:
name: my-artifact
Nota: Ao fazer download de um arquivo, você pode referenciá-lo pelo nome no job.
Existem outros inputs que podem ser usados com essas actions, por exemplo:
- É possível passar uma lista de paths na action de upload.
- É possível informar um path específico na action de donwload.
Recomendo ler as documentações de cada uma para entender tudo que elas oferecem.
Exemplo prático de como usar artefatos com Github Actions
Aqui, vou mostrar como usar artefatos com Github Actions através de um exemplo simples de adição e multiplicação usando 3 jobs.
Esses jobs terão dependência uns com os outros, ou seja, teremos algo assim no nosso workflow: SOMA → MULTIPLICAÇÃO → RESULTADO
O que significa que o job MULTIPLICAÇÃO aguardará o job SOMA finalizar com sucesso para iniciar, idem para o job RESULTADO que aguardará o job MULTIPLICAÇÃO finalizar com sucesso para iniciar.
- Na aba Actions (conforme imagem abaixo)
- O resultado: workflow run
Como podem observar, eu usei várias vezes as actions de upload e download de artefatos.
No primeiro job: Usei a action de UPLOAD para compartilhar o arquivo TXT com o resultado da soma de 3+7.
Já no segundo job: Usei a action de DOWNLOAD para buscar o arquivo TXT com o resultado da soma, extrai o valor do arquivo, e multipliquei o resultado por 10, antes de usar a action de UPLOAD para compartilhar o resultado da multiplicação.
No terceiro job: Usei a action de DOWNLOAD para buscar o arquivo TXT com o resultado da multiplicação, e mostrar o resultado final: 90.
Inclusive, na página de sumário da execução, podemos observar que o artefato Homework está armazenado e pode ser baixado localmente para conferir seu conteúdo (dentro dos 90 dias que comentei mais cedo). Isso poderia ser usado para criar os reviewers testar o código gerado por uma pull request (PR), por exemplo, baixando apenas um executável localmente através desse link.
Hoje, é frequente usar workflows semelhantes para CI/CD, por exemplo, para gerar binários de softwares para cada sistema operacional (Ubuntu, macOS e Windows), antes de compartilhá-los com outros jobs, que gerarão os pacotes usando esses binários após ter baixados eles como artefatos, e eventualmente distribuir eles no Cloud num job de publicação.
Artefatos com workflows no Github Actions: facilitam o gerenciamento do seus arquivos
Por hoje é isso galera! Espero que este artigo tenha esclarecido como usar artefatos no Github Actions com seus workflows.
Lembrando também que essas actions precisam ser usadas em conjuntas no mesmo workflow.
Caso você desejar compartilhar arquivos com outros repositórios, existem outras actions para isso, por exemplo, essa que eu criei de copy-push-files, compatível com os diversos runners disponíveis no Github Actions (Ubuntu, macOS e Windows).
– – – – –
Quem quiser consultar outros exemplos com Github Actions, deixo aqui um repositório pessoal onde testei vários tipos de implementações com a ferramenta.
Lembrando que a documentação do Github Actions em português é muito boa e vale a leitura.
Referências
- Storing workflow data as artifacts – GitHub