image: tcitworld/mobilizon-ci

stages:
  - check
  - test
  - deploy

variables:
  MIX_ENV: "test"
  # DB Variables for Postgres / Postgis
  POSTGRES_DB: mobilizon_test
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: ""
  POSTGRES_HOST: postgres
  # DB Variables for Mobilizon
  MOBILIZON_DATABASE_USERNAME: $POSTGRES_USER
  MOBILIZON_DATABASE_PASSWORD: $POSTGRES_PASSWORD
  MOBILIZON_DATABASE_DBNAME: $POSTGRES_DB
  MOBILIZON_DATABASE_HOST: $POSTGRES_HOST
  GEOLITE_CITIES_PATH: "/usr/share/GeoIP/GeoLite2-City.mmdb"
  MOBILIZON_INSTANCE_REGISTRATIONS_OPEN: "true"

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - ~/.cache/Cypress
    - build/
    - deps/
    - js/node_modules
    - cache/Cypress

lint:
  stage: check
  script:
    - export EXITVALUE=0
    - mix deps.get
    - mix credo -a || export EXITVALUE=1
    - mix format --check-formatted --dry-run || export EXITVALUE=1
    - cd js
    - yarn install
    - yarn run lint || export EXITVALUE=1
    - yarn run build
    - cd ../
    - exit $EXITVALUE
  artifacts:
    expire_in: 1 day
    when: on_success
    paths:
      - priv/static

deps:
  stage: check
  script:
    - export EXITVALUE=0
    - mix deps.get
    - mix hex.outdated || export EXITVALUE=1
    - cd js
    - yarn outdated || export EXITVALUE=1
    - exit $EXITVALUE
  allow_failure: true

exunit:
  stage: test
  services:
  - name: mdillon/postgis:11
    alias: postgres
  before_script:
    - cd js
    - yarn install
    - yarn run build
    - cd ../
    - mix deps.get
    - MIX_ENV=test mix ecto.create
    - MIX_ENV=test mix ecto.migrate
  dependencies:
    - lint
  script:
    - mix coveralls

#cypress:
#  stage: test
#  services:
#  - name: mdillon/postgis:11
#    alias: postgres
#  script:
#    - mix deps.get
#    - cd js
#    - yarn install
#    - npx cypress install # just to be sure
#    - yarn run build
#    - cd ../
#    - MIX_ENV=e2e mix ecto.create
#    - MIX_ENV=e2e mix ecto.migrate
#    - MIX_ENV=e2e mix run priv/repo/e2e.seed.exs
#    - MIX_ENV=e2e mix phx.server &
#    - cd js
#    - npx wait-on http://localhost:4000
#    - if [ -z "$CYPRESS_KEY" ]; then npx cypress run; else npx cypress run --record --parallel --key $CYPRESS_KEY; fi
#  artifacts:
#    expire_in: 2 day
#    paths:
#      - js/tests/e2e/screenshots/**/*.png
#      - js/tests/e2e/videos/**/*.mp4


pages:
  stage: deploy
  script:
    - mkdir public
    - mkdocs build
    - mv site/* public/
    - mix deps.get
    - mix docs
    - mv doc public/backend
    - cd js
    - yarn install
    - yarn run styleguide:build
    - mv styleguide ../public/frontend
  only:
    - master
  artifacts:
    expire_in: 1 hour
    paths:
      - public