Boehrsi.de - IT und Gaming Blog

GitHub Actions - Flutter automatisieren und mit Codecov testen

Erstellt am event Uhr von account_circle Boehrsi in label Development
GitHub Actions - Flutter automatisieren und mit Codecov testen Bild

Sowohl GitHub Actions, wie auch Flutter waren bereits häufiger Thema hier im Blog und heute geht es um die Kombination aus beiden. Bei einem Großteil meiner GitHub Projekte nutze ich mittlerweile GitHub Actions für diverse Aufgaben und bei meinen Flutter Projekten sieht dies nicht anders aus.
Aktuell nutze ich Flutter Action open_in_new für die eigentlichen Flutter Befehle, Codecov open_in_new für das automatische Hochladen der Tests und abschließend Dart/Flutter Package Analyzer open_in_new, um das Formatting und meinen Pub.dev Score zu überprüfen. Diese Kombination erlaubt es mir mit nur einem Push einen Build zu analysieren, die Tests auszuführen und direkt bei Codecov zu hinterlegen.

Diesen Flow habe ich für meinen develop und main Branch aktiviert, sodass ich auf dem develop Branch arbeiten kann und automatisch alles geliefert bekomme was ich benötige, um zu überblicken ob ich z. B. Fehler eingebaut habe oder mein Pub.dev Score nicht mehr stimmt.
Der eigentliche Build-Prozess ist dabei relativ simple, denn mit Flutter Action reicht die Angabe des zu nutzenden Channels und der auszuführenden Flutter Befehle. Schon werden in meinem Fall die Tests mit Coverage Report erstellt. Welche dann via Codecov hochgeladen werden.

test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: subosito/flutter-action@v1
        with:
          channel: dev
      - run: flutter pub get
      - run: flutter test --coverage
      - uses: codecov/codecov-action@v1

Codecov open_in_new ist eine Plattform die euch beim verwalten und betrachten eurer Tests hilft. Selbige werden übersichtlich aggregiert und in diversen Ansichten dargestellt. Für Open Source Projekte ist das Ganze kostenlos verfügbar, genauso wie für kleinere interne Projekte. Bei größeren Projekten / Teams fallen kosten an.
Mir gefällt die Plattform sehr gut, vor allem da die Integration sehr einfach war. Nach meinem Login und der Verbindung mit GitHub, konnte ich öffentliche Projekte direkt einbinden und musste nicht mal einen Token oder ähnliches in meinen GitHub Actions hinterlegen.

Die Überprüfung der Code Qualität abseits der Tests, wird wie erwähnt mit dem Dart/Flutter Package Analyzer umgesetzt. Auch hier ist die Einrichtung sehr einfach, da man einfach nur die Action und den zu nutzenden githubToken angibt. Selbiger ist übrigens Out-Of-The-Box verfügbar.

analyze:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: axel-op/dart-package-analyzer@v3
        with:
          githubToken: ${{ secrets.GITHUB_TOKEN }}

Auf diesem Weg erhalte ich eine Überprüfung der oben genannten Punkte und der Pub.dev Score Report wird direkt im durchgeführten Run hinterlegt. Wenn mehrere Runs gleichzeitig laufen, landet der Report für identische Commits scheinbar nur in einem Run, sodass man ihn kurz suchen muss. Dies ist bis dato das einzige kleine Problem, welches aber absolut nicht schwerwiegend ist.

Alles in allem kann ich mit zwei einfachen Workflow Jobs (siehe GitHub open_in_new) mein Projekt auf verschiedenen Ebenen überprüfen und mich für Releases absichern. Diese Art der Automatisierung ist so simpel, dass ich sie sogar für sehr kleine Projekte nutzen und empfehlen würde.
Falls ihr übrigens mit reinem Dart unterwegs seid, also keine Flutter App baut, dann dürfte euch vielleicht die offizielle Setup Dart SDK open_in_new Action interessieren. Selbige ist ähnlich der oben genannten Flutter Action, aber eben für Dart.

Related Links
Kommentare  
Kommentar erstellen
Mit dem Abschicken des Kommentars erklären sie sich mit der in der Datenschutzerklärung dargelegten Datenerhebung für Kommentare einverstanden. Spam, unangebrachte Werbung und andere unerwünschte Inhalte werden entfernt. Das Abonnieren via E-Mail ist nur für E-Mail Adressen erlaubt die Sie rechtmäßig administrieren. Widerrechtliche Abonnements werden entfernt.