name: Default (tags)

on:
  push:
    tags:
      - '*'

env:
  IMAGE: code.foss.global/host.today/ht-docker-node:npmci
  NPMCI_COMPUTED_REPOURL: https://${-{gitea.repository_owner}-}:${-{secrets.GITEA_TOKEN}-}@{{module.githost}}/${-{gitea.repository}-}.git
  NPMCI_TOKEN_NPM: ${-{secrets.NPMCI_TOKEN_NPM}-}
  NPMCI_TOKEN_NPM2: ${-{secrets.NPMCI_TOKEN_NPM2}-}
  NPMCI_GIT_GITHUBTOKEN: ${-{secrets.NPMCI_GIT_GITHUBTOKEN}-}
  NPMCI_URL_CLOUDLY: ${-{secrets.NPMCI_URL_CLOUDLY}-}

jobs:
  security:
    runs-on: ubuntu-latest
    continue-on-error: true
    container:
      image: ${-{ env.IMAGE }-}

    steps:
      - uses: actions/checkout@v3

      - name: Prepare
        run: |
          pnpm install -g pnpm
          pnpm install -g @ship.zone/npmci
          npmci npm prepare

      - name: Audit production dependencies
        run: |
          npmci command npm config set registry https://registry.npmjs.org
          npmci command pnpm audit --audit-level=high --prod
        continue-on-error: true

      - name: Audit development dependencies
        run: |
          npmci command npm config set registry https://registry.npmjs.org
          npmci command pnpm audit --audit-level=high --dev
        continue-on-error: true

  test:
    if: ${-{ always() }-}
    needs: security
    runs-on: ubuntu-latest
    container:
      image: ${-{ env.IMAGE }-}

    steps:
      - uses: actions/checkout@v3

      - name: Prepare
        run: |
          pnpm install -g pnpm
          pnpm install -g @ship.zone/npmci
          npmci npm prepare

      - name: Test stable
        run: |
          npmci node install stable
          npmci npm install
          npmci npm test

      - name: Test build
        run: |
          npmci node install stable
          npmci npm install
          npmci npm build

  release:
    needs: test
    if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
    runs-on: ubuntu-latest
    container:
      image: ${-{ env.IMAGE }-}

    steps:
      - uses: actions/checkout@v3

      - name: Prepare
        run: |
          pnpm install -g pnpm
          pnpm install -g @ship.zone/npmci
          npmci npm prepare

      - name: Release
        run: |
          npmci node install stable
          npmci npm publish

  metadata:
    needs: test
    if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
    runs-on: ubuntu-latest
    container:
      image: ${-{ env.IMAGE }-}
    continue-on-error: true

    steps:
      - uses: actions/checkout@v3

      - name: Prepare
        run: |
          pnpm install -g pnpm
          pnpm install -g @ship.zone/npmci
          npmci npm prepare

      - name: Code quality
        run: |
          npmci command npm install -g typescript
          npmci npm install

      - name: Trigger
        run: npmci trigger

      - name: Build docs and upload artifacts
        run: |
          npmci node install stable
          npmci npm install
          pnpm install -g @git.zone/tsdoc
          npmci command tsdoc
        continue-on-error: true
