Arthur Denner

Run checks for Flutter projects with GitHub Actions

Run checks for Flutter projects with GitHub Actions

Subscribe to my newsletter and never miss my upcoming articles

On a previous post, I demonstrated how to run checks during a git commit with Lefthook.

That workflow is good, however, it's very easy to bypass the checks with the --no-verify flag.

An improvement to that workflow is to run those checks on a pipeline to make sure that every PR will be formatted and all tests are passing.

Let's see how to achieve this using GitHub Actions.

  • Create a file under the folder .github/workflows, e.g: checks.yml;
  • Define the job on the file:
name: Run analyze and tests
on: pull_request
    runs-on: ubuntu-latest
      - uses: actions/checkout@v1
      - uses: actions/setup-java@v1
          java-version: '12.x'
      - uses: subosito/flutter-action@v1
          channel: 'stable'
      - run: flutter pub get
      - run: flutter build aot
      - run: flutter analyze
      - run: flutter test

And that's it! Now, whenever you open and update a PR, flutter build aot, flutter analyze and flutter test will run after Java and Flutter are installed in the pipeline. If any of the commands fail, the PR will get a failed check. ❌

Bonus - Test Coverage report

Another improvement is to report code coverage on every PR. The example below uses Codecov but there are other services for it too - although the usage will be probably different.

To integrate it, update the workflow with:

      - ... # same as before
      - run: flutter analyze
      - run: flutter test --coverage
      - uses: codecov/codecov-action@v1
          token: ${{secrets.CODECOV_TOKEN}} # not required for public repos
          file: ./coverage/

Check out the codecov-action documentation for more information.

Check out an example repo here.


  • The example uses the pull_request event, but GitHub Actions support many others - see documentation;
  • The example uses the stable channel of Flutter, but the action supports other channels and specific versions as well - see documentation;
  • The example uses GitHub Actions, but the workflow can be achieved using other pipeline services too - TravisCI, CircleCI, etc.
    • Example with GitLab CI here.

If you're using a different solution or have any suggestions to improve this example, feel free to share it in the comments.

I hope you enjoyed this post and follow me on any platform for more.

Share this