docsifer / .github /workflows /githubhfsync.yaml
lamhieu's picture
ci(workflows): mirror lightweight-embeddings style for simpler, more reliable HF sync
91fd384
name: Sync Repository to HuggingFace Space
# Auto-deploys the repo to the Hugging Face Space on every push to main.
# Mirrors the simple, always-triggers approach used by ``lightweight-embeddings``.
#
# Triggers:
# - push (main) β†’ fires immediately when code lands on main.
# - workflow_dispatch β†’ manual override (e.g. emergency redeploy).
#
# Required secret: HF_TOKEN (Hugging Face access token with write scope)
# Optional repo variables (Settings β†’ Variables):
# HF_USERNAME default: lamhieu
# HF_SPACE default: docsifer
on:
push:
branches: [main]
workflow_dispatch:
concurrency:
group: hf-deploy
cancel-in-progress: false
jobs:
sync-to-huggingface:
name: Sync code to HuggingFace Space
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for all branches and tags
lfs: true # Enable Git LFS support
- name: Push to HuggingFace Space
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
HF_USERNAME: ${{ vars.HF_USERNAME || 'lamhieu' }}
HF_SPACE: ${{ vars.HF_SPACE || 'docsifer' }}
run: |
set -euo pipefail
if [ -z "${HF_TOKEN:-}" ]; then
echo "::error::HF_TOKEN secret is not configured."
exit 1
fi
git config user.email "github-actions[bot]@users.noreply.github.com"
git config user.name "github-actions[bot]"
REMOTE="https://${HF_USERNAME}:${HF_TOKEN}@huggingface.co/spaces/${HF_USERNAME}/${HF_SPACE}"
echo "Pushing HEAD to space ${HF_USERNAME}/${HF_SPACE} (main)"
# Force-push so the Space mirrors GitHub exactly. The Space history
# is treated as a derived artifact, not a source of truth.
if ! git push -f "${REMOTE}" HEAD:main; then
echo "::error::Failed to sync with HuggingFace Space"
exit 1
fi