video-caption / .github /workflows /deploy_to_hf_space.yaml
John Ho
fixed push logic in the last step
c5ab6e1
name: CI/CD to Hugging Face Space with uv
on:
push:
branches:
- main # Or your default branch, e.g., 'master', 'dev'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Check for HF_TOKEN availability
id: check_hf_token
env:
HF_TOKEN_CHECK: ${{ secrets.HF_TOKEN }} # Pass the secret to an env var for shell check
run: |
if [ -z "$HF_TOKEN_CHECK" ]; then
echo "::notice::HF_TOKEN secret is not set. Hugging Face Space push will be skipped."
echo "push_enabled=false" >> $GITHUB_OUTPUT
else
echo "::notice::HF_TOKEN secret is set. Proceeding with Hugging Face Space push."
echo "push_enabled=true" >> $GITHUB_OUTPUT
fi
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
lfs: true
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10" # Recommended: specify a precise version like '3.10', '3.11', or '3.12'
- name: Install uv
# Installs the uv tool on the GitHub Actions runner
uses: astral-sh/setup-uv@v1
- name: Check for pyproject.toml existence
id: check_pyproject
run: |
if [ -f requirements.txt ]; then
echo "::notice::requirements.txt already exists. Skipping uv generation."
echo "generate_reqs=false" >> $GITHUB_OUTPUT
elif [ -f pyproject.toml ]; then
echo "::notice::pyproject.toml found and no requirements.txt. Proceeding with uv pip compile."
echo "generate_reqs=true" >> $GITHUB_OUTPUT
else
echo "::notice::Neither requirements.txt nor pyproject.toml found. Skipping uv pip compile."
echo "generate_reqs=false" >> $GITHUB_OUTPUT
fi
- name: Generate requirements.txt using uv
id: generate_reqs
# This step will only run if pyproject.toml was found in the previous step
if: ${{ steps.check_pyproject.outputs.generate_reqs == 'true' }}
run: |
# Use uv pip compile to generate a locked requirements.txt from pyproject.toml
# This ensures reproducibility.
uv export --no-hashes --format requirements-txt > requirements.txt
# uv pip compile pyproject.toml -o requirements.txt
# Check if requirements.txt was created
if [ -f requirements.txt ]; then
echo "requirements.txt generated successfully:"
cat requirements.txt
else
echo "Error: requirements.txt was not generated despite pyproject.toml existing."
exit 1
fi
- name: Commit requirements.txt if changed
if: ${{ steps.check_pyproject.outputs.generate_reqs == 'true' }}
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add requirements.txt
git commit -m "chore: update requirements.txt [auto-generated by CI]"
echo "requirements.txt committed."
- name: Push to HuggingFace Space
if: ${{ steps.check_hf_token.outputs.push_enabled == 'true' }}
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
FORCE_PUSH: ${{ secrets.FORCE_PUSH }}
run: |
if [ -z "$FORCE_PUSH" ]; then
echo "::notice::FORCE_PUSH secret is not set."
git push https://GF-John:[email protected]/spaces/GF-John/video-caption main
else
echo "::notice::FORCE_PUSH secret is set. Doing Force Push toHugging Face Space."
git push -f https://GF-John:[email protected]/spaces/GF-John/video-caption main
fi