image: node:14-buster

stages:
  - build
  - deploy

variables:
  DOCKER_DRIVER: overlay2

cache:
  key: node-modules
  paths:
    - node_modules/

build:
  stage: build
  needs: []
  before_script:
    - npm install
    - npm shrinkwrap
  script:
    - npm run build
  artifacts:
    paths:
      - dist/*
      - package.json
      - npm-shrinkwrap.json
      - README.md
      - LICENSE.md

deploy:
  stage: deploy
  needs:
    - build
  before_script:
    - echo "@${CI_PROJECT_ROOT_NAMESPACE}:registry=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/" >.npmrc
    - echo "${CI_API_V4_URL#http*:}/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}">>.npmrc
    - npm init --scope="@${CI_PROJECT_ROOT_NAMESPACE}" -y
    - npm version --no-git-tag-version $(node -e "console.log(JSON.parse(require(\"fs\").readFileSync(\"./package.json\", \"utf-8\")).version + \"-commit.$(echo "$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA")\")")
  script:
    - npm publish
  except:
    - master

deploy-master:
  stage: deploy
  before_script:
    - echo "@${CI_PROJECT_ROOT_NAMESPACE}:registry=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/" >.npmrc
    - echo "${CI_API_V4_URL#http*:}/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}">>.npmrc
    - npm init --scope="@${CI_PROJECT_ROOT_NAMESPACE}" -y
  script:
    - npm publish
  needs:
    - build
  when: manual
