image: tcitworld/mobilizon-ci

stages:
  - check
  - test
  - deploy
  - docker

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
#     # Mobilizon documentation is now on https://framagit.org/framasoft/joinmobilizon/documentation
#     # 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

.docker: &docker
  stage: docker
  cache: {}
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  before_script:
    - mkdir -p /kaniko/.docker
    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$CI_REGISTRY_AUTH\",\"email\":\"$CI_REGISTRY_EMAIL\"}}}" > /kaniko/.docker/config.json
  script:
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/docker/production/Dockerfile --destination $DOCKER_IMAGE_NAME

build-docker-master:
  <<: *docker
  only:
    - schedules
  variables:
    DOCKER_IMAGE_NAME: framasoft/mobilizon:master

build-docker-tag:
  <<: *docker
  only:
    - tags
  variables:
    DOCKER_IMAGE_NAME: framasoft/mobilizon:$CI_COMMIT_TAG