name: Staging Docs

on:
  push:
    branches:
      - 'dev'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.number || github.sha }}
  cancel-in-progress: true

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    if: ${{ github.repository_owner == 'element-plus' }}

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup pnpm
        uses: pnpm/action-setup@v4

      - name: Setup node
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Get pnpm store directory
        id: pnpm-cache
        run: |
          echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT

      - uses: actions/cache@v4
        name: Setup pnpm cache
        with:
          path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-

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

      - name: Compile Element Plus
        run: pnpm build
        env:
          NODE_OPTIONS: --max-old-space-size=4096

      - name: Init Crowdin token
        run: pnpm run docs:crowdin-credentials
        env:
          CROWDIN_TOKEN: ${{secrets.CROWDIN_TOKEN}}

      - name: Upload source files
        run: cd docs && pnpm exec crowdin upload sources

      - name: Pull Crowdin translations
        run: cd docs && pnpm exec crowdin download -l zh-CN && pnpm exec crowdin download -l es-ES

      - name: Generate common locale
        run: pnpm docs:gen-locale

      - name: Build Metadata
        run: cd internal/metadata && pnpm build
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Build website
        run: pnpm docs:build
        env:
          DOC_ENV: staging
          NODE_OPTIONS: --max-old-space-size=4096

      - name: Deploy staging website
        uses: JamesIves/github-pages-deploy-action@v4.3.4
        with:
          token: ${{ secrets.EP_BOT_TOKEN }}
          branch: main
          folder: docs/.vitepress/dist
          repository-name: element-plus/staging
          git-config-name: ElementPlusBot
          git-config-email: element-plus@outlook.com
