name: Publish API Documentation on GitHub Pages

permissions:
  id-token: write
  contents: write

on:
  workflow_dispatch:

jobs:
  publish:
    name: Publish to NPM and GitHub pages
    runs-on: ubuntu-22.04

    # The current approach is silly. We should be smarter and use `actions/upload-artifact` and `actions/download-artifact` instead of rebuilding
    # everything from scratch again. (git checkout, Node.js install, npm, etc.) It was not possible to share artifacts on Travis CI without an
    # external storage (such as S3), so we did rebuild everything before the npm publish. We should overcome this limitation with GH Actions.

    steps:
      - name: Checkout
        uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
        with:
          fetch-depth: 0 # To fetch all history for all branches and tags. (Will be required for caching with lerna: https://github.com/markuplint/markuplint/pull/111)

      - name: Use Node.js 22.x
        uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3.8.2
        with:
          node-version: "22.x"
          registry-url: "https://registry.npmjs.org"

      - name: Use Python 3.13
        uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
        with:
          python-version: "3.13"

      - name: Install and Build
        run: |
          npm ci
          npm run build
        env:
          NODE_OPTIONS: --max_old_space_size=4096
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # https://github.com/microsoft/vscode-ripgrep/issues/9

      - name: Generate Documentation
        run: |
          npm run docs
        env:
          NODE_OPTIONS: --max_old_space_size=8192

      - name: Publish GH Pages
        uses: peaceiris/actions-gh-pages@373f7f263a76c20808c831209c920827a82a2847 # v3.9.3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./gh-pages
          force_orphan: true # will only keep latest commit on branch gh-pages
