DEV Community

Cover image for Como automatizar a remoção de artifacts gerados no Github Actions
Gabriel Rufino
Gabriel Rufino

Posted on

Como automatizar a remoção de artifacts gerados no Github Actions

Nessa semana me encontrei com um desafio: limpar artifacts no github actions para liberar espaço. Meus workflows estavam gerando erro porque não havia mais espaço pra subir um artifact.

Eu automatizei o build da versão android de um app desenvolvido em react native, que gera um arquivo .aab de aproximadamente 30 MB. Hoje, o Github Packages disponibiliza 500 MB no plano free, o que resultou em uns 16 workflows bem sucedidos até que eu esbarrei com esse limite através de um erro.

Veja abaixo meu workflow de build para android:

name: Build app on: push: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install npm dependencies run: npm install - name: Run jetify run: npx jetify - name: Build android app run: | cd android/ ENVFILE=.env.production ./gradlew bundleRelease - name: Upload android build uses: actions/upload-artifact@v1 with: name: app.aab path: android/app/build/outputs/bundle/release/ 
Enter fullscreen mode Exit fullscreen mode

Fiz da forma mais primitiva possível: entrei em cada workflow e removi os artifacts gerados.

Mas não fui inteligente, com certeza havia alguma maneira de automatizar isso.

Procurei algumas e me deparei com duas possibilidades:

1. Usando a API do github

Uma opção era criar um serviço online que rodasse periodicamente e fizesse requisições para a remoção dos artifacts através desse endpoint http: Delete an artifact

2. Usando uma action pronta

Essa foi a solução que escolhi! Rápida, fácil!

Encontrei uma action pronta no markplace do github: Purge artifacts

Os dois parâmetros principais são:

  • A periodicidade
  • A definição de um artifact expirado

A periodicidade nada mais é do que um cron para definir em momentos o workflow deve executar. A definição de um artifact expirado trata-se do vencimento de um artifact. Um artifact "vencido" deve ser removido. Isso evita que o workflow remova artifacts recentes que não deveriam ser removidos.

No meu caso, usei "0 0 * * * *" e usei "7 days" como vencimento.

Veja abaixo o novo workflow que criei:

name: 'Clear old artifacts' on: schedule: - cron: '0 0 * * *' # every 00:00 jobs: clear-artifacts: runs-on: ubuntu-latest steps: - uses: kolpav/purge-artifacts-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }} expire-in: 7days 
Enter fullscreen mode Exit fullscreen mode

Não vou ter problemas tão cedo com limite de espaço do Github Packages.

Até a próxima!

Top comments (0)