mirror of
https://github.com/Comfy-Org/ComfyUI.git
synced 2026-08-16 22:46:38 +08:00
The release dispatch target Comfy-Org/desktop was archived on 2026-06-26 and is read-only; the live repo is Comfy-Org/Comfy-Desktop. Also make the dispatch step independent of the webhook step above it. The two deliveries are unrelated, but a failure in the first one skips the second, so the desktop bump never runs when the webhook endpoint is unhealthy.
150 lines
6.7 KiB
YAML
150 lines
6.7 KiB
YAML
name: Release Webhook
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
|
|
jobs:
|
|
send-webhook:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
DESKTOP_REPO_DISPATCH_TOKEN: ${{ secrets.DESKTOP_REPO_DISPATCH_TOKEN }}
|
|
steps:
|
|
- name: Send release webhook
|
|
env:
|
|
WEBHOOK_URL: ${{ secrets.RELEASE_GITHUB_WEBHOOK_URL }}
|
|
WEBHOOK_SECRET: ${{ secrets.RELEASE_GITHUB_WEBHOOK_SECRET }}
|
|
run: |
|
|
# Generate UUID for delivery ID
|
|
DELIVERY_ID=$(uuidgen)
|
|
HOOK_ID="release-webhook-$(date +%s)"
|
|
|
|
# Create webhook payload matching GitHub release webhook format
|
|
PAYLOAD=$(cat <<EOF
|
|
{
|
|
"action": "published",
|
|
"release": {
|
|
"id": ${{ github.event.release.id }},
|
|
"node_id": "${{ github.event.release.node_id }}",
|
|
"url": "${{ github.event.release.url }}",
|
|
"html_url": "${{ github.event.release.html_url }}",
|
|
"assets_url": "${{ github.event.release.assets_url }}",
|
|
"upload_url": "${{ github.event.release.upload_url }}",
|
|
"tag_name": "${{ github.event.release.tag_name }}",
|
|
"target_commitish": "${{ github.event.release.target_commitish }}",
|
|
"name": ${{ toJSON(github.event.release.name) }},
|
|
"body": ${{ toJSON(github.event.release.body) }},
|
|
"draft": ${{ github.event.release.draft }},
|
|
"prerelease": ${{ github.event.release.prerelease }},
|
|
"created_at": "${{ github.event.release.created_at }}",
|
|
"published_at": "${{ github.event.release.published_at }}",
|
|
"author": {
|
|
"login": "${{ github.event.release.author.login }}",
|
|
"id": ${{ github.event.release.author.id }},
|
|
"node_id": "${{ github.event.release.author.node_id }}",
|
|
"avatar_url": "${{ github.event.release.author.avatar_url }}",
|
|
"url": "${{ github.event.release.author.url }}",
|
|
"html_url": "${{ github.event.release.author.html_url }}",
|
|
"type": "${{ github.event.release.author.type }}",
|
|
"site_admin": ${{ github.event.release.author.site_admin }}
|
|
},
|
|
"tarball_url": "${{ github.event.release.tarball_url }}",
|
|
"zipball_url": "${{ github.event.release.zipball_url }}",
|
|
"assets": ${{ toJSON(github.event.release.assets) }}
|
|
},
|
|
"repository": {
|
|
"id": ${{ github.event.repository.id }},
|
|
"node_id": "${{ github.event.repository.node_id }}",
|
|
"name": "${{ github.event.repository.name }}",
|
|
"full_name": "${{ github.event.repository.full_name }}",
|
|
"private": ${{ github.event.repository.private }},
|
|
"owner": {
|
|
"login": "${{ github.event.repository.owner.login }}",
|
|
"id": ${{ github.event.repository.owner.id }},
|
|
"node_id": "${{ github.event.repository.owner.node_id }}",
|
|
"avatar_url": "${{ github.event.repository.owner.avatar_url }}",
|
|
"url": "${{ github.event.repository.owner.url }}",
|
|
"html_url": "${{ github.event.repository.owner.html_url }}",
|
|
"type": "${{ github.event.repository.owner.type }}",
|
|
"site_admin": ${{ github.event.repository.owner.site_admin }}
|
|
},
|
|
"html_url": "${{ github.event.repository.html_url }}",
|
|
"clone_url": "${{ github.event.repository.clone_url }}",
|
|
"git_url": "${{ github.event.repository.git_url }}",
|
|
"ssh_url": "${{ github.event.repository.ssh_url }}",
|
|
"url": "${{ github.event.repository.url }}",
|
|
"created_at": "${{ github.event.repository.created_at }}",
|
|
"updated_at": "${{ github.event.repository.updated_at }}",
|
|
"pushed_at": "${{ github.event.repository.pushed_at }}",
|
|
"default_branch": "${{ github.event.repository.default_branch }}",
|
|
"fork": ${{ github.event.repository.fork }}
|
|
},
|
|
"sender": {
|
|
"login": "${{ github.event.sender.login }}",
|
|
"id": ${{ github.event.sender.id }},
|
|
"node_id": "${{ github.event.sender.node_id }}",
|
|
"avatar_url": "${{ github.event.sender.avatar_url }}",
|
|
"url": "${{ github.event.sender.url }}",
|
|
"html_url": "${{ github.event.sender.html_url }}",
|
|
"type": "${{ github.event.sender.type }}",
|
|
"site_admin": ${{ github.event.sender.site_admin }}
|
|
}
|
|
}
|
|
EOF
|
|
)
|
|
|
|
# Generate HMAC-SHA256 signature
|
|
SIGNATURE=$(echo -n "$PAYLOAD" | openssl dgst -sha256 -hmac "$WEBHOOK_SECRET" -hex | cut -d' ' -f2)
|
|
|
|
# Send webhook with required headers
|
|
curl -X POST "$WEBHOOK_URL" \
|
|
-H "Content-Type: application/json" \
|
|
-H "X-GitHub-Event: release" \
|
|
-H "X-GitHub-Delivery: $DELIVERY_ID" \
|
|
-H "X-GitHub-Hook-ID: $HOOK_ID" \
|
|
-H "X-Hub-Signature-256: sha256=$SIGNATURE" \
|
|
-H "User-Agent: GitHub-Actions-Webhook/1.0" \
|
|
-d "$PAYLOAD" \
|
|
--fail --silent --show-error
|
|
|
|
echo "✅ Release webhook sent successfully"
|
|
|
|
- name: Send repository dispatch to desktop
|
|
# Runs even if the webhook step above failed: the two deliveries are
|
|
# independent, and a failing webhook endpoint must not silently skip
|
|
# the desktop release bump.
|
|
if: ${{ !cancelled() }}
|
|
env:
|
|
DISPATCH_TOKEN: ${{ env.DESKTOP_REPO_DISPATCH_TOKEN }}
|
|
DISPATCH_REPO: Comfy-Org/Comfy-Desktop
|
|
RELEASE_TAG: ${{ github.event.release.tag_name }}
|
|
RELEASE_URL: ${{ github.event.release.html_url }}
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
if [ -z "${DISPATCH_TOKEN:-}" ]; then
|
|
echo "::error::DESKTOP_REPO_DISPATCH_TOKEN is required but not set."
|
|
exit 1
|
|
fi
|
|
|
|
PAYLOAD="$(jq -n \
|
|
--arg release_tag "$RELEASE_TAG" \
|
|
--arg release_url "$RELEASE_URL" \
|
|
'{
|
|
event_type: "comfyui_release_published",
|
|
client_payload: {
|
|
release_tag: $release_tag,
|
|
release_url: $release_url
|
|
}
|
|
}')"
|
|
|
|
curl -fsSL \
|
|
-X POST \
|
|
-H "Accept: application/vnd.github+json" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer ${DISPATCH_TOKEN}" \
|
|
"https://api.github.com/repos/${DISPATCH_REPO}/dispatches" \
|
|
-d "$PAYLOAD"
|
|
|
|
echo "✅ Dispatched ComfyUI release ${RELEASE_TAG} to ${DISPATCH_REPO}"
|