@actions/upload-artifact
Aviso
actions/upload-artifact@v3 está agendado para descontinuação em 30 de novembro de 2024 . Saber mais. Da mesma forma, v1/v2 estão programados para descontinuação em 30 de junho de 2024 . Atualize seu fluxo de trabalho para usar a v4 das ações do artefato. Essa descontinuação não afetará nenhuma versão existente do GitHub Enterprise Server usada pelos clientes.
Carregue artefatos de ações de suas execuções de fluxo de trabalho. Alimentado internamente pelo pacote @actions/artifact.
Consulte também artefato de download.
@actions/upload-artifact
Importante
upload-artifact@v4+ ainda não é compatível com GHES. Se você estiver no GHES, deverá usar a v3.
O lançamento de upload-artifact@v4 e download-artifact@v4 são mudanças importantes na arquitetura de back-end do Artifacts. Eles têm inúmeras melhorias de desempenho e comportamentais.
Para obter mais informações, consulte a documentação @actions/artifact
.
Há também uma nova subação, actions/upload-artifact/merge
. Para obter mais informações, verifique o README dessa ação.
Em executores auto-hospedados, podem ser necessárias regras de firewall adicionais.
Fazendo upload para o mesmo artefato nomeado várias vezes.
Devido à forma como os artefatos são criados nesta nova versão, não é mais possível fazer upload para o mesmo artefato nomeado várias vezes. Você deve dividir os uploads em vários artefatos com nomes diferentes ou fazer upload apenas uma vez. Caso contrário, você encontrará um erro.
Limite de artefatos para um trabalho individual. Cada trabalho em uma execução de fluxo de trabalho agora tem um limite de 500 artefatos.
Com v4.4
e posterior, os arquivos ocultos são excluídos por padrão.
Para obter assistência com alterações significativas, consulte MIGRATION.md.
- uses : actions/upload-artifact@v4
with :
# Name of the artifact to upload.
# Optional. Default is 'artifact'
name :
# A file, directory or wildcard pattern that describes what to upload
# Required.
path :
# The desired behavior if no files are found using the provided path.
# Available Options:
# warn: Output a warning but do not fail the action
# error: Fail the action with an error message
# ignore: Do not output any warnings or errors, the action does not fail
# Optional. Default is 'warn'
if-no-files-found :
# Duration after which artifact will expire in days. 0 means using default retention.
# Minimum 1 day.
# Maximum 90 days unless changed from the repository settings page.
# Optional. Defaults to repository settings.
retention-days :
# The level of compression for Zlib to be applied to the artifact archive.
# The value can range from 0 to 9.
# For large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.
# Optional. Default is '6'
compression-level :
# If true, an artifact with a matching name will be deleted before a new one is uploaded.
# If false, the action will fail if an artifact for the given name already exists.
# Does not fail if the artifact does not exist.
# Optional. Default is 'false'
overwrite :
# Whether to include hidden files in the provided path in the artifact
# The file contents of any hidden files in the path should be validated before
# enabled this to avoid uploading sensitive information.
# Optional. Default is 'false'
include-hidden-files :
Nome | Descrição | Exemplo |
---|---|---|
artifact-id | ID GitHub de um artefato, pode ser usado pela API REST | 1234 |
artifact-url | URL para baixar um artefato. Pode ser usado em muitos cenários, como vinculação a artefatos em problemas ou solicitações pull. Os usuários devem estar logados para que este URL funcione. Este URL é válido desde que o artefato não tenha expirado ou o artefato, a execução ou o repositório não tenham sido excluídos | https://github.com/example-org/example-repo/actions/runs/1/artifacts/1234 |
steps :
- run : mkdir -p path/to/artifact
- run : echo hello > path/to/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : path/to/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : path/to/artifact/ # or path/to/artifact
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : path/**/[abc]rtifac?/*
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : |
path/output/bin/
path/output/test-results
!path/**/*.tmp
Para curingas suportados junto com comportamento e documentação, consulte @actions/glob que é usado internamente para procurar arquivos.
Se um padrão curinga for usado, a hierarquia de caminhos será preservada após o primeiro padrão curinga:
path/to/*/directory/foo?.txt =>
∟ path/to/some/directory/foo1.txt
∟ path/to/some/directory/foo2.txt
∟ path/to/other/directory/foo1.txt
would be flattened and uploaded as =>
∟ some/directory/foo1.txt
∟ some/directory/foo2.txt
∟ other/directory/foo1.txt
Se vários caminhos forem fornecidos como entrada, o ancestral menos comum de todos os caminhos de pesquisa será usado como o diretório raiz do artefato. Excluir caminhos não afeta a estrutura de diretórios.
Caminhos de arquivo relativos e absolutos são permitidos. Os caminhos relativos têm raiz no diretório de trabalho atual. Caminhos que começam com um caractere curinga devem ser colocados entre aspas para evitar serem interpretados como aliases YAML.
Se você estiver fazendo upload de dados grandes ou facilmente compactáveis para seu artefato, poderá se beneficiar ajustando o nível de compactação. Por padrão, o nível de compactação é 6
, o mesmo do GNU Gzip.
O valor pode variar de 0 a 9:
Níveis mais altos resultarão em melhor compactação, mas levarão mais tempo para serem concluídos. Para arquivos grandes que não são facilmente compactados, um valor 0
é recomendado para uploads significativamente mais rápidos.
Por exemplo, se você estiver enviando dados binários aleatórios, poderá economizar muito tempo desativando completamente a compactação, pois isso não será beneficiado:
- name : Make a 1GB random binary file
run : |
dd if=/dev/urandom of=my-1gb-file bs=1M count=1000
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : my-1gb-file
compression-level : 0 # no compression
Mas, se você estiver enviando dados que são facilmente compactados (como texto simples, código, etc.), você pode economizar espaço e custos ao ter um nível de compactação mais alto. Mas isso será mais pesado para a CPU e, portanto, mais lento para carregar:
- name : Make a file with a lot of repeated text
run : |
for i in {1..100000}; do echo -n 'foobar' >> foobar.txt; done
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : foobar.txt
compression-level : 9 # maximum compression
Se um caminho (ou caminhos) resultar em nenhum arquivo encontrado para o artefato, a ação será bem-sucedida, mas imprimirá um aviso. Em determinados cenários, pode ser desejável falhar na ação ou suprimir o aviso. A opção if-no-files-found
permite personalizar o comportamento da ação se nenhum arquivo for encontrado:
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : path/to/artifact/
if-no-files-found : error # 'warn' or 'ignore' are also available, defaults to `warn`
Ao contrário das versões anteriores de upload-artifact
, o upload para o mesmo artefato por meio de vários trabalhos não é compatível com v4
.
- run : echo hi > world.txt
- uses : actions/upload-artifact@v4
with :
# implicitly named as 'artifact'
path : world.txt
- run : echo howdy > extra-file.txt
- uses : actions/upload-artifact@v4
with :
# also implicitly named as 'artifact', will fail here!
path : extra-file.txt
Os nomes dos artefatos devem ser exclusivos, pois cada artefato criado é idempotente, portanto, vários trabalhos não podem modificar o mesmo artefato.
Em cenários de matriz, tome cuidado para não fazer upload acidentalmente para o mesmo artefato, caso contrário você encontrará erros de conflito. Seria melhor nomear o artefato com um prefixo ou sufixo da matriz:
jobs :
upload :
name : Generate Build Artifacts
strategy :
matrix :
os : [ubuntu-latest, windows-latest]
version : [a, b, c]
runs-on : ${{ matrix.os }}
steps :
- name : Build
run : ./some-script --version=${{ matrix.version }} > my-binary
- name : Upload
uses : actions/upload-artifact@v4
with :
name : binary-${{ matrix.os }}-${{ matrix.version }}
path : my-binary
Isso resultará em artefatos como: binary-ubuntu-latest-a
, binary-windows-latest-b
e assim por diante.
Anteriormente, o comportamento permitia que os nomes dos artefatos fossem iguais, o que resultava em mutações inesperadas e corrupção acidental. Os artefatos criados por upload-artifact@v4 são imutáveis.
Você pode usar ~
na entrada do caminho como substituto de $HOME
. A expansão básica do til é suportada:
- run : |
mkdir -p ~/new/artifact
echo hello > ~/new/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : my-artifacts
path : ~/new/**/*
Variáveis de ambiente junto com expressões de contexto também podem ser usadas para entrada. Para documentação, consulte contexto e sintaxe de expressão:
env :
name : my-artifact
steps :
- run : |
mkdir -p ${{ github.workspace }}/artifact
echo hello > ${{ github.workspace }}/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : ${{ env.name }}-name
path : ${{ github.workspace }}/artifact/**/*
Para variáveis de ambiente criadas em outras etapas, certifique-se de usar a sintaxe da expressão env
steps :
- run : |
mkdir testing
echo "This is a file to upload" > testing/file.txt
echo "artifactPath=testing/file.txt" >> $GITHUB_ENV
- uses : actions/upload-artifact@v4
with :
name : artifact
path : ${{ env.artifactPath }} # this will resolve to testing/file.txt at runtime
Os artefatos são retidos por 90 dias por padrão. Você pode especificar um período de retenção mais curto usando a entrada de retention-days
:
- name : Create a file
run : echo "I won't live long" > my_file.txt
- name : Upload Artifact
uses : actions/upload-artifact@v4
with :
name : my-artifact
path : my_file.txt
retention-days : 5
O período de retenção deve estar entre 1 e 90 inclusive. Para obter mais informações, consulte políticas de retenção de artefatos e logs.
Se um upload de artefato for bem-sucedido, uma saída artifact-id
estará disponível. Esse ID é um identificador exclusivo que pode ser usado com APIs REST do Artefato.
- uses : actions/upload-artifact@v4
id : artifact-upload-step
with :
name : my-artifact
path : path/to/artifact/content/
- name : Output artifact ID
run : echo 'Artifact ID is ${{ steps.artifact-upload-step.outputs.artifact-id }}'
jobs :
job1 :
runs-on : ubuntu-latest
outputs :
output1 : ${{ steps.artifact-upload-step.outputs.artifact-id }}
steps :
- uses : actions/upload-artifact@v4
id : artifact-upload-step
with :
name : my-artifact
path : path/to/artifact/content/
job2 :
runs-on : ubuntu-latest
needs : job1
steps :
- env :
OUTPUT1 : ${{needs.job1.outputs.output1}}
run : echo "Artifact ID from previous job is $OUTPUT1"
Embora não seja possível transformar um artefato, pode sobrescrevê-lo completamente. Mas observe que isso dará ao Artefato um novo ID, o anterior não existirá mais:
jobs :
upload :
runs-on : ubuntu-latest
steps :
- name : Create a file
run : echo "hello world" > my-file.txt
- name : Upload Artifact
uses : actions/upload-artifact@v4
with :
name : my-artifact # NOTE: same artifact name
path : my-file.txt
upload-again :
needs : upload
runs-on : ubuntu-latest
steps :
- name : Create a different file
run : echo "goodbye world" > my-file.txt
- name : Upload Artifact
uses : actions/upload-artifact@v4
with :
name : my-artifact # NOTE: same artifact name
path : my-file.txt
overwrite : true
Por padrão, os arquivos ocultos são ignorados por esta ação para evitar o upload acidental de informações confidenciais.
Se precisar fazer upload de arquivos ocultos, você pode usar a entrada include-hidden-files
. Quaisquer arquivos que contenham informações confidenciais que não deveriam estar no artefato carregado podem ser excluídos usando o path
:
- uses : actions/upload-artifact@v4
with :
name : my-artifact
include-hidden-files : true
path : |
path/output/
!path/output/.production.env
Arquivos ocultos são definidos como qualquer arquivo começando com .
ou arquivos dentro de pastas começando com .
. No Windows, arquivos e diretórios com o atributo oculto não são considerados arquivos ocultos, a menos que tenham a extensão .
prefixo.
Dentro de uma tarefa individual, há um limite de 500 artefatos que podem ser criados para essa tarefa.
Você também poderá ficar limitado por artefatos se tiver excedido sua cota de armazenamento compartilhado. O armazenamento é calculado a cada 6-12 horas. Consulte a documentação para obter mais informações.
Quando um artefato é carregado, todos os arquivos são reunidos em um arquivo Zip imutável. Atualmente não há como fazer download de artefatos em um formato diferente de Zip ou fazer download de conteúdos de artefatos individuais.
As permissões de arquivo não são mantidas durante o upload do artefato. Todos os diretórios terão 755
e todos os arquivos terão 644
. Por exemplo, se você tornar um arquivo executável usando chmod
e, em seguida, fizer upload desse arquivo, após o download, não será mais garantido que o arquivo seja definido como executável.
Se você precisar preservar as permissões, poderá tar
todos os seus arquivos juntos antes do upload do artefato. Após o download, o arquivo tar
manterá as permissões do arquivo e a diferenciação de maiúsculas e minúsculas.
- name : ' Tar files '
run : tar -cvf my_files.tar /path/to/my/directory
- name : ' Upload Artifact '
uses : actions/upload-artifact@v4
with :
name : my-artifact
path : my_files.tar
Na parte inferior da página de resumo do fluxo de trabalho, há uma seção dedicada aos artefatos. Aqui está uma captura de tela de algo que você pode ver:
Há um ícone de lixeira que pode ser usado para excluir o artefato. Este ícone aparecerá apenas para usuários que possuem permissões de gravação no repositório.
O tamanho do artefato é indicado em bytes. O tamanho do artefato exibido indica o tamanho do zip que upload-artifact
cria durante o upload.