Gabriel Rufino
Posted on June 6, 2020
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/
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
Não vou ter problemas tão cedo com limite de espaço do Github Packages.
Até a próxima!
Posted on June 6, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.