---
publish:dockerhub:
  stage: publish
  image: megabytelabs/docker-publish:slim
  services:
    - docker:20.10.7-dind
  rules:
    - if: $DO_CI == 'false'
      when: never
    - if: $CI_COMMIT_TITLE =~ /^(automation|chore).*/
      when: never
    - if: $CI_COMMIT_BRANCH == 'synchronize'
      when: never
    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
      changes:
        - Dockerfile
        - package.json
        - paths.txt
        - '**/*.sh'
    - if: ($CI_PIPELINE_SOURCE == 'schedule' || $CI_PIPELINE_SOURCE == 'web') && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
  variables:
    DOCKER_CERT_PATH: $DOCKER_TLS_CERTDIR/client
    DOCKER_HOST: tcp://docker:2376
    DOCKER_TLS_CERTDIR: /certs
    DOCKER_TLS_VERIFY: 1
    GIT_DEPTH: 1
    PIP_CACHE_DIR: $CI_PROJECT_DIR/.cache/pip
  tags:
    - docker
  cache:
    key: megabytelabs
    paths:
      - .cache/pip
      - .npm/
      - venv/
  before_script:
    - git config pull.ff only
    - git remote set-url origin "https://root:$GROUP_ACCESS_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git"
    - git config user.email "$GITLAB_CI_EMAIL"
    - git config user.name "$GITLAB_CI_NAME"
    - git checkout "$CI_COMMIT_REF_NAME"
    - git pull origin "$CI_COMMIT_REF_NAME"
    - echo "$DOCKERHUB_REGISTRY_PASSWORD" | docker login -u "$DOCKERHUB_REGISTRY_USER" --password-stdin "$DOCKERHUB_REGISTRY"
    - npm ci --cache .npm --ignore-scripts --prefer-offline
    - npm install shellcheck
    - virtualenv env
    - source venv/bin/activate
  script:
    - set -eo pipefail
    - npm run publish
