DEV Community

Cover image for Run checks for Flutter projects with GitHub Actions
Arthur Denner
Arthur Denner

Posted on • Edited on

6 1

Run checks for Flutter projects with GitHub Actions

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
jobs:
  analyze-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-java@v1
        with:
          java-version: '12.x'
      - uses: subosito/flutter-action@v1
        with:
          channel: 'stable'
      - run: flutter pub get
      - run: flutter build aot
      - run: flutter analyze
      - run: flutter test
Enter fullscreen mode Exit fullscreen mode

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
        with:
          token: ${{secrets.CODECOV_TOKEN}} # not required for public repos
          file: ./coverage/lcov.info
Enter fullscreen mode Exit fullscreen mode

Check out the codecov-action documentation for more information.

Check out an example repo here.

Notes

  • 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.

Sentry blog image

The countdown to March 31 is on.

Make the switch from app center suck less with Sentry.

Read more

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more