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."