variables:
  CONFIGURATION_REPOSITORY: https://gitlab.coko.foundation/bogdan/xpub-faraday-deployment-config.git
  DOCKER_REPO: $CI_ECR_URL
  DOCKER_REPO_REVIEW: $REVIEW_ECR

stages:
  - build
  - test
  - push
  - deploy
  - rollback

build:
  image: docker:latest
  stage: build
  script:
    # Setup
    - export AWS_REGION="eu-west-1"
    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
    - apk update
    - apk --no-cache add --update curl python python-dev py-pip
    - pip install awscli --upgrade --user
    - export PATH=~/.local/bin:/usr/bin/:$PATH
    # AUTH
    - CERT=`aws ecr get-login --no-include-email --region ${AWS_REGION}`
    - ${CERT}
    # Build
    - docker build -t ${CI_PROJECT_NAME}:$CI_COMMIT_SHA .
    - docker tag $CI_PROJECT_NAME:$CI_COMMIT_SHA $DOCKER_REPO:$CI_COMMIT_SHA
    - docker push $DOCKER_REPO:$CI_COMMIT_SHA

lint:
  image: $DOCKER_REPO:$CI_COMMIT_SHA
  stage: test
  variables:
    GIT_STRATEGY: none
  script:
    - cd ${HOME}
    - npm run lint

test:
  image: $DOCKER_REPO:$CI_COMMIT_SHA
  stage: test
  variables:
    GIT_STRATEGY: none
  script:
    - cd ${HOME}
    - npm run test

push:qa:
  image: docker:latest
  stage: push
  only:
    - develop
  variables:
    NODE_ENV: test
  script:
    # Setup
    - export AWS_REGION="eu-west-1"
    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
    - apk update
    - apk --no-cache add --update curl python python-dev py-pip
    - pip install awscli --upgrade --user
    - export PATH=~/.local/bin:/usr/bin/:$PATH
    # AUTH
    - CERT=`aws ecr get-login --no-include-email --region ${AWS_REGION}`
    - ${CERT}
    # Tag
    - docker tag ${CI_PROJECT_NAME}:$CI_COMMIT_SHA $DOCKER_REPO:latest
    - docker push $DOCKER_REPO:latest

push:staging:
  image: docker:latest
  when: manual
  only:
    - staging
    - master
  stage: push
  variables:
    NODE_ENV: production
  script:
    # Setup
    - export AWS_REGION="eu-west-1"
    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
    - apk update
    - apk --no-cache add --update curl python python-dev py-pip
    - pip install awscli --upgrade --user
    - export PATH=~/.local/bin:/usr/bin/:$PATH
    # AUTH
    - CERT=`aws ecr get-login --no-include-email --region ${AWS_REGION}`
    - ${CERT}
    # Tag
    - docker tag ${CI_PROJECT_NAME}:$CI_COMMIT_SHA $DOCKER_REPO:staging
    - docker push $DOCKER_REPO:staging

push:production:review:
  image: docker:latest
  stage: push
  when: manual
  only:
    - master
  variables:
    NODE_ENV: production
  script:
    # Setup
    - export AWS_REGION="eu-west-1"
    - export AWS_ACCESS_KEY_ID=$REVIEW_AWS_ACCESS
    - export AWS_SECRET_ACCESS_KEY=$REVIEW_AWS_SECRET
    - apk update
    - apk --no-cache add --update curl python python-dev py-pip
    - pip install awscli --upgrade --user
    - export PATH=~/.local/bin:/usr/bin/:$PATH
    # AUTH
    - CERT=`aws ecr get-login --no-include-email --region ${AWS_REGION}`
    - ${CERT}
    # Tag
    - docker tag ${CI_PROJECT_NAME}:$CI_COMMIT_SHA $DOCKER_REPO_REVIEW:production
    - docker push $DOCKER_REPO_REVIEW:production

deploy:qa:
  image: pubsweet/deployer:latest
  stage: deploy
  only:
    - develop
  variables:
    PACKAGE_NAME: xpub-faraday
    IMAGE_REPO: $CI_ECR_URL
    IMAGE_TAG: latest
    NODE_ENV: test
  environment:
    name: qa
    url: http://qa.review.hindawi.com
  script:
    - source deploy.sh
    - create_deployment

deploy:styleguide:
  image: pubsweet/deployer:latest
  stage: deploy
  when: manual
  only:
    - develop
  variables:
    PACKAGE_NAME: xpub-styleguide
    IMAGE_REPO: $CI_ECR_URL
    IMAGE_TAG: latest
  environment:
    name: styleguide
    url: http://styleguide.review.hindawi.com
  script:
    - source deploy.sh
    - create_deployment

deploy:staging:
  image: pubsweet/deployer:latest
  stage: deploy
  when: manual
  only:
    - staging
    - master
  variables:
    PACKAGE_NAME: xpub-faraday
    IMAGE_REPO: $CI_ECR_URL
    IMAGE_TAG: staging
    NODE_ENV: production
  environment:
    name: staging
    url: http://demo.review.hindawi.com
  script:
    - source deploy.sh
    - create_deployment

deploy:production:review:
  image: pubsweet/deployer:latest
  stage: deploy
  when: manual
  only:
    - master
  variables:
    PACKAGE_NAME: xpub-faraday
    IMAGE_REPO: $REVIEW_ECR
    IMAGE_TAG: production
    NODE_ENV: production
  environment:
    name: production
    url: http://review.hindawi.com
  script:
    - source deploy.sh
    - create_deployment