stages:
  - coverage
  - builddocs
  - deploy
  
coverage:
  tags:
    - linux
  stage: coverage
  image: debian:testing
  dependencies: []
  script:
    - apt update
    - apt install -y curl gnupg2 git
    - curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
    - curl https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list
    - apt update
    - apt install -y dart chromium lcov libolm3 sqlite3 libsqlite3-dev
    - ln -s /usr/lib/dart/bin/pub /usr/bin/
    - useradd -m test
    - chown -R 'test:' '.'
    - chmod +x ./prepare.sh
    - chmod +x ./test.sh
    - su -c ./prepare.sh test
    - su -c ./test.sh test
  artifacts:
    paths:
      - coverage/

coverage_without_olm:
  tags:
    - linux
  stage: coverage
  image: debian:testing
  dependencies: []
  script:    
    - apt update
    - apt install -y curl gnupg2 git sqlite3 libsqlite3-dev
    - curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
    - curl https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list
    - apt update
    - apt install -y dart
    - ln -s /usr/lib/dart/bin/pub /usr/bin/
    - useradd -m test
    - chown -R 'test:' '.'
    - chmod +x ./test.sh
    - pub get
    - pub run test

code_analyze:
  tags:
    - docker
  stage: coverage
  image: cirrusci/flutter
  dependencies: []
  script:
    - flutter format lib/ test/ test_driver/ --set-exit-if-changed
    - flutter analyze

build-api-doc:
  tags:
    - docker
  stage: builddocs
  image: cirrusci/flutter
  script:
    - dartdoc --exclude "dart:async,dart:collection,dart:convert,dart:core,dart:developer,dart:io,dart:isolate,dart:math,dart:typed_data,dart:ui"
  artifacts:
    paths:
      - doc/api/
  only:
    - master

build-doc:
  tags:
    - docker
  stage: builddocs
  image: registry.gitlab.com/larodar/mdbook-dtmo:latest
  script:
    - cd doc
    - mdbook-dtmo build -d public
    - mv public ../doc-public
  artifacts:
    paths:
      - doc-public
  only:
    - master

pages:
  tags:
    - linux
  stage: deploy
  image: alpine:latest
  script:
    - mv doc/api/ ./home/api
    - mv doc-public ./home/doc
    - mv home public
  dependencies:
    - build-api-doc
    - build-doc
  artifacts:
    paths:
      - public
  only:
    - master