Flutter CI with Gitlab

12/26/2019

Getting up and running with Gitlab CI is quick and easy. I found cirrusci has a great collection of prebuilt Flutter docker images! These images are a bit on the heavy side at ~1.3GB, however, they are great off the shelf solution to get running CI quickly.

In a previous post, How to pull a private NPM dependency with Gitlab CI, I showed how I pull private NPM dependencies. When I started with Flutter I figured this same approach would work.

I was wrong!

Again I am using a private repo to host private code. My pubspec.yaml looks like the below. I simply point my dependency to a git hash. Simple enough. This worked fine on my local machine.

dependencies:
  flutter:
    sdk: flutter

  mypackage:
    git:
      url: git@gitlab.com:kmcgill88/my-repo.git
      ref: 692c68ac373d05b00e39d076a8b00fa12c4ff8e8

The above reference failed in Gitlab CI since flutter packages get is using git in the background to pull this dependency. My private ssh is installed on my local machine but not in the docker container running the build.

I found an easy trick to use the Gitlab CI build credentials supplied to every Gitlab build. git to the rescue! git config --global url. and .insteadOf (see before_script below). This solution allows me to keep the git ssh approach while running on my local machine and clone this private pub package during build time.

image: cirrusci/flutter:v1.12.13-hotfix.5

stages:
  - test

before_script:
  - git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/kmcgill88/my-repo.git".insteadOf git@gitlab.com:kmcgill88/my-repo.git

Test:
  stage: test
  script:
    - flutter packages get
    - flutter analyze
    - flutter test
  tags:
    - docker

Cheers!