PassiveOSINTControlPanel / .github /workflows /sync-huggingface.yml
S-Dreamer's picture
Upload 3 files
4f25455 verified
name: Two-Way Sync: GitHub Hugging Face Hub
on:
push:
branches:
- main
workflow_dispatch:
inputs:
sync_direction:
description: "Choose sync direction"
required: true
default: "github-to-huggingface"
type: choice
options:
- github-to-huggingface
- huggingface-to-github
permissions:
contents: write
concurrency:
group: repo-sync-main
cancel-in-progress: false
jobs:
sync-github-to-huggingface:
name: Sync GitHub to Hugging Face
if: github.event_name == 'push' || github.event.inputs.sync_direction == 'github-to-huggingface'
runs-on: ubuntu-latest
steps:
- name: Checkout GitHub repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Validate required secrets
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
HF_USERNAME: ${{ secrets.HF_USERNAME }}
run: |
test -n "$HF_TOKEN" || (echo "HF_TOKEN is missing" && exit 1)
test -n "$HF_USERNAME" || (echo "HF_USERNAME is missing" && exit 1)
- name: Configure Git identity
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
- name: Add Hugging Face remote
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
HF_USERNAME: ${{ secrets.HF_USERNAME }}
run: |
REPO_NAME="${GITHUB_REPOSITORY#*/}"
git remote remove huggingface 2>/dev/null || true
git remote add huggingface "https://${HF_USERNAME}:${HF_TOKEN}@huggingface.co/spaces/${HF_USERNAME}/${REPO_NAME}"
- name: Verify remotes
run: |
git remote -v | sed 's#https://.*@huggingface.co#https://***@huggingface.co#g'
- name: Fetch Hugging Face state
run: |
git fetch huggingface main || true
- name: Push GitHub main to Hugging Face
run: |
git push huggingface main:main --force-with-lease
sync-huggingface-to-github:
name: Sync Hugging Face to GitHub
if: github.event_name == 'workflow_dispatch' && github.event.inputs.sync_direction == 'huggingface-to-github'
runs-on: ubuntu-latest
steps:
- name: Validate required secrets
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
HF_USERNAME: ${{ secrets.HF_USERNAME }}
GH_PAT: ${{ secrets.GH_PAT }}
run: |
test -n "$HF_TOKEN" || (echo "HF_TOKEN is missing" && exit 1)
test -n "$HF_USERNAME" || (echo "HF_USERNAME is missing" && exit 1)
test -n "$GH_PAT" || (echo "GH_PAT is missing" && exit 1)
- name: Checkout GitHub repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
- name: Configure Git identity
run: |
git config --global user.name "repo-sync-bot"
git config --global user.email "repo-sync-bot@users.noreply.github.com"
- name: Add Hugging Face remote
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
HF_USERNAME: ${{ secrets.HF_USERNAME }}
run: |
REPO_NAME="${GITHUB_REPOSITORY#*/}"
git remote remove huggingface 2>/dev/null || true
git remote add huggingface "https://${HF_USERNAME}:${HF_TOKEN}@huggingface.co/spaces/${HF_USERNAME}/${REPO_NAME}"
- name: Fetch Hugging Face main
run: |
git fetch huggingface main
- name: Merge Hugging Face into GitHub
run: |
git checkout main
git merge huggingface/main --no-edit --allow-unrelated-histories
- name: Push merged state to GitHub
run: |
git push origin main