image: ${DEVOPS_REGISTRY}usgs/centos:latest

stages:
  - test
  - integration
  - deploy

variables:
  CI_REGISTRY: ${CODE_REGISTRY}
  CI_REGISTRY_IMAGE: ${CODE_REGISTRY_IMAGE}

## --------------------------------------------------
# Templates
## --------------------------------------------------

.adjust_image_names:
  before_script:
    - IMAGE_NAME=usgs/${APP_NAME}:${CI_COMMIT_REF_SLUG}
    - IMAGE_NAME=${IMAGE_NAME/:master/:latest}
    - INTERNAL_IMAGE_NAME=${CI_REGISTRY_IMAGE}/${IMAGE_NAME}
    - STACK_NAME=${APP_NAME}

.build_docker_image:
  cache: {}
  extends:
    - .adjust_image_names
  image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest
  only:
    - master@ghsc/geomag/geomag-algorithms
    - production@ghsc/geomag/geomag-algorithms
    - tags@ghsc/geomag/geomag-algorithms
  script:
    - docker build
      --pull
      --build-arg FROM_IMAGE=${FROM_IMAGE}
      --build-arg GIT_BRANCH_NAME=${CI_COMMIT_REF_NAME}
      --build-arg GIT_COMMIT_SHA=${CI_COMMIT_SHA}
      --tag local/${IMAGE_NAME} .

    - docker tag local/${IMAGE_NAME} ${IMAGE_NAME}
    - docker push ${IMAGE_NAME}
    - docker image rm ${IMAGE_NAME}

    - docker tag local/${IMAGE_NAME} ${INTERNAL_IMAGE_NAME}
    - docker push ${INTERNAL_IMAGE_NAME}
    - docker image rm ${INTERNAL_IMAGE_NAME}
  stage: integration
  tags:
    - build
  variables:
    FROM_IMAGE: ${CODE_REGISTRY}/devops/images/usgs/centos:latest

.check_code:
  cache: {}
  image: ${DEVOPS_REGISTRY}usgs/conda:latest
  script:
    # Add conda to path
    - source /etc/profile.d/conda.sh
    # Install Project Dependencies
    - conda config --add channels conda-forge
    - conda install python=${PYTHON_VERSION} obspy pycurl
    - pip install pipenv
    - pipenv --site-packages install --dev --pre --skip-lock
    # Run Code Checks
    - pipenv run black --check .
    - pipenv run pytest --cov-report xml:cov.xml --cov=geomagio
  artifacts:
    paths:
      - cov.xml
    reports:
      junit: cov.xml
  stage: test
  tags:
    - development
  variables:
    PYTHON_VERSION: 3.8

.deploy:
  cache: {}
  extends:
    - .adjust_image_names
  image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest
  script:
    - git clone ${GENERIC_SWARM_DEPLOY_REPO} generic-deploy
    - cp -v
      generic-deploy/default.config.sh
      generic-deploy/default.funcs.sh
      generic-deploy/deploy.sh
      scripts/.
    - export APP_NAME=${APP_NAME}
    - export IMAGE_NAME=${IMAGE_NAME}
    - export REGISTRY=${CI_REGISTRY_IMAGE}
    - export STACK_NAME=${APP_NAME}
    - ./scripts/deploy.sh
  stage: deploy
  tags:
    - deploy
    - swarm

.mage:
  variables:
    - DATA_HOST=cwbpub.cr.usgs.gov
    - DATA_PORT=2060
    - DATA_TYPE=edge
    - GEOMAG_VERSION=0.3.1
    - WEBSERVICE=true
  ports:
    - '8000:8000'

.staging:
  only:
    - master@ghsc/geomag/geomag-algorithms
    - tags@ghsc/geomag/geomag-algorithms
## --------------------------------------------------
# Test Stage
## --------------------------------------------------

Check Python 3.6:
  extends:
    - .check_code
  variables:
    PYTHON_VERSION: '3.6'

Check Python 3.7:
  extends:
    - .check_code
  variables:
    PYTHON_VERSION: '3.7'

Check Python 3.8:
  extends:
    - .check_code
  variables:
    PYTHON_VERSION: '3.8'

## --------------------------------------------------
# Integration Stage
## --------------------------------------------------

Build Algorithms Docker Image:
  extends:
    - .build_docker_image
  variables:
    APP_NAME: geomag-algorithms
## --------------------------------------------------
# Deploy Stage
## --------------------------------------------------

Deploy Mage01:
  extends:
    - .deploy
    - .staging
    - .mage