DEV Community

Cover image for Flutter + Fastlane + Github Actions
Yago Souza Oliveira
Yago Souza Oliveira

Posted on

Flutter + Fastlane + Github Actions

Neste post vamos abordar como configurar o Githbub Actions para realizar build e distribuir via Fastlane.

Não sabe configurar o Fastlane? Então leia aqui.

Primeiro, configuramos o arquivo .yaml para ser usado no Actions. Todos os arquivos das actions devem ficar dentro de .github/workflows na raiz do seu projeto. Estes arquivos serão lidos pelo Github e acionados conforme configurados.

Criado o arquivo test_fastlane.yaml colocamos primeiro:

name: App Distribution With Fastlane

on:
  push:
    branches: [master]

Enter fullscreen mode Exit fullscreen mode

Aqui definimos o nome da Action (isso facilita quando você tem mais de uma e quer filtrar) e a forma como ela vai ser acionada (aqui no caso ela vai executar a cada Pull Request aberto na branch develop).

Definido isso, continuamos:

jobs:
  run_test:
    runs-on: macos-latest
Enter fullscreen mode Exit fullscreen mode

jobs são os trabalhos que serão feitos na execução daquela action. Dentro dele você pode definir o que será instalado, o que vai ser executado e qual Sistema Operacional será utilizado. Vale lembrar que cada job executa de forma simultânea e independente, então não é interessante colocar jobs que sejam interligadas. Mas caso seja necessário utilize-as de forma assíncrona ou realizando dependência entre jobs.

Nos jobs você define o SO em runs-on. Estão disponíveis 3 SOs: Ubuntu, Windows e MacOS.

Depois disso chegou a hora interessante: definir os steps:

 steps:
    - name: Checkout repository
      uses: actions/checkout@v2
    - name: Install Java
      uses: actions/setup-java@v1
      with:
        java-version: ${{ env.java_version }}
    - name: Cache Flutter
      uses: actions/cache@v2
      with:
        path: /opt/hostedtoolcache/flutter
        key: ${{ runner.OS }}-flutter-install-cache-${{ env.flutter_version }}

    - name: Install Flutter    
      uses: subosito/flutter-action@v1
      with:
        flutter-version:  ${{ env.flutter_version }}
    - name: Install dependencies
      run: flutter pub get
    - name: Generate Files
      run: flutter packages pub run build_runner build --delete-conflicting-outputs
    - name: App Test
      run: flutter test
    - name: Build iOS
      run: flutter build ios --no-codesign -t lib/config/main_production.dart
Enter fullscreen mode Exit fullscreen mode

Aqui já colocamos todas as steps necessárias para poder executar os comandos do Flutter. Primeiro utilizamos a action que irá acessar seu repositório, em seguida instalar o Java e, por fim, instalar o Flutter. No Flutter inserimos o cache para que nas próximas execuções ele não precise baixar tudo novamente (lembre que cada minuto no Actions é precioso) e em seguida todos os comandos que forem necessários para realizar build e executar os testes no projeto.

No ambiente em que trabalho preferi definir dois jobs: Um para executar o build do iOS no MacOS e outro para executar o build do Android no Ubuntu. Motivo: 1 min de MacOS consome 10 do seu tempo total no Actions. Os 3min de build do Android que você fizer irá tirar 30 minutos do teu tempo total, portanto, fica mais barato realizar dois jobs (apesar de executarem praticamente os mesmos comandos).

Depois de feito isso podemos executar o Fastlane

    - name: Install Ruby    
      uses: actions/setup-ruby@v1
      with:
        ruby-version: '2.7.2'

    - name: Fastlane iOS        
      uses: maierj/fastlane-action@v2.0.1
      with:
        lane: 'homologacao_firebase'
        subdirectory: 'ios'

Enter fullscreen mode Exit fullscreen mode

Acima instalamos o Ruby e em seguida a Action do Fastlane, indicando o subdirectory e qual a lane iremos executar.

Nas configurações do Fastlane são mais simples pois não nos preocupamos com o build do Flutter, executando exclusivamente as assinaturas e entrega ao Firebase Distribution (no caso do iOS). Essa parte do Fastlane para iOS abordaremos em um outro post.

É isso, qualquer sugestão podem colocar nos comentários que iremos corrigir e acrescentar na medida do possível.

Referências:

Workflow syntax for GitHub Actions, GITHUB. Disponível em: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions. Acesso em 15 de Fevereiro de 2021, às 15:35.

Distribuir apps iOS para testadores com o fastlane, GOOGLE. Disponível em: https://firebase.google.com/docs/app-distribution/ios/distribute-fastlane. Acesso em 15 de Fevereiro de 2021, às 15:37.

Deploying Flutter app to Firebase App Distribution using Fastlane, CODEMAGIC. Disponível em: https://blog.codemagic.io/deploying-flutter-app-to-firebase-app-distribution-using-fastlane/. Acesso em 15 de Fevereiro de 2021, às 15:40.

CI/CD com GitHub Actions + Fastlane LACERDA, Aryella. Disponível em: https://medium.com/naqueles-dias/ci-cd-com-github-actions-fastlane-c4c68c37be88. Acesso em 15 de Fevereiro de 2021, às 15:39.

Photo by Riley McCullough on Unsplash

Top comments (0)