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 --strict -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 prettier --ignore-path="src/i18n/*" -c . || 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 docs disabled because of https://github.com/elixir-lang/ex_doc/issues/1172
    # - 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