# gitzone ci_default
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci

cache:
  paths:
    - .npmci_cache/
  key: '$CI_BUILD_STAGE'

stages:
  - security
  - test
  - release
  - metadata

before_script:
  - npm install -g @shipzone/npmci

# ====================
# security stage
# ====================
mirror:
  stage: security
  script:
    - npmci git mirror
  only:
    - tags
  tags:
    - lossless
    - docker
    - notpriv

auditProductionDependencies:
  image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
  stage: security
  script:
    - npmci npm prepare
    - npmci command npm install --production --ignore-scripts
    - npmci command npm config set registry https://registry.npmjs.org
    - npmci command npm audit --audit-level=high --only=prod --production
  tags:
    - docker
  allow_failure: true

auditDevDependencies:
  image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
  stage: security
  script:
    - npmci npm prepare
    - npmci command npm install --ignore-scripts
    - npmci command npm config set registry https://registry.npmjs.org
    - npmci command npm audit --audit-level=high --only=dev
  tags:
    - docker
  allow_failure: true

# ====================
# test stage
# ====================

testStable:
  stage: test
  script:
    - npmci npm prepare
    - npmci node install stable
    - npmci npm install
    - npmci npm test
  coverage: /\d+.?\d+?\%\s*coverage/
  tags:
    - docker

testBuild:
  stage: test
  script:
    - npmci npm prepare
    - npmci node install stable
    - npmci npm install
    - npmci command npm run build
  coverage: /\d+.?\d+?\%\s*coverage/
  tags:
    - docker

release:
  stage: release
  script:
    - npmci node install stable
    - npmci npm publish
  only:
    - tags
  tags:
    - lossless
    - docker
    - notpriv

# ====================
# metadata stage
# ====================
codequality:
  stage: metadata
  allow_failure: true
  only:
    - tags
  script:
    - npmci command npm install -g typescript
    - npmci npm prepare
    - npmci npm install
  tags:
    - lossless
    - docker
    - priv

trigger:
  stage: metadata
  script:
    - npmci trigger
  only:
    - tags
  tags:
    - lossless
    - docker
    - notpriv

pages:
  stage: metadata
  script:
    - npmci node install lts
    - npmci command npm install -g @git.zone/tsdoc
    - npmci npm prepare
    - npmci npm install
    - npmci command tsdoc
  tags:
    - lossless
    - docker
    - notpriv
  only:
    - tags
  artifacts:
    expire_in: 1 week
    paths:
      - public
  allow_failure: true