image: node:10.15.1

variables:
  CYPRESS_CACHE_FOLDER: "$CI_PROJECT_DIR/cache/Cypress"

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
  - node_modules
  - ${CYPRESS_CACHE_FOLDER}

stages:
  - test
  - build
  - deploy
  - integration tests

lint:
  stage: test
  script:
    - yarn install
    - yarn run lint

flow:
  stage: test
  script:
    - yarn install
    - yarn run flow

unit:
  stage: test
  script:
    - yarn install
    - yarn run test

build development:
  stage: build
  script:
    - yarn install
    - yarn run build:dev
  artifacts:
    expire_in: 1 week
    paths:
      - build/dev

build beta:
  stage: build
  script:
    - yarn install
    - yarn run build:beta
  only:
    - beta
  artifacts:
    expire_in: 1 week
    paths:
      - build/beta
      - scripts/s3sync.sh

build stable:
  stage: build
  script:
    - yarn install
    - yarn run build:stable
  only:
    - stable
  artifacts:
    expire_in: 1 week
    paths:
      - build/stable
      - scripts/s3sync.sh 

build emulator and bridge image:
  variables:
    CONTAINER_NAME: "$CI_REGISTRY/emulator-bridge-tests"
  image: docker:latest
  services:
    - docker:dind
  before_script:
    - docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
  stage: build
  when: manual
  script:
    - docker pull $CONTAINER_NAME:latest || true
    - docker build --cache-from $CONTAINER_NAME:latest --tag $CONTAINER_NAME:$CI_COMMIT_SHA --tag $CONTAINER_NAME:latest .
    - docker push $CONTAINER_NAME:$CI_COMMIT_SHA
    - docker push $CONTAINER_NAME:latest

deploy review:
  stage: deploy
  variables:
    GIT_STRATEGY: none
  dependencies:
    - build development
  environment:
    name: $CI_BUILD_REF_NAME
    url: $BASE_REVIEW_URL/$CI_BUILD_REF_NAME
    on_stop: delete review
  script:
    - echo "Deploy a review app"
    - '[ -z "${DEPLOY_BASE_DIR}" ] && echo "Deploy base dir cannot be empty" && exit 255'
    - env
    - mkdir -p "${DEPLOY_BASE_DIR}/${CI_BUILD_REF_NAME}"
    - echo "Copy dev build to web server ${DEPLOY_BASE_DIR}/${CI_BUILD_REF_NAME}..."
    - rsync --delete -va build/dev/ "${DEPLOY_BASE_DIR}/${CI_BUILD_REF_NAME}/"
    - curl "https://api.telegram.org/bot699197118:AAGXNTaC5Q-ljmy_dMvaIvAKy1XjlkA3Iss/sendMessage?chat_id=-1001354778014&text=https://trezor-wallet-dev.trezor.io/${CI_BUILD_REF_NAME}"
    - 'echo "Remove working dir, workaround for cache" && rm -r ./*'
  only:
    - branches
  tags:
    - deploy

deploy stage beta:
  stage: deploy
  variables:
    GIT_STRATEGY: none
    AWS_ACCESS_KEY_ID: $STAGE_AWS_ACCESS_KEY_ID
    AWS_SECRET_ACCESS_KEY: $STAGE_AWS_SECRET_ACCESS_KEY
  when: manual
  dependencies:
    - build beta
  script:
    - scripts/s3sync.sh stage beta
  only:
    - beta
  tags:
    - deploy

deploy stage stable:
  stage: deploy
  variables:
    GIT_STRATEGY: none
    AWS_ACCESS_KEY_ID: $STAGE_AWS_ACCESS_KEY_ID
    AWS_SECRET_ACCESS_KEY: $STAGE_AWS_SECRET_ACCESS_KEY
  when: manual
  dependencies:
    - build stable
  script:
    - scripts/s3sync.sh stage stable
  only:
    - stable
  tags:
    - deploy

delete review:
  before_script: []
  stage: deploy
  variables:
    GIT_STRATEGY: none
  when: manual
  environment:
    name: $CI_BUILD_REF_NAME
    action: stop
  script:
    - '[ -z "${DEPLOY_BASE_DIR}" ] && echo "Deploy dir can not be empty" && exit 1'
    - '[ -z "${CI_BUILD_REF_NAME}" ] && echo "Build name can not be empty" && exit 1'
    - '[ ! -d "${DEPLOY_BASE_DIR}/${CI_BUILD_REF_NAME}" ] && echo "Folder can not be found, skipping..." && exit 0'
    - 'rm -r "${DEPLOY_BASE_DIR}/${CI_BUILD_REF_NAME}"'
  only:
    - branches
  tags:
    - deploy

# integration tests:
#   image: docker:latest
#   services:
#     - docker:dind
#   stage: integration tests
#   script:
#     - 'export SHARED_PATH="$(dirname ${CI_PROJECT_DIR})/shared"'
#     - rm -r ${SHARED_PATH} || true
#     - docker build -f Dockerfile.test -t wallet-emulator-bridge-tests .
#     - mkdir -p ${SHARED_PATH}/trezor-wallet/screenshots
#     - mkdir -p ${SHARED_PATH}/trezor-wallet/videos
#     - docker run --volume ${SHARED_PATH}/trezor-wallet/screenshots:/trezor-wallet/test/screenshots --volume ${SHARED_PATH}/trezor-wallet/videos:/trezor-wallet/test/videos --rm wallet-emulator-bridge-tests
#     - find ${SHARED_PATH}
#     - mkdir trezor-wallet
#     - cp -r ${SHARED_PATH}/ trezor-wallet/
#   artifacts:
#     when: always
#     expire_in: 1 week
#     paths:
#       - trezor-wallet/
