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 phx.server &
    - cd js
    - npx wait-on http://localhost:4000
    - npx cypress run --record --parallel --key $CYPRESS_KEY
  artifacts:
    expire_in: 2 day
    paths:
      - js/tests/e2e/screenshots/**/*.png
      - js/tests/e2e/videos/**/*.mp4


pages:
  stage: deploy
  script:
    - mkdir 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