Files
ComfyUI_Skills_OpenClaw/.github/workflows/sync-frontend.yml

125 lines
3.6 KiB
YAML

name: Sync Frontend
on:
workflow_dispatch:
repository_dispatch:
types:
- frontend_release_published
concurrency:
group: sync-frontend
cancel-in-progress: false
permissions:
contents: read
jobs:
sync:
name: Download & Sync
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: main
token: ${{ secrets.MAIN_REPO_TOKEN }}
- name: Download latest frontend dist
run: |
gh release download latest \
--repo HuangYuChuh/ComfyUI_Skills_OpenClaw-frontend \
--pattern "frontend-dist.tar.gz" \
--output frontend-dist.tar.gz
env:
GH_TOKEN: ${{ secrets.MAIN_REPO_TOKEN }}
- name: Extract dist to ui/static
run: |
rm -rf ui/static/assets ui/static/index.html
mkdir -p ui/static
tar -xzf frontend-dist.tar.gz -C ui/static
- name: Read frontend version
id: version
run: |
FRONTEND_SHA=$(python - <<'PY'
import json
from pathlib import Path
version = json.loads(Path("ui/static/version.json").read_text(encoding="utf-8"))
print(version.get("commit", "").strip())
PY
)
if [ -z "$FRONTEND_SHA" ]; then
echo "Failed to read commit from ui/static/version.json" >&2
exit 1
fi
echo "full_sha=$FRONTEND_SHA" >> "$GITHUB_OUTPUT"
echo "short_sha=${FRONTEND_SHA:0:8}" >> "$GITHUB_OUTPUT"
- name: Check for changes
id: diff
run: |
git add ui/static/
if git diff --cached --quiet; then
echo "changed=false" >> $GITHUB_OUTPUT
else
echo "changed=true" >> $GITHUB_OUTPUT
fi
- name: Commit, open PR and enable auto-merge
if: steps.diff.outputs.changed == 'true'
env:
GH_TOKEN: ${{ secrets.MAIN_REPO_TOKEN }}
FRONTEND_SHA: ${{ steps.version.outputs.full_sha }}
FRONTEND_SHORT_SHA: ${{ steps.version.outputs.short_sha }}
run: |
retry() {
local attempts=$1
shift
local n=1
while true; do
if "$@"; then
return 0
fi
if [ "$n" -ge "$attempts" ]; then
return 1
fi
n=$((n + 1))
sleep 3
done
}
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
BRANCH="build/frontend-${FRONTEND_SHORT_SHA}"
git checkout -B "$BRANCH"
git commit -m "build(ui): sync frontend assets from upstream@${FRONTEND_SHORT_SHA}"
git push --force-with-lease origin "$BRANCH"
PR_URL=""
if ! PR_URL=$(retry 3 gh pr create \
--title "build(ui): sync frontend assets from upstream@${FRONTEND_SHORT_SHA}" \
--body "Auto-generated by \`sync-frontend\` workflow for frontend commit \`${FRONTEND_SHA}\`." \
--base main); then
PR_URL=$(gh pr list \
--head "$BRANCH" \
--base main \
--state open \
--json url \
--jq '.[0].url')
fi
if [ -z "$PR_URL" ]; then
echo "Failed to create or find pull request for $BRANCH" >&2
exit 1
fi
retry 3 gh pr merge "$PR_URL" --auto --squash
- name: No changes
if: steps.diff.outputs.changed == 'false'
run: echo "Frontend is already up to date. Nothing to sync."