name: API Docs
run-name: API Docs for ${{ inputs.release_ref }}

on:
  workflow_dispatch:
    inputs:
      release_ref:
        description: Release tag or ref to build API docs from.
        required: true
        type: string

permissions:
  contents: read

concurrency:
  group: pages
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pages: write
    steps:
      - name: Validate release ref
        env:
          RELEASE_REF: ${{ inputs.release_ref }}
        run: |
          if ! printf '%s' "${RELEASE_REF}" | grep -Eq '^v[0-9]+[.][0-9]+[.][0-9]+(-[0-9A-Za-z.-]+)?([+][0-9A-Za-z.-]+)?$'; then
            echo "release_ref must be a release tag like v1.3.0."
            exit 1
          fi
      - uses: actions/checkout@v4
        with:
          ref: refs/tags/${{ inputs.release_ref }}
      - uses: actions/setup-node@v4
        with:
          node-version: '22.x'
      - name: Verify release tag
        env:
          RELEASE_REF: ${{ inputs.release_ref }}
        run: |
          version="$(node -p "require('./package.json').version")"
          if [ "${RELEASE_REF}" != "v${version}" ]; then
            echo "Tag ${RELEASE_REF} does not match package version v${version}."
            exit 1
          fi
      - run: yarn install --frozen-lockfile
      - uses: actions/configure-pages@v6
      - run: yarn build:doc:site
      - uses: actions/upload-pages-artifact@v4
        with:
          path: docs-site

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    permissions:
      pages: write
      id-token: write
    steps:
      - id: deployment
        uses: actions/deploy-pages@v5
