name: Sync docs with Docusaurus

on:
  workflow_dispatch:
  push:
    branches:
      - main
    paths:
      - "pydoc/**"
      - "haystack/**"
      - ".github/workflows/docusaurus_sync.yml"

env:
  HATCH_VERSION: "1.14.2"
  PYTHON_VERSION: "3.11"

jobs:
  sync:
    runs-on: ubuntu-slim
    permissions:
      contents: write

    steps:
      - name: Checkout Haystack repo
        uses: actions/checkout@v6

      - name: Set up Python
        uses: actions/setup-python@v6
        with:
          python-version: "${{ env.PYTHON_VERSION }}"

      - name: Install Hatch
        run: pip install hatch==${{ env.HATCH_VERSION }}

      - name: Generate API reference for Docusaurus
        run: hatch run docs

      - name: Sync generated API reference to docs folder
        run: |
          SOURCE_PATH="pydoc/temp"
          DEST_PATH="docs-website/reference/haystack-api"

          echo "Syncing from $SOURCE_PATH to $DEST_PATH"
          mkdir -p $DEST_PATH
          # Using rsync to copy files. This will also remove files in dest that are no longer in source.
          rsync -av --delete --exclude='.git/' "$SOURCE_PATH/" "$DEST_PATH/"

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v8
        with:
          token: ${{ secrets.HAYSTACK_BOT_TOKEN }}
          commit-message: "Sync Haystack API reference on Docusaurus"
          branch: sync-docusaurus-api-reference
          base: main
          title: "docs: sync Haystack API reference on Docusaurus"
          add-paths: |
            docs-website/reference/haystack-api
          body: |
            This PR syncs the Haystack API reference on Docusaurus. Just approve and merge it.
          reviewers: "${{ github.actor }}"
