name: Generate and Sync OpenAPI

on:
  push:
    branches:
      - canary
      - main
    paths:
      - 'apps/dokploy/server/api/routers/**'
      - 'packages/server/src/services/**'
      - 'packages/server/src/db/schema/**'

  workflow_dispatch:

jobs:
  generate-and-commit:
    name: Generate OpenAPI and commit to Dokploy repo
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Dokploy repository
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 24.4.0
          cache: "pnpm"

      - name: Install dependencies
        run: pnpm install --frozen-lockfile

      - name: Generate OpenAPI specification
        run: |
          pnpm generate:openapi
          
          # Verifica que se generó correctamente
          if [ ! -f openapi.json ]; then
            echo "❌ openapi.json not found"
            exit 1
          fi
          
          echo "✅ OpenAPI specification generated successfully"

      - name: Sync to website repository
        run: |
          # Clona el repositorio de website
          git clone https://x-access-token:${{ secrets.DOCS_SYNC_TOKEN }}@github.com/dokploy/website.git website-repo
          
          cd website-repo
          
          # Copia el openapi.json al website (sobrescribe)
          mkdir -p apps/docs/public
          cp -f ../openapi.json apps/docs/public/openapi.json
          
          # Configura git
          git config user.name "Dokploy Bot"
          git config user.email "bot@dokploy.com"
          
          # Agrega y commitea siempre
          git add apps/docs/public/openapi.json
          git commit -m "chore: sync OpenAPI specification [skip ci]" \
            -m "Source: ${{ github.repository }}@${{ github.sha }}" \
            -m "Updated: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" \
            --allow-empty
          
          git push
          
          echo "✅ OpenAPI synced to website successfully"

      - name: Sync to MCP repository
        run: |
          git clone https://x-access-token:${{ secrets.DOCS_SYNC_TOKEN }}@github.com/dokploy/mcp.git mcp-repo

          cd mcp-repo

          cp -f ../openapi.json openapi.json

          git config user.name "Dokploy Bot"
          git config user.email "bot@dokploy.com"

          git add openapi.json
          git commit -m "chore: sync OpenAPI specification [skip ci]" \
            -m "Source: ${{ github.repository }}@${{ github.sha }}" \
            -m "Updated: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" \
            --allow-empty

          git push

          echo "✅ OpenAPI synced to MCP repository successfully"

      - name: Sync to CLI repository
        run: |
          git clone https://x-access-token:${{ secrets.DOCS_SYNC_TOKEN }}@github.com/dokploy/cli.git cli-repo

          cd cli-repo

          cp -f ../openapi.json openapi.json

          git config user.name "Dokploy Bot"
          git config user.email "bot@dokploy.com"

          git add openapi.json
          git commit -m "chore: sync OpenAPI specification [skip ci]" \
            -m "Source: ${{ github.repository }}@${{ github.sha }}" \
            -m "Updated: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" \
            --allow-empty

          git push

          echo "✅ OpenAPI synced to CLI repository successfully"

      - name: Sync to SDK repository
        run: |
          git clone https://x-access-token:${{ secrets.DOCS_SYNC_TOKEN }}@github.com/dokploy/sdk.git sdk-repo

          cd sdk-repo

          cp -f ../openapi.json openapi.json

          git config user.name "Dokploy Bot"
          git config user.email "bot@dokploy.com"

          git add openapi.json
          git commit -m "chore: sync OpenAPI specification [skip ci]" \
            -m "Source: ${{ github.repository }}@${{ github.sha }}" \
            -m "Updated: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" \
            --allow-empty

          git push

          echo "✅ OpenAPI synced to SDK repository successfully"

