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

gabrielrufino

Gabriel Rufino

Posted on June 6, 2020

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!

💖 💪 🙅 🚩
gabrielrufino
Gabriel Rufino

Posted on June 6, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related