dist: focal
language: node_js
node_js: 20

jobs:
  include:

  - stage: install, check code style and coverage
    if: tag IS blank
    services:
    - mongodb
    addons:
      hosts:
      - localhost
    before_script:
    - npm install -g grunt-cli
    - sleep 10
    script:
    - grunt
    - if [ "$TRAVIS_BRANCH" != "master" ]; then grunt test; fi
    - if [ "$TRAVIS_BRANCH" = "master" ]; then grunt coverage; fi

  # - stage: Publish to npm
  #   if: branch =~ /(release)/
  #   script:
  #   - echo "PUBLISH npm"
  #   deploy:
  #     skip_cleanup: true
  #     provider: npm
  #     email: $NPM_EMAIL
  #     api_key: $NPM_TOKEN
  #     on:
  #       all_branches: true
  #       condition: $TRAVIS_BRANCH =~ ^(release)*

  - stage: Publish to docker registry
    if: branch =~ /(release)/
    script:
    - echo "PUBLISH docker"
    - export PACKAGE_VERSION=$(cat package.json | grep version | head -1 | awk -Fn '{ print $2 }' | sed 's/[n:",]//g' | tr -d '[[:space:]]')
    - export MAJOR_VERSION=$(echo ${PACKAGE_VERSION} | awk -F. '{ print $1 }')
    - echo Package version ${PACKAGE_VERSION}
    - echo Major version ${MAJOR_VERSION}

    - git config --local user.name ${GIT_USER}
    - git config --local user.email ${GIT_EMAIL}
    - git tag ${PACKAGE_VERSION}

    - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin

    - docker build -t soajsorg/multitenant .

    - docker images

    - docker tag soajsorg/multitenant:latest soajsorg/multitenant:${PACKAGE_VERSION}
    - docker tag soajsorg/multitenant:latest soajsorg/multitenant:${MAJOR_VERSION}.x

    - docker push soajsorg/multitenant
    - docker push soajsorg/multitenant:${PACKAGE_VERSION}
    - docker push soajsorg/multitenant:${MAJOR_VERSION}.x
    before_deploy:
      - yes | gem update --system --force
      - gem install bundler
      - gem install faraday-net_http -v '3.3.0'
      - gem install uri
      - gem install logger
    deploy:
      on:
        all_branches: true
      provider: releases
      api_key: ${GIT_TOKEN}
      skip_cleanup: true
