Flutter et GitLabCI

Flutter et GitLabCI

Si vous souhaitez utiliser GitLabCI pour vos projet Flutter, voici la base du fichier .gitlab-ci.yml qu’il vous faudras:

Il faut commencer par spécifier une image docker a utiliser:

image: openjdk:8-jdk

Nous déclarons ensuite des variables afin de pouvoir mettre a jour plus facilement:

variables:
  ANDROID_COMPILE_SDK: "28"
  ANDROID_BUILD_TOOLS: "28.0.2"
  ANDROID_SDK_TOOLS:   "4333796"
  FLUTTER_VERSION: "https://storage.googleapis.com/flutter_infra/releases/stable/linux/flutter_linux_v1.12.13+hotfix.5-stable.tar.xz"

Nous enchainons avec la description du test, les installtion de flutter, android sdk et autres

test:
  before_script:
    - apt-get -qq update --yes
    - apt-get -qq install --yes wget tar unzip lib32stdc++6 lib32z1 lcov
    - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
    - unzip -q -d android-sdk-linux android-sdk.zip
    - mkdir /root/.android
    - touch /root/.android/repositories.cfg
    - echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
    - echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
    - echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
    - export ANDROID_HOME=$PWD/android-sdk-linux
    - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
    - export CI='true'
    # temporarily disable checking for EPIPE error and use yes to accept all licenses
    - set +o pipefail
    - yes | android-sdk-linux/tools/bin/sdkmanager --licenses
    - set -o pipefail
    # flutter sdk setup
    - wget --quiet --output-document=flutter-sdk.tar.xz $FLUTTER_VERSION
    - tar -xf flutter-sdk.tar.xz
    - export PATH=$PATH:$PWD/flutter/bin
    - echo flutter.sdk=$PWD/flutter > android/local.properties
    - flutter packages get

Puis la partit test en elle même et la creation d’un artefact contenant les resultat de la couverture de code:

  script:
    - flutter test --coverage
    - genhtml coverage/lcov.info --output=coverage
  artifacts:
    paths:
      - coverage/
    expire_in: 5 days

Pour finir la partit publication de la couverture des tests dans les GitLab Pages:

pages:
  stage: .post
  script:
    - mkdir public
    - rm -Rf public/*
    - mv README.md public/README.md
    - mv -v coverage/* public/
  artifacts:
    paths:
      - public
  only:
    - master

Ce qui nous donne au final:

image: openjdk:8-jdk

variables:
  ANDROID_COMPILE_SDK: "28"
  ANDROID_BUILD_TOOLS: "28.0.2"
  ANDROID_SDK_TOOLS:   "4333796"
  FLUTTER_VERSION: "https://storage.googleapis.com/flutter_infra/releases/stable/linux/flutter_linux_v1.12.13+hotfix.5-stable.tar.xz"

test:
  before_script:
    - apt-get -qq update --yes
    - apt-get -qq install --yes wget tar unzip lib32stdc++6 lib32z1 lcov
    - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
    - unzip -q -d android-sdk-linux android-sdk.zip
    - mkdir /root/.android
    - touch /root/.android/repositories.cfg
    - echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
    - echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
    - echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
    - export ANDROID_HOME=$PWD/android-sdk-linux
    - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
    - export CI='true'
    # temporarily disable checking for EPIPE error and use yes to accept all licenses
    - set +o pipefail
    - yes | android-sdk-linux/tools/bin/sdkmanager --licenses
    - set -o pipefail
    # flutter sdk setup
    - wget --quiet --output-document=flutter-sdk.tar.xz $FLUTTER_VERSION
    - tar -xf flutter-sdk.tar.xz
    - export PATH=$PATH:$PWD/flutter/bin
    - echo flutter.sdk=$PWD/flutter > android/local.properties
    - flutter packages get
  script:
    - flutter test --coverage
    - genhtml coverage/lcov.info --output=coverage
  artifacts:
    paths:
      - coverage/
    expire_in: 5 days

pages:
  stage: .post
  script:
    - mkdir public
    - rm -Rf public/*
    - mv README.md public/README.md
    - mv -v coverage/* public/
  artifacts:
    paths:
      - public
  only:
    - master

Un dépot git est disponible: https://gitlab.com/dayo/testgitlabciflutter/ et la couverture de code https://dayo.gitlab.io/testgitlabciflutter/

Laisser un commentaire