# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud-libraries/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT

name: Publish

on:
  release:
    types: [published]

permissions:
  contents: read
  packages: write

jobs:
  publish:
    runs-on: ubuntu-latest
    name: Build and publish to npm

    steps:
      - name: Checkout
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          persist-credentials: false

      - name: Set up node
        uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
        with:
          node-version-file: 'package.json'

      - name: Check tag matches package.json
        run: |
          VERSION=$(node -p -e "require('./package.json').version")
          GH_VERSION=$(echo "$GH_VERSION" | sed s,\^v,,)
          if [ "$VERSION" != "$GH_VERSION" ]; then
            echo "$VERSION does not match $GH_VERSION"
            exit 1;
          fi;
        env:
          GH_VERSION: ${{ github.event.release.tag_name }}

      - name: Install dependencies & build
        env:
          CYPRESS_INSTALL_BINARY: 0
        run: |
          npm ci
          npm run build --if-present

      - name: Fetch latest tag
        id: latest-tag
        run: |
          TAG=$(gh release list \
            --exclude-drafts \
            --exclude-pre-releases \
            --json isLatest,tagName \
            --jq 'map(select(.isLatest == true))[].tagName' \
            -R ${{ github.repository }})
          echo "Latest tag is $TAG"
          echo "LATEST_TAG=$TAG" >> $GITHUB_OUTPUT
        env:
          GH_TOKEN: ${{ github.token }}

      - name: Publish
        run: |
          npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN
          npm publish --tag $RELEASE_GROUP
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
          RELEASE_GROUP: ${{ (contains(github.ref, 'rc') || contains(github.ref, 'beta') || contains(github.ref, 'alpha')) && 'next' || ((steps.latest-tag.outputs.LATEST_TAG != github.event.release.tag_name) && 'stable' || 'latest') }}
