name: UI Publish

on:
  workflow_call:
    inputs:
      version_tag:
        description: 'Version tag to publish under (e.g., b1234)'
        required: true
        type: string
    secrets:
      hf_token:
        description: 'Hugging Face token with write access'
        required: true

jobs:
  build:
    name: Build static output
    uses: ./.github/workflows/ui-build.yml

  publish:
    name: Publish UI Static Output
    needs: build
    runs-on: ubuntu-24.04-arm

    permissions:
      contents: read

    env:
      HF_BUCKET_NAME: ${{ vars.HF_BUCKET_UI_STATIC_OUTPUT }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v6
        with:
          fetch-depth: 1

      - name: Download UI build artifact
        uses: actions/download-artifact@v7
        with:
          name: ui-build
          path: build/tools/ui/dist/

      - name: Install Hugging Face Hub CLI
        run: pip install -U huggingface_hub

      - name: Authenticate with Hugging Face
        run: hf auth login --token ${{ secrets.hf_token }}

      - name: Sync built files to Hugging Face bucket (version tag)
        run: |
          # Upload the built files to the Hugging Face bucket under the release version
          hf buckets sync build/tools/ui/dist hf://buckets/ggml-org/${{ env.HF_BUCKET_NAME }}/${{ inputs.version_tag }} --delete --quiet

      - name: Sync built files to Hugging Face bucket (latest)
        run: |
          # Also upload to the 'latest' directory for fallback downloads
          hf buckets sync build/tools/ui/dist hf://buckets/ggml-org/${{ env.HF_BUCKET_NAME }}/latest --delete --quiet

      - name: Verify upload
        run: |
          # List the files in the bucket to verify the upload
          hf buckets list hf://buckets/ggml-org/${{ env.HF_BUCKET_NAME }}/${{ inputs.version_tag }} -R -h

      - name: Clean up root-level files
        run: |
          # Clean up any old root-level files from previous non-versioned deployments
          hf buckets rm ggml-org/${{ env.HF_BUCKET_NAME }}/index.html --yes 2>/dev/null || true
          hf buckets rm ggml-org/${{ env.HF_BUCKET_NAME }}/bundle.js --yes 2>/dev/null || true
          hf buckets rm ggml-org/${{ env.HF_BUCKET_NAME }}/bundle.css --yes 2>/dev/null || true
          hf buckets rm ggml-org/${{ env.HF_BUCKET_NAME }}/loading.html --yes 2>/dev/null || true
