name: UI Publish on: workflow_call: inputs: version_tag: description: 'Version tag to publish under (e.g., b1234)' required: true type: string run_id: required: true type: number secrets: hf_token: description: 'Hugging Face token with write access' required: true cache-mode: none permissions: actions: read contents: read jobs: publish: name: Publish UI Static Output runs-on: ubuntu-slim env: HF_BUCKET_NAME: ${{ vars.HF_BUCKET_UI_STATIC_OUTPUT }} steps: - name: Download UI build artifact uses: actions/download-artifact@v8 with: name: llama-ui.zip path: tools/ui/dist/ run-id: ${{ inputs.run_id }} github-token: ${{ github.token }} - name: Create distribution archive run: | tar -czf dist.tar.gz -C tools/ui/dist . sha256sum dist.tar.gz > dist.tar.gz.sha256 mv dist.tar.gz dist.tar.gz.sha256 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 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 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