Skip to content

GitHub

Manage and react to changes in your GitHub repositories

Trigger key: github.onBranchCreated

The On Branch Created trigger starts a workflow execution when a new branch is created in a GitHub repository.

  • Branch automation: Set up environments or resources for new branches
  • Branch validation: Validate branch naming conventions
  • Notification workflows: Notify teams when important branches are created
  • Branch processing: Process or configure branches automatically
  • Repository: Select the GitHub repository to monitor
  • Branches: Configure which branches to listen for using predicates (e.g., equals “main”, starts with “feature-”)

Each branch event includes:

  • ref: The branch reference (e.g., “refs/heads/feature/new-feature”)
  • ref_type: Type of reference (branch)
  • repository: Repository information
  • sender: User who created the branch

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"description": "Example repository for webhook payloads",
"master_branch": "main",
"pusher_type": "user",
"ref": "feature/new-endpoint",
"ref_type": "branch",
"repository": {
"full_name": "acme/widgets",
"html_url": "https://github.com/acme/widgets",
"id": 123456
},
"sender": {
"html_url": "https://github.com/octocat",
"id": 101,
"login": "octocat"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.branchCreated"
}

Trigger key: github.onCheckRun

The On Check Run trigger starts a workflow execution when a GitHub Checks API check run changes.

GitHub check runs are created by GitHub Apps and power many pull request checks such as Cloudflare Pages, DCO, Sourcery, and GitHub Actions check runs. They are separate from legacy Commit Statuses API statuses. Use On Commit Status for legacy commit status events.

  • Pull request automation: React when Checks API checks complete or fail
  • Quality gates: Continue workflows only after a specific check run reaches the expected state
  • Notifications: Notify teams when app-provided checks fail or require action
  • Merge orchestration: Combine this trigger with List Check Runs For Ref to decide whether all checks are green
  • Repository: Select the GitHub repository to monitor
  • Statuses: Select check run statuses to listen for (queued, in_progress, completed, requested, waiting, pending)
  • Conclusions (optional): Filter completed check runs by conclusion
  • Names (optional): Filter check run names using predicates, e.g. equals “DCO” or matches “Cloudflare.*”
  • Branches (optional): Filter check suite head branches using predicates
  • Pull requests only: Emit only check runs that GitHub associates with at least one pull request

Each event includes:

  • action: The check_run webhook action
  • check_run: Check run details, including name, status, conclusion, head SHA, app, pull requests, and URLs
  • repository: Repository information
  • sender: User or app actor associated with the webhook event

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

GitHub may return an empty pull_requests array for check runs created from forked repository pushes. When Pull requests only is enabled, those fork-originated check runs may be filtered out because GitHub does not include PR metadata in the webhook payload.

{
"data": {
"action": "completed",
"check_run": {
"app": {
"name": "DCO"
},
"check_suite": {
"head_branch": "feature/snake-updates",
"head_sha": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44"
},
"completed_at": "2026-06-01T12:02:00Z",
"conclusion": "success",
"details_url": "https://github.com/acme/snaketoy/runs/123456789",
"head_sha": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"html_url": "https://github.com/acme/snaketoy/runs/123456789",
"id": 123456789,
"name": "DCO",
"pull_requests": [
{
"base": {
"ref": "main"
},
"head": {
"ref": "feature/snake-updates",
"sha": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44"
},
"html_url": "https://github.com/acme/snaketoy/pull/42",
"number": 42
}
],
"started_at": "2026-06-01T12:00:00Z",
"status": "completed"
},
"repository": {
"full_name": "acme/snaketoy",
"html_url": "https://github.com/acme/snaketoy"
},
"sender": {
"html_url": "https://github.com/octocat",
"login": "octocat"
}
},
"timestamp": "2026-06-01T12:02:01Z",
"type": "github.checkRun"
}

Trigger key: github.onCommitStatus

The On Commit Status trigger starts a workflow execution when a GitHub commit status is created or updated.

GitHub commit statuses are the legacy status objects created through the Commit Statuses API. They are separate from GitHub Checks API check runs, which power many PR checks from GitHub Apps such as Cloudflare Pages, DCO, and Sourcery. This trigger does not receive those check-run events. For GitHub Actions workflows, use the On Workflow Run trigger instead.

  • Merge automation: Re-evaluate pull request merge criteria when required status checks change
  • CI/CD orchestration: React to status updates from external CI systems
  • Quality gates: Route workflows based on commit status context and state
  • Notifications: Notify teams when important status checks fail or recover
  • Repository: Select the GitHub repository to monitor
  • States: Select which commit status states to listen for (error, failure, pending, success)
  • Contexts (optional): Configure which status contexts to listen for using predicates (e.g., equals “ci/build”, matches “deploy/.*”)
  • Branches (optional): Configure which branch names to listen for using predicates. GitHub includes branches that contain the status SHA.

Each status event includes:

  • state: The new commit status state (error, failure, pending, success)
  • context: The status context, such as “ci/build”
  • sha: Commit SHA for the status
  • description: Optional status description
  • target_url: Optional link added to the status
  • branches: Branches containing the status SHA
  • commit: Commit information
  • repository: Repository information
  • sender: User who created the status event. This is not necessarily the commit author

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"branches": [
{
"commit": {
"sha": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"url": "https://api.github.com/repos/acme-labs/snaketoy/commits/d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44"
},
"name": "main",
"protected": true
}
],
"commit": {
"commit": {
"message": "Add checkout validation"
},
"html_url": "https://github.com/acme-labs/snaketoy/commit/d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"sha": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44"
},
"context": "ci/build",
"created_at": "2026-01-16T17:56:16Z",
"description": "Build completed successfully",
"id": 15384176893,
"repository": {
"full_name": "acme-labs/snaketoy",
"html_url": "https://github.com/acme-labs/snaketoy",
"id": 101,
"name": "snaketoy"
},
"sender": {
"html_url": "https://github.com/octocat",
"id": 583231,
"login": "octocat"
},
"sha": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"state": "success",
"target_url": "https://github.com/acme-labs/snaketoy/actions/runs/123456789",
"updated_at": "2026-01-16T17:57:20Z"
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.status"
}

Trigger key: github.onIssue

The On Issue trigger starts a workflow execution when issue events occur in a GitHub repository.

  • Issue automation: Automate responses to new or updated issues
  • Notification workflows: Send notifications when issues are created or closed
  • Task management: Sync issues with external task management systems
  • Label automation: Automatically label or categorize issues
  • Repository: Select the GitHub repository to monitor
  • Actions: Select which issue actions to listen for (opened, closed, reopened, etc.)

Each issue event includes:

  • action: The action that triggered the event (opened, closed, reopened, etc.)
  • issue: Complete issue information including title, body, state, labels, assignees
  • repository: Repository information
  • sender: User who triggered the event

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"action": "opened",
"assignee": null,
"issue": {
"html_url": "https://github.com/acme/widgets/issues/42",
"number": 42,
"state": "open",
"title": "Fix flaky build",
"user": {
"login": "octocat"
}
},
"repository": {
"full_name": "acme/widgets",
"html_url": "https://github.com/acme/widgets",
"id": 123456
},
"sender": {
"html_url": "https://github.com/octocat",
"id": 101,
"login": "octocat"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.issue"
}

Trigger key: github.onIssueComment

The On Issue Comment trigger starts a workflow execution when comments are added to issues.

  • Command processing: Process slash commands in issue comments (e.g., /assign, /close)
  • Bot interactions: Respond to comments with automated actions
  • Issue automation: Automate issue management based on comment content
  • Notification systems: Notify teams when important comments are added
  • Repository: Select the GitHub repository to monitor
  • Content Filter: Optional regex pattern to filter comments (e.g., /solve to only trigger on comments containing “/solve”)

Each comment event includes:

  • comment: Comment information including body, author, created timestamp
  • issue: Issue information the comment was added to
  • repository: Repository information
  • sender: User who added the comment

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"action": "created",
"comment": {
"body": "I can reproduce this",
"html_url": "https://github.com/acme/widgets/issues/42#issuecomment-5001",
"id": 5001
},
"issue": {
"html_url": "https://github.com/acme/widgets/issues/42",
"number": 42,
"title": "Fix flaky build"
},
"repository": {
"full_name": "acme/widgets",
"html_url": "https://github.com/acme/widgets",
"id": 123456
},
"sender": {
"html_url": "https://github.com/octocat",
"id": 101,
"login": "octocat"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.issueComment"
}

Trigger key: github.onPRComment

The On PR Comment trigger starts a workflow execution when comments are added on a pull request conversation.

  • Command processing: Process slash commands in PR conversation comments (e.g., /deploy, /test)
  • Bot interactions: Respond to comments with automated actions
  • Notification systems: Notify teams when important PR conversation comments are added
  • Repository: Select the GitHub repository to monitor
  • Content Filter: Optional regex pattern to filter comments (e.g., /solve to only trigger on comments containing “/solve”)

Each comment event includes:

  • comment: Comment information including body, author, created timestamp
  • issue: Issue/PR information; for this trigger it is always a pull request issue
  • repository: Repository information
  • sender: User who added the comment

SuperPlane passes through the full GitHub webhook payload under data for the issue_comment event type.

Common expression paths:

  • PR number: root().data.issue.number
  • PR title: root().data.issue.title
  • PR URL: root().data.issue.pull_request.html_url
  • Comment body: root().data.comment.body

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"action": "created",
"comment": {
"author_association": "CONTRIBUTOR",
"body": "Looks good to me — can we also update the README example to match the new title?",
"created_at": "2026-02-25T18:14:22Z",
"html_url": "https://github.com/acme-labs/snaketoy/pull/42#issuecomment-4928173041",
"id": 4928173041,
"issue_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/42",
"node_id": "IC_kwDOQ7c2jM7zXq2R",
"performed_via_github_app": null,
"pin": null,
"reactions": {
"+1": 2,
"-1": 0,
"confused": 0,
"eyes": 1,
"heart": 0,
"hooray": 1,
"laugh": 0,
"rocket": 0,
"total_count": 4,
"url": "https://api.github.com/repos/acme-labs/snaketoy/issues/comments/4928173041/reactions"
},
"updated_at": "2026-02-25T18:14:29Z",
"url": "https://api.github.com/repos/acme-labs/snaketoy/issues/comments/4928173041",
"user": {
"avatar_url": "https://avatars.githubusercontent.com/u/124578901?v=4",
"events_url": "https://api.github.com/users/jules-ramirez/events{/privacy}",
"followers_url": "https://api.github.com/users/jules-ramirez/followers",
"following_url": "https://api.github.com/users/jules-ramirez/following{/other_user}",
"gists_url": "https://api.github.com/users/jules-ramirez/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/jules-ramirez",
"id": 124578901,
"login": "jules-ramirez",
"node_id": "MDQ6VXNlcjEyNDU3ODkwMQ==",
"organizations_url": "https://api.github.com/users/jules-ramirez/orgs",
"received_events_url": "https://api.github.com/users/jules-ramirez/received_events",
"repos_url": "https://api.github.com/users/jules-ramirez/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/jules-ramirez/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/jules-ramirez/subscriptions",
"type": "User",
"url": "https://api.github.com/users/jules-ramirez",
"user_view_type": "public"
}
},
"issue": {
"active_lock_reason": null,
"assignee": null,
"assignees": [],
"author_association": "MEMBER",
"body": "This PR renames the game title shown in the UI and updates the page header accordingly.",
"closed_at": null,
"comments": 3,
"comments_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/42/comments",
"created_at": "2026-02-25T18:02:11Z",
"draft": false,
"events_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/42/events",
"html_url": "https://github.com/acme-labs/snaketoy/pull/42",
"id": 5129048832,
"labels": [
{
"color": "a2eeef",
"default": true,
"description": "New feature or request",
"id": 889120331,
"name": "enhancement",
"node_id": "LA_kwDOQ7c2jM8AAAABN9qLiw",
"url": "https://api.github.com/repos/acme-labs/snaketoy/labels/enhancement"
}
],
"labels_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/42/labels{/name}",
"locked": false,
"milestone": null,
"node_id": "PR_kwDOQ7c2jM7hY2qB",
"number": 42,
"performed_via_github_app": null,
"pull_request": {
"diff_url": "https://github.com/acme-labs/snaketoy/pull/42.diff",
"html_url": "https://github.com/acme-labs/snaketoy/pull/42",
"merged_at": null,
"patch_url": "https://github.com/acme-labs/snaketoy/pull/42.patch",
"url": "https://api.github.com/repos/acme-labs/snaketoy/pulls/42"
},
"reactions": {
"+1": 5,
"-1": 0,
"confused": 0,
"eyes": 2,
"heart": 1,
"hooray": 0,
"laugh": 0,
"rocket": 1,
"total_count": 9,
"url": "https://api.github.com/repos/acme-labs/snaketoy/issues/42/reactions"
},
"repository_url": "https://api.github.com/repos/acme-labs/snaketoy",
"state": "open",
"state_reason": null,
"timeline_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/42/timeline",
"title": "Rename title from 'Snake' to 'Snake Toy'",
"updated_at": "2026-02-25T18:14:29Z",
"url": "https://api.github.com/repos/acme-labs/snaketoy/issues/42",
"user": {
"avatar_url": "https://avatars.githubusercontent.com/u/90231477?v=4",
"events_url": "https://api.github.com/users/renato-dev/events{/privacy}",
"followers_url": "https://api.github.com/users/renato-dev/followers",
"following_url": "https://api.github.com/users/renato-dev/following{/other_user}",
"gists_url": "https://api.github.com/users/renato-dev/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/renato-dev",
"id": 90231477,
"login": "renato-dev",
"node_id": "MDQ6VXNlcjkwMjMxNDc3",
"organizations_url": "https://api.github.com/users/renato-dev/orgs",
"received_events_url": "https://api.github.com/users/renato-dev/received_events",
"repos_url": "https://api.github.com/users/renato-dev/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/renato-dev/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/renato-dev/subscriptions",
"type": "User",
"url": "https://api.github.com/users/renato-dev",
"user_view_type": "public"
}
},
"repository": {
"allow_forking": true,
"archive_url": "https://api.github.com/repos/acme-labs/snaketoy/{archive_format}{/ref}",
"archived": false,
"assignees_url": "https://api.github.com/repos/acme-labs/snaketoy/assignees{/user}",
"blobs_url": "https://api.github.com/repos/acme-labs/snaketoy/git/blobs{/sha}",
"branches_url": "https://api.github.com/repos/acme-labs/snaketoy/branches{/branch}",
"clone_url": "https://github.com/acme-labs/snaketoy.git",
"collaborators_url": "https://api.github.com/repos/acme-labs/snaketoy/collaborators{/collaborator}",
"comments_url": "https://api.github.com/repos/acme-labs/snaketoy/comments{/number}",
"commits_url": "https://api.github.com/repos/acme-labs/snaketoy/commits{/sha}",
"compare_url": "https://api.github.com/repos/acme-labs/snaketoy/compare/{base}...{head}",
"contents_url": "https://api.github.com/repos/acme-labs/snaketoy/contents/{+path}",
"contributors_url": "https://api.github.com/repos/acme-labs/snaketoy/contributors",
"created_at": "2024-08-11T13:09:40Z",
"default_branch": "main",
"deployments_url": "https://api.github.com/repos/acme-labs/snaketoy/deployments",
"description": "A tiny snake fangame written in JavaScript + HTML5 canvas",
"disabled": false,
"downloads_url": "https://api.github.com/repos/acme-labs/snaketoy/downloads",
"events_url": "https://api.github.com/repos/acme-labs/snaketoy/events",
"fork": false,
"forks": 7,
"forks_count": 7,
"forks_url": "https://api.github.com/repos/acme-labs/snaketoy/forks",
"full_name": "acme-labs/snaketoy",
"git_commits_url": "https://api.github.com/repos/acme-labs/snaketoy/git/commits{/sha}",
"git_refs_url": "https://api.github.com/repos/acme-labs/snaketoy/git/refs{/sha}",
"git_tags_url": "https://api.github.com/repos/acme-labs/snaketoy/git/tags{/sha}",
"git_url": "git://github.com/acme-labs/snaketoy.git",
"has_discussions": true,
"has_downloads": true,
"has_issues": true,
"has_pages": false,
"has_projects": true,
"has_pull_requests": true,
"has_wiki": true,
"homepage": "https://acme.example/snaketoy",
"hooks_url": "https://api.github.com/repos/acme-labs/snaketoy/hooks",
"html_url": "https://github.com/acme-labs/snaketoy",
"id": 712304981,
"is_template": false,
"issue_comment_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/comments{/number}",
"issue_events_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/events{/number}",
"issues_url": "https://api.github.com/repos/acme-labs/snaketoy/issues{/number}",
"keys_url": "https://api.github.com/repos/acme-labs/snaketoy/keys{/key_id}",
"labels_url": "https://api.github.com/repos/acme-labs/snaketoy/labels{/name}",
"language": "JavaScript",
"languages_url": "https://api.github.com/repos/acme-labs/snaketoy/languages",
"license": {
"key": "mit",
"name": "MIT License",
"node_id": "MDc6TGljZW5zZTEz",
"spdx_id": "MIT",
"url": "https://api.github.com/licenses/mit"
},
"merges_url": "https://api.github.com/repos/acme-labs/snaketoy/merges",
"milestones_url": "https://api.github.com/repos/acme-labs/snaketoy/milestones{/number}",
"mirror_url": null,
"name": "snaketoy",
"node_id": "MDEwOlJlcG9zaXRvcnk3MTIzMDQ5ODE=",
"notifications_url": "https://api.github.com/repos/acme-labs/snaketoy/notifications{?since,all,participating}",
"open_issues": 12,
"open_issues_count": 12,
"owner": {
"avatar_url": "https://avatars.githubusercontent.com/u/55120911?v=4",
"events_url": "https://api.github.com/users/acme-labs/events{/privacy}",
"followers_url": "https://api.github.com/users/acme-labs/followers",
"following_url": "https://api.github.com/users/acme-labs/following{/other_user}",
"gists_url": "https://api.github.com/users/acme-labs/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/acme-labs",
"id": 55120911,
"login": "acme-labs",
"node_id": "MDEyOk9yZ2FuaXphdGlvbjU1MTIwOTEx",
"organizations_url": "https://api.github.com/users/acme-labs/orgs",
"received_events_url": "https://api.github.com/users/acme-labs/received_events",
"repos_url": "https://api.github.com/users/acme-labs/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/acme-labs/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/acme-labs/subscriptions",
"type": "Organization",
"url": "https://api.github.com/users/acme-labs",
"user_view_type": "public"
},
"private": false,
"pull_request_creation_policy": "all",
"pulls_url": "https://api.github.com/repos/acme-labs/snaketoy/pulls{/number}",
"pushed_at": "2026-02-25T18:13:58Z",
"releases_url": "https://api.github.com/repos/acme-labs/snaketoy/releases{/id}",
"size": 1380,
"ssh_url": "git@github.com:acme-labs/snaketoy.git",
"stargazers_count": 24,
"stargazers_url": "https://api.github.com/repos/acme-labs/snaketoy/stargazers",
"statuses_url": "https://api.github.com/repos/acme-labs/snaketoy/statuses/{sha}",
"subscribers_url": "https://api.github.com/repos/acme-labs/snaketoy/subscribers",
"subscription_url": "https://api.github.com/repos/acme-labs/snaketoy/subscription",
"svn_url": "https://github.com/acme-labs/snaketoy",
"tags_url": "https://api.github.com/repos/acme-labs/snaketoy/tags",
"teams_url": "https://api.github.com/repos/acme-labs/snaketoy/teams",
"topics": [
"game",
"canvas",
"javascript"
],
"trees_url": "https://api.github.com/repos/acme-labs/snaketoy/git/trees{/sha}",
"updated_at": "2026-02-12T09:41:27Z",
"url": "https://api.github.com/repos/acme-labs/snaketoy",
"visibility": "public",
"watchers": 24,
"watchers_count": 24,
"web_commit_signoff_required": false
},
"sender": {
"avatar_url": "https://avatars.githubusercontent.com/u/55120911?v=4",
"events_url": "https://api.github.com/users/acme-ci/events{/privacy}",
"followers_url": "https://api.github.com/users/acme-ci/followers",
"following_url": "https://api.github.com/users/acme-ci/following{/other_user}",
"gists_url": "https://api.github.com/users/acme-ci/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/acme-ci",
"id": 77100412,
"login": "acme-ci",
"node_id": "MDQ6VXNlcjc3MTAwNDEy",
"organizations_url": "https://api.github.com/users/acme-ci/orgs",
"received_events_url": "https://api.github.com/users/acme-ci/received_events",
"repos_url": "https://api.github.com/users/acme-ci/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/acme-ci/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/acme-ci/subscriptions",
"type": "User",
"url": "https://api.github.com/users/acme-ci",
"user_view_type": "public"
}
},
"timestamp": "2026-02-25T18:14:31.384219122Z",
"type": "github.prComment"
}

Trigger key: github.onPRReviewComment

The On PR Review Comment trigger starts a workflow execution when review comments are added to pull requests.

  • Code review automation: React to line-level review comments
  • Review workflows: Trigger follow-up workflows when a review is submitted
  • Notification systems: Notify teams when new review comments are posted
  • Repository: Select the GitHub repository to monitor
  • Content Filter: Optional regex pattern to filter comment/review body (e.g., /solve)

This trigger handles two GitHub webhook events:

  • pull_request_review_comment: line-level code review comments (comment and pull_request)
  • pull_request_review: submitted review comments (review and pull_request)

SuperPlane passes through the full GitHub webhook payload under data.

Common expression paths:

  • PR number: root().data.pull_request.number
  • Branch name: root().data.pull_request.head.ref
  • Head SHA: root().data.pull_request.head.sha
  • Review comment body: root().data.comment.body (pull_request_review_comment)
  • Review submission body: root().data.review.body (pull_request_review)

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"action": "created",
"comment": {
"_links": {
"html": {
"href": "https://github.com/acme-labs/snaketoy/pull/42#discussion_r3179045528"
},
"pull_request": {
"href": "https://api.github.com/repos/acme-labs/snaketoy/pulls/42"
},
"self": {
"href": "https://api.github.com/repos/acme-labs/snaketoy/pulls/comments/3179045528"
}
},
"author_association": "CONTRIBUTOR",
"body": "Small nit: could we also update the page heading to match the new title?",
"commit_id": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"created_at": "2026-02-25T18:22:13Z",
"diff_hunk": "@@ -3,7 +3,7 @@\n \u003chead\u003e\n \u003cmeta charset=\"UTF-8\"\u003e\n \u003cmeta name=\"viewport\" content=\"width=device-width, user-scalable=no, initial-scale=1\"\u003e\n- \u003ctitle\u003eSnake\u003c/title\u003e\n+ \u003ctitle\u003eSnake Toy\u003c/title\u003e",
"html_url": "https://github.com/acme-labs/snaketoy/pull/42#discussion_r3179045528",
"id": 3179045528,
"line": 6,
"node_id": "PRRC_kwDOQ7c2jM6_9s1Y",
"original_commit_id": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"original_line": 6,
"original_position": 5,
"original_start_line": null,
"path": "index.html",
"position": 5,
"pull_request_review_id": 4632189077,
"pull_request_url": "https://api.github.com/repos/acme-labs/snaketoy/pulls/42",
"reactions": {
"+1": 1,
"-1": 0,
"confused": 0,
"eyes": 0,
"heart": 0,
"hooray": 0,
"laugh": 0,
"rocket": 0,
"total_count": 1,
"url": "https://api.github.com/repos/acme-labs/snaketoy/pulls/comments/3179045528/reactions"
},
"side": "RIGHT",
"start_line": null,
"start_side": null,
"subject_type": "line",
"updated_at": "2026-02-25T18:22:21Z",
"url": "https://api.github.com/repos/acme-labs/snaketoy/pulls/comments/3179045528",
"user": {
"avatar_url": "https://avatars.githubusercontent.com/u/124578901?v=4",
"events_url": "https://api.github.com/users/jules-ramirez/events{/privacy}",
"followers_url": "https://api.github.com/users/jules-ramirez/followers",
"following_url": "https://api.github.com/users/jules-ramirez/following{/other_user}",
"gists_url": "https://api.github.com/users/jules-ramirez/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/jules-ramirez",
"id": 124578901,
"login": "jules-ramirez",
"node_id": "MDQ6VXNlcjEyNDU3ODkwMQ==",
"organizations_url": "https://api.github.com/users/jules-ramirez/orgs",
"received_events_url": "https://api.github.com/users/jules-ramirez/received_events",
"repos_url": "https://api.github.com/users/jules-ramirez/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/jules-ramirez/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/jules-ramirez/subscriptions",
"type": "User",
"url": "https://api.github.com/users/jules-ramirez",
"user_view_type": "public"
}
},
"pull_request": {
"_links": {
"comments": {
"href": "https://api.github.com/repos/acme-labs/snaketoy/issues/42/comments"
},
"commits": {
"href": "https://api.github.com/repos/acme-labs/snaketoy/pulls/42/commits"
},
"html": {
"href": "https://github.com/acme-labs/snaketoy/pull/42"
},
"issue": {
"href": "https://api.github.com/repos/acme-labs/snaketoy/issues/42"
},
"review_comment": {
"href": "https://api.github.com/repos/acme-labs/snaketoy/pulls/comments{/number}"
},
"review_comments": {
"href": "https://api.github.com/repos/acme-labs/snaketoy/pulls/42/comments"
},
"self": {
"href": "https://api.github.com/repos/acme-labs/snaketoy/pulls/42"
},
"statuses": {
"href": "https://api.github.com/repos/acme-labs/snaketoy/statuses/d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44"
}
},
"active_lock_reason": null,
"assignee": null,
"assignees": [],
"author_association": "MEMBER",
"auto_merge": null,
"base": {
"label": "acme-labs:main",
"ref": "main",
"repo": {
"allow_auto_merge": false,
"allow_forking": true,
"allow_merge_commit": true,
"allow_rebase_merge": true,
"allow_squash_merge": true,
"allow_update_branch": false,
"archive_url": "https://api.github.com/repos/acme-labs/snaketoy/{archive_format}{/ref}",
"archived": false,
"assignees_url": "https://api.github.com/repos/acme-labs/snaketoy/assignees{/user}",
"blobs_url": "https://api.github.com/repos/acme-labs/snaketoy/git/blobs{/sha}",
"branches_url": "https://api.github.com/repos/acme-labs/snaketoy/branches{/branch}",
"clone_url": "https://github.com/acme-labs/snaketoy.git",
"collaborators_url": "https://api.github.com/repos/acme-labs/snaketoy/collaborators{/collaborator}",
"comments_url": "https://api.github.com/repos/acme-labs/snaketoy/comments{/number}",
"commits_url": "https://api.github.com/repos/acme-labs/snaketoy/commits{/sha}",
"compare_url": "https://api.github.com/repos/acme-labs/snaketoy/compare/{base}...{head}",
"contents_url": "https://api.github.com/repos/acme-labs/snaketoy/contents/{+path}",
"contributors_url": "https://api.github.com/repos/acme-labs/snaketoy/contributors",
"created_at": "2024-08-11T13:09:40Z",
"default_branch": "main",
"delete_branch_on_merge": false,
"deployments_url": "https://api.github.com/repos/acme-labs/snaketoy/deployments",
"description": "A tiny snake fangame written in JavaScript + HTML5 canvas",
"disabled": false,
"downloads_url": "https://api.github.com/repos/acme-labs/snaketoy/downloads",
"events_url": "https://api.github.com/repos/acme-labs/snaketoy/events",
"fork": false,
"forks": 7,
"forks_count": 7,
"forks_url": "https://api.github.com/repos/acme-labs/snaketoy/forks",
"full_name": "acme-labs/snaketoy",
"git_commits_url": "https://api.github.com/repos/acme-labs/snaketoy/git/commits{/sha}",
"git_refs_url": "https://api.github.com/repos/acme-labs/snaketoy/git/refs{/sha}",
"git_tags_url": "https://api.github.com/repos/acme-labs/snaketoy/git/tags{/sha}",
"git_url": "git://github.com/acme-labs/snaketoy.git",
"has_discussions": true,
"has_downloads": true,
"has_issues": true,
"has_pages": false,
"has_projects": true,
"has_pull_requests": true,
"has_wiki": true,
"homepage": "https://acme.example/snaketoy",
"hooks_url": "https://api.github.com/repos/acme-labs/snaketoy/hooks",
"html_url": "https://github.com/acme-labs/snaketoy",
"id": 712304981,
"is_template": false,
"issue_comment_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/comments{/number}",
"issue_events_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/events{/number}",
"issues_url": "https://api.github.com/repos/acme-labs/snaketoy/issues{/number}",
"keys_url": "https://api.github.com/repos/acme-labs/snaketoy/keys{/key_id}",
"labels_url": "https://api.github.com/repos/acme-labs/snaketoy/labels{/name}",
"language": "JavaScript",
"languages_url": "https://api.github.com/repos/acme-labs/snaketoy/languages",
"license": {
"key": "mit",
"name": "MIT License",
"node_id": "MDc6TGljZW5zZTEz",
"spdx_id": "MIT",
"url": "https://api.github.com/licenses/mit"
},
"merge_commit_message": "PR_TITLE",
"merge_commit_title": "MERGE_MESSAGE",
"merges_url": "https://api.github.com/repos/acme-labs/snaketoy/merges",
"milestones_url": "https://api.github.com/repos/acme-labs/snaketoy/milestones{/number}",
"mirror_url": null,
"name": "snaketoy",
"node_id": "MDEwOlJlcG9zaXRvcnk3MTIzMDQ5ODE=",
"notifications_url": "https://api.github.com/repos/acme-labs/snaketoy/notifications{?since,all,participating}",
"open_issues": 12,
"open_issues_count": 12,
"owner": {
"avatar_url": "https://avatars.githubusercontent.com/u/55120911?v=4",
"events_url": "https://api.github.com/users/acme-labs/events{/privacy}",
"followers_url": "https://api.github.com/users/acme-labs/followers",
"following_url": "https://api.github.com/users/acme-labs/following{/other_user}",
"gists_url": "https://api.github.com/users/acme-labs/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/acme-labs",
"id": 55120911,
"login": "acme-labs",
"node_id": "MDEyOk9yZ2FuaXphdGlvbjU1MTIwOTEx",
"organizations_url": "https://api.github.com/users/acme-labs/orgs",
"received_events_url": "https://api.github.com/users/acme-labs/received_events",
"repos_url": "https://api.github.com/users/acme-labs/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/acme-labs/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/acme-labs/subscriptions",
"type": "Organization",
"url": "https://api.github.com/users/acme-labs",
"user_view_type": "public"
},
"private": false,
"pull_request_creation_policy": "all",
"pulls_url": "https://api.github.com/repos/acme-labs/snaketoy/pulls{/number}",
"pushed_at": "2026-02-25T18:21:49Z",
"releases_url": "https://api.github.com/repos/acme-labs/snaketoy/releases{/id}",
"size": 1380,
"squash_merge_commit_message": "COMMIT_MESSAGES",
"squash_merge_commit_title": "COMMIT_OR_PR_TITLE",
"ssh_url": "git@github.com:acme-labs/snaketoy.git",
"stargazers_count": 24,
"stargazers_url": "https://api.github.com/repos/acme-labs/snaketoy/stargazers",
"statuses_url": "https://api.github.com/repos/acme-labs/snaketoy/statuses/{sha}",
"subscribers_url": "https://api.github.com/repos/acme-labs/snaketoy/subscribers",
"subscription_url": "https://api.github.com/repos/acme-labs/snaketoy/subscription",
"svn_url": "https://github.com/acme-labs/snaketoy",
"tags_url": "https://api.github.com/repos/acme-labs/snaketoy/tags",
"teams_url": "https://api.github.com/repos/acme-labs/snaketoy/teams",
"topics": [
"game",
"javascript",
"canvas"
],
"trees_url": "https://api.github.com/repos/acme-labs/snaketoy/git/trees{/sha}",
"updated_at": "2026-02-12T09:41:27Z",
"url": "https://api.github.com/repos/acme-labs/snaketoy",
"use_squash_pr_title_as_default": false,
"visibility": "public",
"watchers": 24,
"watchers_count": 24,
"web_commit_signoff_required": false
},
"sha": "2d5a1dfbba9d0a8a7f7b14b08a1b6c7c1e2f3a4b",
"user": {
"avatar_url": "https://avatars.githubusercontent.com/u/90231477?v=4",
"events_url": "https://api.github.com/users/renato-dev/events{/privacy}",
"followers_url": "https://api.github.com/users/renato-dev/followers",
"following_url": "https://api.github.com/users/renato-dev/following{/other_user}",
"gists_url": "https://api.github.com/users/renato-dev/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/renato-dev",
"id": 90231477,
"login": "renato-dev",
"node_id": "MDQ6VXNlcjkwMjMxNDc3",
"organizations_url": "https://api.github.com/users/renato-dev/orgs",
"received_events_url": "https://api.github.com/users/renato-dev/received_events",
"repos_url": "https://api.github.com/users/renato-dev/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/renato-dev/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/renato-dev/subscriptions",
"type": "User",
"url": "https://api.github.com/users/renato-dev",
"user_view_type": "public"
}
},
"body": "Renames the UI title and keeps the game logic unchanged.",
"closed_at": null,
"comments_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/42/comments",
"commits_url": "https://api.github.com/repos/acme-labs/snaketoy/pulls/42/commits",
"created_at": "2026-02-25T18:02:11Z",
"diff_url": "https://github.com/acme-labs/snaketoy/pull/42.diff",
"draft": false,
"head": {
"label": "renato-dev:rename-title",
"ref": "rename-title",
"repo": {
"default_branch": "main",
"description": "A tiny snake fangame written in JavaScript + HTML5 canvas",
"fork": false,
"forks_count": 7,
"full_name": "acme-labs/snaketoy",
"html_url": "https://github.com/acme-labs/snaketoy",
"id": 712304981,
"language": "JavaScript",
"name": "snaketoy",
"node_id": "MDEwOlJlcG9zaXRvcnk3MTIzMDQ5ODE=",
"open_issues_count": 12,
"owner": {
"avatar_url": "https://avatars.githubusercontent.com/u/55120911?v=4",
"html_url": "https://github.com/acme-labs",
"id": 55120911,
"login": "acme-labs",
"node_id": "MDEyOk9yZ2FuaXphdGlvbjU1MTIwOTEx",
"site_admin": false,
"type": "Organization"
},
"private": false,
"stargazers_count": 24,
"url": "https://api.github.com/repos/acme-labs/snaketoy",
"watchers_count": 24
},
"sha": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"user": {
"avatar_url": "https://avatars.githubusercontent.com/u/90231477?v=4",
"events_url": "https://api.github.com/users/renato-dev/events{/privacy}",
"followers_url": "https://api.github.com/users/renato-dev/followers",
"following_url": "https://api.github.com/users/renato-dev/following{/other_user}",
"gists_url": "https://api.github.com/users/renato-dev/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/renato-dev",
"id": 90231477,
"login": "renato-dev",
"node_id": "MDQ6VXNlcjkwMjMxNDc3",
"organizations_url": "https://api.github.com/users/renato-dev/orgs",
"received_events_url": "https://api.github.com/users/renato-dev/received_events",
"repos_url": "https://api.github.com/users/renato-dev/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/renato-dev/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/renato-dev/subscriptions",
"type": "User",
"url": "https://api.github.com/users/renato-dev",
"user_view_type": "public"
}
},
"html_url": "https://github.com/acme-labs/snaketoy/pull/42",
"id": 4982710331,
"issue_url": "https://api.github.com/repos/acme-labs/snaketoy/issues/42",
"labels": [],
"locked": false,
"merge_commit_sha": "8b1a4c7d9e0f2a3b4c5d6e7f8a9b0c1d2e3f4a5b",
"merged_at": null,
"milestone": null,
"node_id": "PR_kwDOQ7c2jM7hY2qB",
"number": 42,
"patch_url": "https://github.com/acme-labs/snaketoy/pull/42.patch",
"requested_reviewers": [],
"requested_teams": [],
"review_comment_url": "https://api.github.com/repos/acme-labs/snaketoy/pulls/comments{/number}",
"review_comments_url": "https://api.github.com/repos/acme-labs/snaketoy/pulls/42/comments",
"state": "open",
"statuses_url": "https://api.github.com/repos/acme-labs/snaketoy/statuses/d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"title": "Rename title from 'Snake' to 'Snake Toy'",
"updated_at": "2026-02-25T18:22:21Z",
"url": "https://api.github.com/repos/acme-labs/snaketoy/pulls/42",
"user": {
"avatar_url": "https://avatars.githubusercontent.com/u/90231477?v=4",
"events_url": "https://api.github.com/users/renato-dev/events{/privacy}",
"followers_url": "https://api.github.com/users/renato-dev/followers",
"following_url": "https://api.github.com/users/renato-dev/following{/other_user}",
"gists_url": "https://api.github.com/users/renato-dev/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/renato-dev",
"id": 90231477,
"login": "renato-dev",
"node_id": "MDQ6VXNlcjkwMjMxNDc3",
"organizations_url": "https://api.github.com/users/renato-dev/orgs",
"received_events_url": "https://api.github.com/users/renato-dev/received_events",
"repos_url": "https://api.github.com/users/renato-dev/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/renato-dev/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/renato-dev/subscriptions",
"type": "User",
"url": "https://api.github.com/users/renato-dev",
"user_view_type": "public"
}
},
"repository": {
"created_at": "2024-08-11T13:09:40Z",
"default_branch": "main",
"description": "A tiny snake fangame written in JavaScript + HTML5 canvas",
"fork": false,
"forks_count": 7,
"full_name": "acme-labs/snaketoy",
"html_url": "https://github.com/acme-labs/snaketoy",
"id": 712304981,
"language": "JavaScript",
"name": "snaketoy",
"node_id": "MDEwOlJlcG9zaXRvcnk3MTIzMDQ5ODE=",
"open_issues_count": 12,
"owner": {
"avatar_url": "https://avatars.githubusercontent.com/u/55120911?v=4",
"html_url": "https://github.com/acme-labs",
"id": 55120911,
"login": "acme-labs",
"node_id": "MDEyOk9yZ2FuaXphdGlvbjU1MTIwOTEx",
"site_admin": false,
"type": "Organization"
},
"private": false,
"pushed_at": "2026-02-25T18:21:49Z",
"stargazers_count": 24,
"updated_at": "2026-02-12T09:41:27Z",
"url": "https://api.github.com/repos/acme-labs/snaketoy",
"visibility": "public",
"watchers_count": 24
},
"sender": {
"avatar_url": "https://avatars.githubusercontent.com/u/77100412?v=4",
"events_url": "https://api.github.com/users/acme-ci/events{/privacy}",
"followers_url": "https://api.github.com/users/acme-ci/followers",
"following_url": "https://api.github.com/users/acme-ci/following{/other_user}",
"gists_url": "https://api.github.com/users/acme-ci/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/acme-ci",
"id": 77100412,
"login": "acme-ci",
"node_id": "MDQ6VXNlcjc3MTAwNDEy",
"organizations_url": "https://api.github.com/users/acme-ci/orgs",
"received_events_url": "https://api.github.com/users/acme-ci/received_events",
"repos_url": "https://api.github.com/users/acme-ci/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/acme-ci/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/acme-ci/subscriptions",
"type": "User",
"url": "https://api.github.com/users/acme-ci",
"user_view_type": "public"
}
},
"timestamp": "2026-02-25T18:22:23.912774300Z",
"type": "github.prReviewComment"
}

Trigger key: github.onPullRequest

The On Pull Request trigger starts a workflow execution when pull request events occur in a GitHub repository.

  • PR automation: Automate actions when PRs are opened, merged, or closed
  • Code review workflows: Trigger review processes or notifications
  • CI/CD integration: Run tests or builds on PR events
  • Status updates: Update systems when PR status changes
  • Repository: Select the GitHub repository to monitor
  • Actions: Select which PR actions to listen for (opened, edited, closed, synchronize, etc.)

Each PR event includes:

  • action: The action that triggered the event (opened, edited, closed, synchronize, etc.)
  • changes: When action is edited, includes what changed (title, body, base branch)
  • pull_request: Complete PR information including title, body, state, labels
  • repository: Repository information
  • sender: User who triggered the event

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"action": "opened",
"assignee": null,
"number": 101,
"pull_request": {
"html_url": "https://github.com/acme/widgets/pull/101",
"number": 101,
"state": "open",
"title": "Add new endpoint",
"user": {
"login": "octocat"
}
},
"repository": {
"full_name": "acme/widgets",
"html_url": "https://github.com/acme/widgets",
"id": 123456
},
"sender": {
"html_url": "https://github.com/octocat",
"id": 101,
"login": "octocat"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.pullRequest"
}

Trigger key: github.onPush

The On Push trigger starts a workflow execution when code is pushed to a GitHub repository.

  • CI/CD automation: Trigger builds and deployments on code pushes
  • Code quality checks: Run linting and tests on every push
  • Notification workflows: Send notifications when code is pushed
  • Documentation updates: Automatically update documentation on push
  • Repository: Select the GitHub repository to monitor
  • Refs: Configure which branches/tags to monitor (e.g., refs/heads/main, refs/tags/*)
  • Paths (optional): Glob patterns (GitHub Actions–style) for added, modified, and removed files. Use ! prefix to exclude (for example billing/** with !billing/**/*.md). Patterns starting only with ! assume an include of **. Lists stored as legacy ref-style predicates still honor equals values as globs; matches must be replaced with glob patterns. If the webhook has no per-commit file lists (empty commits or missing added/modified/removed arrays), a configured path filter cannot match and the trigger will not fire. Leave empty to fire on all pushes.

Each push event includes:

  • repository: Repository information
  • ref: The branch or tag that was pushed to
  • commits: Array of commit information (each with added, modified, removed file arrays)
  • pusher: Information about who pushed
  • before/after: Commit SHAs before and after the push

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"after": "4f9c2e1a7b3d45c0d1e9f23456789abcdeffed01",
"base_ref": null,
"before": "1a2b3c4d5e6f708192a3b4c5d6e7f8090a1b2c3d",
"commits": [
{
"added": [],
"author": {
"date": "2026-03-10T14:22:11+01:00",
"email": "alex.doe@example.com",
"name": "Alex Doe",
"username": "alexdoe"
},
"committer": {
"date": "2026-03-10T14:22:11+01:00",
"email": "noreply@example.com",
"name": "GitHub",
"username": "web-flow"
},
"distinct": true,
"id": "4f9c2e1a7b3d45c0d1e9f23456789abcdeffed01",
"message": "feat: add lightweight metrics endpoint (#42)\n\nAdds a basic /metrics handler with a minimal gauge.",
"modified": [
"cmd/server/main.go",
"pkg/metrics/handler.go",
"docs/metrics.md"
],
"removed": [],
"timestamp": "2026-03-10T14:22:11+01:00",
"tree_id": "7a8b9c0d1e2f3a4b5c6d7e8f90123456789abcde",
"url": "https://github.com/example-org/example-repo/commit/4f9c2e1a7b3d45c0d1e9f23456789abcdeffed01"
}
],
"compare": "https://github.com/example-org/example-repo/compare/1a2b3c4d5e6f...4f9c2e1a7b3d",
"created": false,
"deleted": false,
"forced": false,
"head_commit": {
"added": [],
"author": {
"date": "2026-03-10T14:22:11+01:00",
"email": "alex.doe@example.com",
"name": "Alex Doe",
"username": "alexdoe"
},
"committer": {
"date": "2026-03-10T14:22:11+01:00",
"email": "noreply@example.com",
"name": "GitHub",
"username": "web-flow"
},
"distinct": true,
"id": "4f9c2e1a7b3d45c0d1e9f23456789abcdeffed01",
"message": "feat: add lightweight metrics endpoint (#42)\n\nAdds a basic /metrics handler with a minimal gauge.",
"modified": [
"cmd/server/main.go",
"pkg/metrics/handler.go",
"docs/metrics.md"
],
"removed": [],
"timestamp": "2026-03-10T14:22:11+01:00",
"tree_id": "7a8b9c0d1e2f3a4b5c6d7e8f90123456789abcde",
"url": "https://github.com/example-org/example-repo/commit/4f9c2e1a7b3d45c0d1e9f23456789abcdeffed01"
},
"organization": {
"avatar_url": "https://avatars.githubusercontent.com/u/12345678?v=4",
"description": "Example organization for demo data",
"events_url": "https://api.github.com/orgs/example-org/events",
"hooks_url": "https://api.github.com/orgs/example-org/hooks",
"id": 12345678,
"issues_url": "https://api.github.com/orgs/example-org/issues",
"login": "example-org",
"members_url": "https://api.github.com/orgs/example-org/members{/member}",
"node_id": "O_kgDOBb1AaA",
"public_members_url": "https://api.github.com/orgs/example-org/public_members{/member}",
"repos_url": "https://api.github.com/orgs/example-org/repos",
"url": "https://api.github.com/orgs/example-org"
},
"pusher": {
"email": "alex.doe@example.com",
"name": "alexdoe"
},
"ref": "refs/heads/main",
"repository": {
"allow_forking": true,
"archive_url": "https://api.github.com/repos/example-org/example-repo/{archive_format}{/ref}",
"archived": false,
"assignees_url": "https://api.github.com/repos/example-org/example-repo/assignees{/user}",
"blobs_url": "https://api.github.com/repos/example-org/example-repo/git/blobs{/sha}",
"branches_url": "https://api.github.com/repos/example-org/example-repo/branches{/branch}",
"clone_url": "https://github.com/example-org/example-repo.git",
"collaborators_url": "https://api.github.com/repos/example-org/example-repo/collaborators{/collaborator}",
"comments_url": "https://api.github.com/repos/example-org/example-repo/comments{/number}",
"commits_url": "https://api.github.com/repos/example-org/example-repo/commits{/sha}",
"compare_url": "https://api.github.com/repos/example-org/example-repo/compare/{base}...{head}",
"contents_url": "https://api.github.com/repos/example-org/example-repo/contents/{+path}",
"contributors_url": "https://api.github.com/repos/example-org/example-repo/contributors",
"created_at": 1746900000,
"custom_properties": {},
"default_branch": "main",
"deployments_url": "https://api.github.com/repos/example-org/example-repo/deployments",
"description": "Example repository for webhook payloads",
"disabled": false,
"downloads_url": "https://api.github.com/repos/example-org/example-repo/downloads",
"events_url": "https://api.github.com/repos/example-org/example-repo/events",
"fork": false,
"forks": 2,
"forks_count": 2,
"forks_url": "https://api.github.com/repos/example-org/example-repo/forks",
"full_name": "example-org/example-repo",
"git_commits_url": "https://api.github.com/repos/example-org/example-repo/git/commits{/sha}",
"git_refs_url": "https://api.github.com/repos/example-org/example-repo/git/refs{/sha}",
"git_tags_url": "https://api.github.com/repos/example-org/example-repo/git/tags{/sha}",
"git_url": "git://github.com/example-org/example-repo.git",
"has_discussions": false,
"has_downloads": true,
"has_issues": true,
"has_pages": false,
"has_projects": true,
"has_wiki": false,
"homepage": null,
"hooks_url": "https://api.github.com/repos/example-org/example-repo/hooks",
"html_url": "https://github.com/example-org/example-repo",
"id": 987654321,
"is_template": false,
"issue_comment_url": "https://api.github.com/repos/example-org/example-repo/issues/comments{/number}",
"issue_events_url": "https://api.github.com/repos/example-org/example-repo/issues/events{/number}",
"issues_url": "https://api.github.com/repos/example-org/example-repo/issues{/number}",
"keys_url": "https://api.github.com/repos/example-org/example-repo/keys{/key_id}",
"labels_url": "https://api.github.com/repos/example-org/example-repo/labels{/name}",
"language": "TypeScript",
"languages_url": "https://api.github.com/repos/example-org/example-repo/languages",
"license": {
"key": "apache-2.0",
"name": "Apache License 2.0",
"node_id": "MDc6TGljZW5zZTI=",
"spdx_id": "Apache-2.0",
"url": "https://api.github.com/licenses/apache-2.0"
},
"master_branch": "main",
"merges_url": "https://api.github.com/repos/example-org/example-repo/merges",
"milestones_url": "https://api.github.com/repos/example-org/example-repo/milestones{/number}",
"mirror_url": null,
"name": "example-repo",
"node_id": "R_kgDOAbCdEf",
"notifications_url": "https://api.github.com/repos/example-org/example-repo/notifications{?since,all,participating}",
"open_issues": 5,
"open_issues_count": 5,
"organization": "example-org",
"owner": {
"avatar_url": "https://avatars.githubusercontent.com/u/12345678?v=4",
"email": null,
"events_url": "https://api.github.com/users/example-org/events{/privacy}",
"followers_url": "https://api.github.com/users/example-org/followers",
"following_url": "https://api.github.com/users/example-org/following{/other_user}",
"gists_url": "https://api.github.com/users/example-org/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/example-org",
"id": 12345678,
"login": "example-org",
"name": "example-org",
"node_id": "O_kgDOBb1AaA",
"organizations_url": "https://api.github.com/users/example-org/orgs",
"received_events_url": "https://api.github.com/users/example-org/received_events",
"repos_url": "https://api.github.com/users/example-org/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/example-org/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/example-org/subscriptions",
"type": "Organization",
"url": "https://api.github.com/users/example-org",
"user_view_type": "public"
},
"private": false,
"pulls_url": "https://api.github.com/repos/example-org/example-repo/pulls{/number}",
"pushed_at": 1760000000,
"releases_url": "https://api.github.com/repos/example-org/example-repo/releases{/id}",
"size": 48200,
"ssh_url": "git@github.com:example-org/example-repo.git",
"stargazers": 3,
"stargazers_count": 3,
"stargazers_url": "https://api.github.com/repos/example-org/example-repo/stargazers",
"statuses_url": "https://api.github.com/repos/example-org/example-repo/statuses/{sha}",
"subscribers_url": "https://api.github.com/repos/example-org/example-repo/subscribers",
"subscription_url": "https://api.github.com/repos/example-org/example-repo/subscription",
"svn_url": "https://github.com/example-org/example-repo",
"tags_url": "https://api.github.com/repos/example-org/example-repo/tags",
"teams_url": "https://api.github.com/repos/example-org/example-repo/teams",
"topics": [],
"trees_url": "https://api.github.com/repos/example-org/example-repo/git/trees{/sha}",
"updated_at": "2026-03-10T13:50:00Z",
"url": "https://api.github.com/repos/example-org/example-repo",
"visibility": "public",
"watchers": 3,
"watchers_count": 3,
"web_commit_signoff_required": false
},
"sender": {
"avatar_url": "https://avatars.githubusercontent.com/u/87654321?v=4",
"events_url": "https://api.github.com/users/octo-user/events{/privacy}",
"followers_url": "https://api.github.com/users/octo-user/followers",
"following_url": "https://api.github.com/users/octo-user/following{/other_user}",
"gists_url": "https://api.github.com/users/octo-user/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/octo-user",
"id": 87654321,
"login": "octo-user",
"node_id": "MDQ6VXNlcjg3NjU0MzIx",
"organizations_url": "https://api.github.com/users/octo-user/orgs",
"received_events_url": "https://api.github.com/users/octo-user/received_events",
"repos_url": "https://api.github.com/users/octo-user/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/octo-user/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octo-user/subscriptions",
"type": "User",
"url": "https://api.github.com/users/octo-user",
"user_view_type": "public"
}
},
"timestamp": "2026-03-10T13:35:00.31254162Z",
"type": "github.push"
}

Trigger key: github.onRelease

The On Release trigger starts a workflow execution when release events occur in a GitHub repository.

  • Deployment automation: Trigger deployments when releases are published
  • Notification workflows: Send notifications about new releases
  • Release processing: Process release artifacts or metadata
  • Distribution workflows: Distribute releases to multiple systems
  • Repository: Select the GitHub repository to monitor
  • Actions: Select which release actions to listen for (published, created, etc.)

Each release event includes:

  • action: The action that triggered the event (published, created, etc.)
  • release: Complete release information including tag, name, body, assets
  • repository: Repository information
  • sender: User who triggered the event

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"action": "published",
"release": {
"html_url": "https://github.com/acme/widgets/releases/tag/v1.2.3",
"id": 3001,
"name": "Release 1.2.3",
"tag_name": "v1.2.3"
},
"repository": {
"full_name": "acme/widgets",
"html_url": "https://github.com/acme/widgets",
"id": 123456
},
"sender": {
"html_url": "https://github.com/octocat",
"id": 101,
"login": "octocat"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.release"
}

Trigger key: github.onTagCreated

The On Tag Created trigger starts a workflow execution when a new tag is created in a GitHub repository.

  • Version tagging: Trigger workflows when version tags are created
  • Release automation: Automatically create releases from tags
  • Deployment triggers: Deploy specific versions based on tags
  • Tag processing: Process or validate tags as they’re created
  • Repository: Select the GitHub repository to monitor
  • Tags: Configure which tags to listen for using predicates (e.g., equals “v*”, starts with “release-”)

Each tag event includes:

  • ref: The tag reference (e.g., “refs/tags/v1.0.0”)
  • ref_type: Type of reference (tag)
  • repository: Repository information
  • sender: User who created the tag

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"description": "Example repository for webhook payloads",
"master_branch": "main",
"pusher_type": "user",
"ref": "v1.2.3",
"ref_type": "tag",
"repository": {
"full_name": "acme/widgets",
"html_url": "https://github.com/acme/widgets",
"id": 123456
},
"sender": {
"html_url": "https://github.com/octocat",
"id": 101,
"login": "octocat"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.tagCreated"
}

Trigger key: github.onWorkflowRun

The On Workflow Run trigger starts a workflow execution when GitHub Actions workflow runs complete.

  • Workflow orchestration: Chain workflows together based on completion
  • Status monitoring: Monitor CI/CD pipeline results
  • Notification workflows: Send notifications when workflows succeed or fail
  • Post-processing: Process artifacts or results after workflow completion
  • Repository: Select the GitHub repository to monitor
  • Conclusions: Select which workflow conclusions to listen for (success, failure, cancelled, etc.)
  • Workflow Files: Optional list of specific workflow files to monitor (leave empty for all workflows)

Each workflow run event includes:

  • action: The action that triggered the event (completed, requested, etc.)
  • workflow_run: Complete workflow run information including status, conclusion, logs URL
  • repository: Repository information
  • sender: User who triggered the workflow

This trigger automatically sets up a GitHub webhook when configured. The webhook is managed by SuperPlane and will be cleaned up when the trigger is removed.

{
"data": {
"action": "completed",
"organization": {
"avatar_url": "https://avatars.githubusercontent.com/u/12345678?v=4",
"description": "Example organization for demo data",
"events_url": "https://api.github.com/orgs/example-org/events",
"hooks_url": "https://api.github.com/orgs/example-org/hooks",
"id": 12345678,
"issues_url": "https://api.github.com/orgs/example-org/issues",
"login": "example-org",
"members_url": "https://api.github.com/orgs/example-org/members{/member}",
"node_id": "O_kgDOBb1AaA",
"public_members_url": "https://api.github.com/orgs/example-org/public_members{/member}",
"repos_url": "https://api.github.com/orgs/example-org/repos",
"url": "https://api.github.com/orgs/example-org"
},
"repository": {
"created_at": "2024-05-10T12:00:00Z",
"default_branch": "main",
"description": "Example repository for webhook payloads",
"fork": false,
"full_name": "example-org/example-repo",
"html_url": "https://github.com/example-org/example-repo",
"id": 987654321,
"name": "example-repo",
"node_id": "R_kgDOAbCdEf",
"owner": {
"avatar_url": "https://avatars.githubusercontent.com/u/12345678?v=4",
"gravatar_id": "",
"html_url": "https://github.com/example-org",
"id": 12345678,
"login": "example-org",
"node_id": "O_kgDOBb1AaA",
"site_admin": false,
"type": "Organization",
"url": "https://api.github.com/users/example-org"
},
"private": false,
"pushed_at": "2026-03-10T14:22:11Z",
"updated_at": "2026-03-10T13:50:00Z",
"url": "https://api.github.com/repos/example-org/example-repo"
},
"sender": {
"avatar_url": "https://avatars.githubusercontent.com/u/87654321?v=4",
"gravatar_id": "",
"html_url": "https://github.com/alexdoe",
"id": 87654321,
"login": "alexdoe",
"node_id": "MDQ6VXNlcjg3NjU0MzIx",
"site_admin": false,
"type": "User",
"url": "https://api.github.com/users/alexdoe"
},
"workflow": {
"badge_url": "https://github.com/example-org/example-repo/workflows/CI/badge.svg",
"created_at": "2024-05-10T12:00:00Z",
"html_url": "https://github.com/example-org/example-repo/actions/workflows/ci.yml",
"id": 9876543,
"name": "CI",
"node_id": "W_kwDOBb1AaA0123456",
"path": ".github/workflows/ci.yml",
"state": "active",
"updated_at": "2026-03-01T10:00:00Z",
"url": "https://api.github.com/repos/example-org/example-repo/actions/workflows/9876543"
},
"workflow_run": {
"actor": {
"avatar_url": "https://avatars.githubusercontent.com/u/87654321?v=4",
"gravatar_id": "",
"html_url": "https://github.com/alexdoe",
"id": 87654321,
"login": "alexdoe",
"node_id": "MDQ6VXNlcjg3NjU0MzIx",
"site_admin": false,
"type": "User",
"url": "https://api.github.com/users/alexdoe"
},
"artifacts_url": "https://api.github.com/repos/example-org/example-repo/actions/runs/12345678901/artifacts",
"cancel_url": "https://api.github.com/repos/example-org/example-repo/actions/runs/12345678901/cancel",
"check_suite_id": 11223344556,
"check_suite_node_id": "CS_kwDOBb1AaA0000000",
"check_suite_url": "https://api.github.com/repos/example-org/example-repo/check-suites/11223344556",
"conclusion": "success",
"created_at": "2026-03-10T14:22:11Z",
"event": "push",
"head_branch": "main",
"head_commit": {
"author": {
"email": "alex.doe@example.com",
"name": "Alex Doe"
},
"committer": {
"email": "noreply@example.com",
"name": "GitHub"
},
"id": "4f9c2e1a7b3d45c0d1e9f23456789abcdeffed01",
"message": "feat: add lightweight metrics endpoint (#42)\n\nAdds a basic /metrics handler with a minimal gauge.",
"timestamp": "2026-03-10T14:22:11+01:00",
"tree_id": "7a8b9c0d1e2f3a4b5c6d7e8f90123456789abcde"
},
"head_repository": {
"description": "Example repository for webhook payloads",
"fork": false,
"full_name": "example-org/example-repo",
"html_url": "https://github.com/example-org/example-repo",
"id": 987654321,
"name": "example-repo",
"node_id": "R_kgDOAbCdEf",
"owner": {
"avatar_url": "https://avatars.githubusercontent.com/u/12345678?v=4",
"gravatar_id": "",
"html_url": "https://github.com/example-org",
"id": 12345678,
"login": "example-org",
"node_id": "O_kgDOBb1AaA",
"site_admin": false,
"type": "Organization",
"url": "https://api.github.com/users/example-org"
},
"private": false,
"url": "https://api.github.com/repos/example-org/example-repo"
},
"head_sha": "4f9c2e1a7b3d45c0d1e9f23456789abcdeffed01",
"html_url": "https://github.com/example-org/example-repo/actions/runs/12345678901",
"id": 12345678901,
"jobs_url": "https://api.github.com/repos/example-org/example-repo/actions/runs/12345678901/jobs",
"logs_url": "https://api.github.com/repos/example-org/example-repo/actions/runs/12345678901/logs",
"name": "CI",
"node_id": "WFR_kwLOBb1AaA123456789",
"path": ".github/workflows/ci.yml",
"pull_requests": [],
"referenced_workflows": [],
"repository": {
"clone_url": "https://github.com/example-org/example-repo.git",
"created_at": "2024-05-10T12:00:00Z",
"default_branch": "main",
"description": "Example repository for webhook payloads",
"fork": false,
"full_name": "example-org/example-repo",
"git_url": "git://github.com/example-org/example-repo.git",
"html_url": "https://github.com/example-org/example-repo",
"id": 987654321,
"name": "example-repo",
"node_id": "R_kgDOAbCdEf",
"owner": {
"avatar_url": "https://avatars.githubusercontent.com/u/12345678?v=4",
"gravatar_id": "",
"html_url": "https://github.com/example-org",
"id": 12345678,
"login": "example-org",
"node_id": "O_kgDOBb1AaA",
"site_admin": false,
"type": "Organization",
"url": "https://api.github.com/users/example-org"
},
"private": false,
"pushed_at": "2026-03-10T14:22:11Z",
"ssh_url": "git@github.com:example-org/example-repo.git",
"updated_at": "2026-03-10T13:50:00Z",
"url": "https://api.github.com/repos/example-org/example-repo"
},
"rerun_url": "https://api.github.com/repos/example-org/example-repo/actions/runs/12345678901/rerun",
"run_attempt": 1,
"run_number": 42,
"run_started_at": "2026-03-10T14:22:11Z",
"status": "completed",
"triggering_actor": {
"avatar_url": "https://avatars.githubusercontent.com/u/87654321?v=4",
"gravatar_id": "",
"html_url": "https://github.com/alexdoe",
"id": 87654321,
"login": "alexdoe",
"node_id": "MDQ6VXNlcjg3NjU0MzIx",
"site_admin": false,
"type": "User",
"url": "https://api.github.com/users/alexdoe"
},
"updated_at": "2026-03-10T14:25:30Z",
"url": "https://api.github.com/repos/example-org/example-repo/actions/runs/12345678901",
"workflow_id": 9876543,
"workflow_url": "https://api.github.com/repos/example-org/example-repo/actions/workflows/9876543"
}
},
"timestamp": "2026-03-10T14:25:30.31254162Z",
"type": "github.workflowRun"
}

Component key: github.addIssueAssignee

The Add Issue Assignee component adds one or more assignees to an existing GitHub issue without affecting existing assignees.

  • Auto-assignment: Automatically assign issues to team members based on workflow triggers
  • Escalation: Add additional assignees when issues require attention from specific people
  • On-call routing: Assign issues to the current on-call engineer
  • Repository: Select the GitHub repository containing the issue
  • Issue Number: The issue number to add assignees to (supports expressions)
  • Assignees: List of GitHub usernames to assign to the issue

Returns the updated issue object with all current information.

{
"data": {
"assignees": [
{
"id": 1,
"login": "octocat"
}
],
"html_url": "https://github.com/acme/widgets/issues/42",
"id": 101,
"number": 42,
"state": "open",
"title": "Fix flaky build"
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.issue"
}

Component key: github.addIssueLabel

The Add Issue Label component adds one or more labels to an existing GitHub issue without affecting existing labels.

  • Triage automation: Automatically label issues based on content or source
  • Status tracking: Add status labels as issues move through workflows
  • Priority tagging: Apply priority labels based on external signals
  • Repository: Select the GitHub repository containing the issue
  • Issue Number: The issue number to add labels to (supports expressions)
  • Labels: List of label names to add to the issue

Returns the full list of labels currently on the issue after the addition.

{
"data": [
{
"color": "d73a4a",
"default": true,
"description": "Something isn't working",
"id": 208045946,
"name": "bug"
},
{
"color": "a2eeef",
"default": true,
"description": "New feature or request",
"id": 208045947,
"name": "enhancement"
}
],
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.labels"
}

Component key: github.addPullRequestReviewers

The Add Pull Request Reviewers component adds individual users and/or teams as reviewers on a GitHub pull request.

  • Automated reviewer assignment: Request review from the relevant team when a pull request is opened
  • Escalation workflows: Add additional reviewers when a pull request needs attention
  • On-call routing: Request review from the current on-call engineer after checks pass
  • Repository: Select the GitHub repository containing the pull request
  • Pull Request Number: Pull request number to add reviewers to. Expressions are supported.
  • Reviewers: GitHub usernames to request as reviewers
  • Team Reviewers: Team slugs to request as team reviewers (optional)

At least one reviewer or team reviewer is required.

Returns the updated pull request object with the current requested reviewers.

{
"data": {
"base": {
"label": "acme:main",
"ref": "main"
},
"created_at": "2026-04-22T10:00:00Z",
"draft": false,
"head": {
"label": "acme:feature-branch",
"ref": "feature-branch"
},
"html_url": "https://github.com/acme/widgets/pull/42",
"id": 1234567890,
"number": 42,
"requested_reviewers": [
{
"html_url": "https://github.com/octocat",
"id": 1,
"login": "octocat"
}
],
"requested_teams": [
{
"html_url": "https://github.com/orgs/acme/teams/justice-league",
"id": 1,
"slug": "justice-league"
}
],
"state": "open",
"title": "Add new feature",
"user": {
"html_url": "https://github.com/octocat",
"id": 1,
"login": "octocat"
}
},
"timestamp": "2026-04-22T10:00:00.000000000Z",
"type": "github.pullRequest"
}

Component key: github.addReaction

The Add Reaction component adds a reaction emoji to a GitHub comment.

  • Acknowledge commands: Add eyes to PR comments to indicate automation saw them
  • Workflow feedback: React with +1 or rocket on success paths
  • Fast triage signals: Use reactions to show status without posting extra comments
  • Repository: Select the GitHub repository
  • Target: Choose PR conversation comment or PR review line comment
  • Comment ID: The GitHub comment ID to react to (supports expressions)
  • Reaction: One of GitHub’s supported reaction values

Returns the created GitHub reaction object, including id, content, user, and timestamp.

{
"data": {
"content": "eyes",
"created_at": "2026-01-16T17:56:16Z",
"id": 1,
"user": {
"login": "superplane-bot"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.reaction"
}

Component key: github.createDeployment

The Create Deployment component registers a deployment with GitHub for a given ref and environment. This drives the View deployment button and environment box on pull requests—the same surface area used by Railway, Vercel, and Netlify.

  • Preview environments: Create a deployment when a PR opens, then post statuses after provision/build
  • Environment history: Let GitHub track deployment activity per environment name
  • Ephemeral previews: Set Transient environment so GitHub treats the deployment as short-lived
  • Repository: GitHub repository for the deployment
  • Ref: Branch name, tag, or commit SHA to deploy
  • Environment: Environment name (for example preview-pr-42)
  • Description: Optional deployment description
  • Task: Optional deployment task (GitHub default is deploy if omitted)
  • Transient environment: Mark as ephemeral so GitHub can auto-clean inactive deployments
  • Production environment: Mark as production when applicable
  • Auto merge (default off): Whether GitHub may auto-merge the default branch into the ref if needed
  • Required contexts: Status check context names that must pass before the deployment is created (same names as commit status context). Leave empty to skip status gating (recommended for previews, avoids HTTP 409 when CI is pending). If you list one or more contexts, only those must be green. GitHub may respond with HTTP 202 while it prepares verification; this component retries automatically for a short period

Emits github.deployment with the created deployment, including id for Create Deployment Status.

{
"data": {
"created_at": "2024-01-01T00:00:00Z",
"creator": {
"avatar_url": "https://avatars.githubusercontent.com/u/12345678?v=4",
"events_url": "https://api.github.com/users/example-user/events{/privacy}",
"followers_url": "https://api.github.com/users/example-user/followers",
"following_url": "https://api.github.com/users/example-user/following{/other_user}",
"gists_url": "https://api.github.com/users/example-user/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/example-user",
"id": 12345678,
"login": "example-user",
"node_id": "MDQ6VXNlcjEyMzQ1Njc4",
"organizations_url": "https://api.github.com/users/example-user/orgs",
"received_events_url": "https://api.github.com/users/example-user/received_events",
"repos_url": "https://api.github.com/users/example-user/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/example-user/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/example-user/subscriptions",
"type": "User",
"url": "https://api.github.com/users/example-user"
},
"description": "Test deployment",
"environment": "preview-pr-1",
"id": 1234567890,
"node_id": "DE_kwDOExampleNodeId12345",
"payload": {},
"ref": "feat/example-branch",
"repository_url": "https://api.github.com/repos/example-org/example-repo",
"sha": "abc123def456abc123def456abc123def456abc1",
"statuses_url": "https://api.github.com/repos/example-org/example-repo/deployments/1234567890/statuses",
"task": "deploy",
"updated_at": "2024-01-01T00:00:00Z",
"url": "https://api.github.com/repos/example-org/example-repo/deployments/1234567890"
},
"timestamp": "2024-01-01T00:00:00.000000000Z",
"type": "github.deployment"
}

Component key: github.createDeploymentStatus

The Create Deployment Status component posts a new status for an existing deployment. Use it after provisioning succeeds or fails, or to mark a preview as inactive when tearing down.

  • Preview ready: success with Environment URL for the View deployment link
  • Failed build or deploy: failure or error with Log URL
  • Teardown: inactive when the environment is removed
  • Repository: GitHub repository
  • Deployment ID: Numeric deployment id (often from a prior Create Deployment step)
  • State: pending, queued, in_progress, success, failure, error, or inactive
  • Description: Optional status description
  • Environment URL: Live preview URL for View deployment (GitHub requires http(s); host-only values get https:// prepended)
  • Log URL: Link to logs (same http(s) rules; GitHub validates this like target_url)
  • Environment: Optional environment label override on the status

Emits github.deploymentStatus with the created status record.

{
"data": {
"created_at": "2024-01-01T00:00:00Z",
"creator": {
"avatar_url": "https://avatars.githubusercontent.com/u/12345678?v=4",
"events_url": "https://api.github.com/users/example-user/events{/privacy}",
"followers_url": "https://api.github.com/users/example-user/followers",
"following_url": "https://api.github.com/users/example-user/following{/other_user}",
"gists_url": "https://api.github.com/users/example-user/gists{/gist_id}",
"gravatar_id": "",
"html_url": "https://github.com/example-user",
"id": 12345678,
"login": "example-user",
"node_id": "MDQ6VXNlcjEyMzQ1Njc4",
"organizations_url": "https://api.github.com/users/example-user/orgs",
"received_events_url": "https://api.github.com/users/example-user/received_events",
"repos_url": "https://api.github.com/users/example-user/repos",
"site_admin": false,
"starred_url": "https://api.github.com/users/example-user/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/example-user/subscriptions",
"type": "User",
"url": "https://api.github.com/users/example-user"
},
"deployment_url": "https://api.github.com/repos/example-org/example-repo/deployments/1234567890",
"description": "Test deployment status check",
"environment": "preview-pr-1",
"environment_url": "https://example.com",
"id": 9876543210,
"log_url": "https://example.com",
"node_id": "DES_kwDOExampleNodeId12345",
"repository_url": "https://api.github.com/repos/example-org/example-repo",
"state": "success",
"target_url": "https://example.com",
"updated_at": "2024-01-01T00:00:00Z",
"url": "https://api.github.com/repos/example-org/example-repo/deployments/1234567890/statuses/9876543210"
},
"timestamp": "2024-01-01T00:00:00.000000000Z",
"type": "github.deploymentStatus"
}

Component key: github.createIssue

The Create Issue component creates a new issue in a specified GitHub repository.

  • Automated bug reporting: Create issues automatically when errors are detected
  • Task creation: Generate issues from external systems or workflows
  • Notification tracking: Convert notifications into trackable issues
  • Workflow automation: Create issues as part of automated processes
  • Repository: Select the GitHub repository where the issue will be created
  • Title: The issue title (supports expressions)
  • Body: The issue body/description (supports markdown and expressions)
  • Assignees: Optional list of GitHub usernames to assign the issue to
  • Labels: Optional list of labels to apply to the issue

Returns the created issue object with details including:

  • Issue number
  • URL
  • State
  • Created timestamp
  • All issue metadata
{
"data": {
"html_url": "https://github.com/acme/widgets/issues/42",
"id": 101,
"number": 42,
"state": "open",
"title": "Fix flaky build",
"user": {
"login": "octocat"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.issue"
}

Component key: github.createIssueComment

The Create Issue Comment component adds a comment to an existing GitHub issue or pull request. Issues and pull requests share the same comment API in GitHub.

  • Deployment updates: Post deployment status or remediation updates to GitHub issues
  • Runbook linking: Add runbook links, error details, or status for responders
  • Cross-platform sync: Sync Slack or PagerDuty notes into GitHub as comments
  • Automated comments: Add automated comments based on workflow events
  • Repository: Select the GitHub repository containing the issue
  • Issue Number: The issue or PR number to comment on (supports expressions)
  • Body: The comment text (supports Markdown and expressions)

Returns the created comment object including:

  • Comment ID and URL
  • Comment body
  • Author information
  • Created timestamp
{
"data": {
"body": "Deployment to production completed successfully.",
"created_at": "2026-01-16T17:56:16Z",
"html_url": "https://github.com/acme/widgets/issues/42#issuecomment-5001",
"id": 5001,
"updated_at": "2026-01-16T17:56:16Z",
"user": {
"login": "superplane-app[bot]"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.issueComment"
}

Component key: github.createPullRequest

The Create Pull Request component creates a new pull request in a specified GitHub repository.

  • Automated PR creation: Open pull requests automatically as part of CI/CD pipelines
  • Branch promotion: Create PRs to promote changes between branches
  • Workflow automation: Generate PRs from external triggers or scheduled workflows
  • Repository: Select the GitHub repository where the pull request will be created
  • Head: The branch containing the changes (source branch)
  • Base: The branch you want the changes pulled into (target branch, defaults to “main”)
  • Title: The pull request title (supports expressions)
  • Body: Optional pull request description (supports markdown and expressions)
  • Draft: Whether to create the pull request as a draft

Returns the created pull request object with details including:

  • Pull request number
  • URL
  • State
  • Head and base branch information
  • Created timestamp
  • Only same-repository pull requests are supported. Cross-repository (fork) pull requests using GitHub’s owner:branch head syntax are not currently supported - both the head and base branch must live in the selected repository.
{
"data": {
"base": {
"label": "acme:main",
"ref": "main"
},
"created_at": "2026-04-22T10:00:00Z",
"draft": false,
"head": {
"label": "acme:feature-branch",
"ref": "feature-branch"
},
"html_url": "https://github.com/acme/widgets/pull/42",
"id": 1234567890,
"number": 42,
"state": "open",
"title": "Add new feature",
"user": {
"html_url": "https://github.com/octocat",
"id": 1,
"login": "octocat"
}
},
"timestamp": "2026-04-22T10:00:00.000000000Z",
"type": "github.pullRequest"
}

Component key: github.createRelease

The Create Release component creates a new release in a GitHub repository.

  • Automated releases: Create releases automatically after successful builds
  • Version management: Tag and release new versions of software
  • Deployment automation: Create releases as part of deployment workflows
  • Release notes: Automatically generate and publish release notes
  • Repository: Select the GitHub repository
  • Version Strategy: How to determine the version (manual tag, auto-increment)
  • Tag Name: Git tag name for the release (supports expressions)
  • Name: Release title/name (optional, supports expressions)
  • Body: Release notes/description (optional, supports markdown and expressions)
  • Draft: Create as draft release (not published)
  • Prerelease: Mark as pre-release
  • Generate Release Notes: Automatically generate release notes from commits

Returns the created release object with all release information including tag, assets, and metadata.

{
"data": {
"draft": false,
"html_url": "https://github.com/acme/widgets/releases/tag/v1.2.3",
"id": 3001,
"name": "Release 1.2.3",
"prerelease": false,
"tag_name": "v1.2.3"
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.release"
}

Component key: github.createReview

The Create Review component submits a pull request review (approve, request changes, or comment) on a GitHub pull request.

  • Automation: Auto-approve when checks pass
  • Quality gates: Request changes when checks fail
  • Bots: Post review feedback
  • Repository: Select the GitHub repository
  • Pull Number: Pull request number
  • Event: APPROVE, REQUEST_CHANGES, or COMMENT
  • Body: Optional review body (required for REQUEST_CHANGES and COMMENT)

Emits the submitted review object including:

  • id, state, submitted_at
  • body and user
{
"data": {
"body": "LGTM. Approving after successful CI.",
"html_url": "https://github.com/acme/widgets/pull/42#pullrequestreview-9001",
"id": 9001,
"state": "APPROVED",
"submitted_at": "2026-01-25T12:34:56Z",
"user": {
"html_url": "https://github.com/octocat",
"id": 1,
"login": "octocat"
}
},
"timestamp": "2026-01-25T12:34:56.000000000Z",
"type": "github.pullRequestReview"
}

Component key: github.deleteRelease

The Delete Release component removes a release from a GitHub repository.

  • Cleanup: Remove old or incorrect releases
  • Rollback: Delete releases that were created in error
  • Maintenance: Clean up draft or test releases
  • Automated cleanup: Remove releases as part of maintenance workflows
  • Repository: Select the GitHub repository
  • Release Strategy: How to find the release (by tag name or latest)
  • Tag Name: Git tag name of the release to delete (if using tag strategy)
  • Delete Tag: Also delete the associated Git tag (optional)

Returns confirmation of the deletion.

{
"data": {
"deleted_at": "2026-01-16T17:55:00Z",
"draft": false,
"html_url": "https://github.com/acme/widgets/releases/tag/v1.2.3",
"id": 3001,
"name": "Release 1.2.3",
"prerelease": false,
"tag_deleted": true,
"tag_name": "v1.2.3"
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.release"
}

Component key: github.getCombinedCommitStatus

The Get Combined Commit Status component reads GitHub’s combined commit status for a commit, branch, or tag.

This component uses the Commit Statuses API. It summarizes legacy commit statuses, such as statuses posted by external CI systems through GitHub’s statuses endpoint. It does not include GitHub Checks API check runs.

  • Status gates: Check whether all commit status contexts are green before continuing
  • Pull request automation: Pair with On Commit Status to re-evaluate a PR when one status changes
  • Branch protection helpers: Inspect the aggregate status for a branch head or merge commit
  • Notifications: Send concise status summaries when a commit is blocked by failed or pending statuses
  • Repository: Select the GitHub repository
  • Ref: Commit SHA, branch name, or tag name to inspect. Expressions are supported.

Emits a combined commit status object on the default output channel. The payload includes the combined state, sha, total_count, and the latest status for each status context in statuses.

{
"data": {
"commit_url": "https://api.github.com/repos/acme-labs/snaketoy/commits/d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"repository_url": "https://api.github.com/repos/acme-labs/snaketoy",
"sha": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"state": "failure",
"statuses": [
{
"context": "ci/build",
"created_at": "2026-01-16T17:45:00Z",
"description": "Build passed",
"state": "success",
"target_url": "https://ci.example.com/builds/123",
"updated_at": "2026-01-16T17:45:10Z"
},
{
"context": "ci/lint",
"created_at": "2026-01-16T17:45:20Z",
"description": "Lint failed",
"state": "failure",
"target_url": "https://ci.example.com/builds/124",
"updated_at": "2026-01-16T17:46:00Z"
},
{
"context": "deploy/preview",
"created_at": "2026-01-16T17:46:10Z",
"description": "Deployment pending",
"state": "pending",
"target_url": "https://deploy.example.com/previews/42",
"updated_at": "2026-01-16T17:46:10Z"
}
],
"total_count": 3
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.combinedCommitStatus"
}

Component key: github.getIssue

The Get Issue component retrieves a specific issue from a GitHub repository by its issue number.

  • Issue lookup: Fetch issue details for processing or display
  • Workflow automation: Get issue information to make decisions in workflows
  • Data enrichment: Retrieve issue data to combine with other information
  • Status checking: Check issue status before performing actions
  • Repository: Select the GitHub repository containing the issue
  • Issue Number: The issue number to retrieve (supports expressions)

Returns the complete issue object including:

  • Issue number, title, and body
  • State (open/closed)
  • Labels and assignees
  • Created and updated timestamps
  • Author information
  • Comments count and other metadata
{
"data": {
"comments": 3,
"html_url": "https://github.com/acme/widgets/issues/42",
"id": 101,
"number": 42,
"state": "open",
"title": "Fix flaky build",
"user": {
"login": "octocat"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.issue"
}

Component key: github.getRelease

The Get Release component retrieves release information from a GitHub repository.

  • Release Monitoring: Get details about a specific release
  • Deployment Pipelines: Fetch release assets and metadata for deployment
  • Version Tracking: Monitor release status and changelog
  • CI/CD Integration: Retrieve release information for build processes
  • Repository: Select the GitHub repository
  • Release Strategy: How to find the release (by tag name, by ID, or latest)
  • Tag Name: Git tag name of the release (if using tag strategy)
  • Release ID: Numeric release ID (if using ID strategy)

Returns release information including:

  • Release ID, name, and tag name
  • Release body/description
  • Draft and prerelease status
  • Created and published timestamps
  • Author information
  • Asset URLs
{
"data": {
"assets": [
{
"browser_download_url": "https://github.com/acme/widgets/releases/download/v1.2.3/app-v1.2.3.zip",
"content_type": "application/zip",
"download_count": 42,
"id": 1,
"label": "Application Bundle",
"name": "app-v1.2.3.zip",
"size": 1024000
}
],
"author": {
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"html_url": "https://github.com/octocat",
"id": 1,
"login": "octocat"
},
"body": "## What's Changed\n\n- Feature A\n- Bug fix B",
"created_at": "2026-01-15T10:00:00Z",
"draft": false,
"html_url": "https://github.com/acme/widgets/releases/tag/v1.2.3",
"id": 3001,
"name": "Release 1.2.3",
"prerelease": false,
"published_at": "2026-01-16T12:00:00Z",
"tag_name": "v1.2.3"
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.release"
}

Component key: github.getRepositoryPermission

The Get Repository Permission component retrieves a user’s effective permission level for a GitHub repository.

  • Access checks: Verify if a user has expected repository access
  • Automation gates: Branch workflow behavior by repository permissions
  • Auditing: Inspect repository roles in automated compliance checks
  • Triage routing: Route incidents based on whether a user can push/administer
{
"data": {
"permission": "admin",
"role_name": "admin",
"user": {
"html_url": "https://github.com/octocat",
"id": 1,
"login": "octocat"
}
},
"timestamp": "2026-02-26T14:30:00Z",
"type": "github.repositoryPermission"
}

Component key: github.getWorkflowUsage

The Get Workflow Usage component retrieves billable GitHub Actions usage (minutes) for the installation’s organization.

This action calls GitHub’s billing usage API, which requires the GitHub App to have Organization permission: Organization administration (read).

Important: Existing installations will need to approve the new permission when prompted by GitHub. Until the permission is granted, this action will return a 403 error.

Note: This component uses GitHub’s enhanced billing usage report API, which provides detailed usage information.

  • Returns billing data for the current billing cycle
  • Only private repositories on GitHub-hosted runners accrue billable minutes
  • Public repositories and self-hosted runners show zero billable usage
  • Can filter by specific repositories when selected
  • Uses enhanced billing platform API for accurate reporting
  • Repositories (optional, multiselect): Select one or more specific repositories to track. These will be included in the output for reference (max 5) and stored in node metadata with full repository details (ID, name, URL). When repositories are selected, only usage for those repositories is included in the totals.

Returns usage data with:

  • minutes_used: Total billable minutes used in the current billing cycle
  • minutes_used_breakdown: Map of minutes by runner SKU (e.g., “Actions Linux”: 120, “Actions Windows”: 60, “Actions macOS”: 30)
  • included_minutes: Always 0 (not provided by enhanced billing API)
  • total_paid_minutes_used: Estimated paid minutes based on cost data
  • repositories: List of selected repositories for tracking (max 5)

Note: Breakdown is by runner SKU (OS and type), not by individual workflow.

The component stores repository information in node metadata:

  • Repository ID, name, and URL for each selected repository (max 5)
  • This metadata is displayed in the workflow canvas for easy reference
  • Billing Monitoring: Track GitHub Actions usage for billing purposes
  • Quota Management: Monitor usage to avoid exceeding billing quotas
  • Cost Control: Alert when usage approaches limits or budget thresholds
  • Usage Reporting: Generate monthly or periodic usage reports for compliance
  • Resource Planning: Analyze runner usage patterns by OS type
{
"data": {
"included_minutes": 0,
"minutes_used": 1840.5,
"minutes_used_breakdown": {
"Actions Linux": 1200,
"Actions Windows": 400.5,
"Actions macOS": 240
},
"repositories": [
"repo1",
"repo2",
"repo3"
],
"total_paid_minutes_used": 150
},
"timestamp": "2026-02-17T20:00:00Z",
"type": "github.workflowUsage"
}

Component key: github.listCheckRunsForRef

The List Check Runs For Ref component retrieves GitHub Checks API check runs for a commit SHA, branch, or tag.

Use it after On Check Run or other GitHub triggers to inspect the full set of Checks API results for the same ref before deciding whether to continue.

  • PR quality gates: Continue only when all check runs for a PR commit are complete and green
  • Check aggregation: Inspect the full Checks API state after one check run changes
  • Notifications: Build summaries for failed or pending check runs
  • Repository: Select the GitHub repository
  • Ref: Commit SHA, branch, or tag ref
  • Check Name (optional): Return only check runs with this name
  • Status (optional): Return only check runs with this status
  • Filter: Use latest to return the latest run per check suite, or all to include all matching runs

Returns GitHub’s check run list response, including total_count and check_runs. Each check run includes its name, status, conclusion, URLs, app metadata, associated pull requests, and timestamps.

{
"data": {
"check_runs": [
{
"app": {
"name": "DCO"
},
"conclusion": "success",
"details_url": "https://github.com/acme/snaketoy/runs/123456789",
"head_sha": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"html_url": "https://github.com/acme/snaketoy/runs/123456789",
"id": 123456789,
"name": "DCO",
"pull_requests": [
{
"html_url": "https://github.com/acme/snaketoy/pull/42",
"number": 42
}
],
"status": "completed"
},
{
"app": {
"name": "Cloudflare Pages"
},
"conclusion": "success",
"details_url": "https://dash.cloudflare.com/example",
"head_sha": "d6f3c8a2e8b7f0a9c0a1f67f0c5d7b2a1d9e3f44",
"html_url": "https://github.com/acme/snaketoy/runs/987654321",
"id": 987654321,
"name": "Cloudflare Pages",
"pull_requests": [
{
"html_url": "https://github.com/acme/snaketoy/pull/42",
"number": 42
}
],
"status": "completed"
}
],
"total_count": 2
},
"timestamp": "2026-06-01T12:02:02Z",
"type": "github.checkRuns"
}

Component key: github.mergePullRequest

The Merge Pull Request component merges an open pull request in a GitHub repository.

  • Automated PR merge gates: Merge a pull request after status checks or check runs pass
  • Release automation: Merge approved promotion branches into a release branch
  • Queue workflows: Merge pull requests from a controlled SuperPlane workflow
  • Repository: Select the GitHub repository containing the pull request
  • Pull Request Number: Pull request number to merge. Expressions are supported.
  • Merge Method: Merge strategy to use. Defaults to “merge”.
  • Expected SHA: Optional head SHA guard. GitHub rejects the merge if the pull request head has changed.
  • Commit Title: Optional title for the merge commit, squash commit, or rebase commit.
  • Commit Message: Optional commit message for the merge commit or squash commit.

Returns GitHub’s merge result, including whether the pull request was merged, the resulting commit SHA, and GitHub’s message.

{
"data": {
"merged": true,
"message": "Pull Request successfully merged",
"sha": "0e98bc41ab56cee9ff17883607b56f96e7814c98"
},
"timestamp": "2026-04-22T10:00:00.000000000Z",
"type": "github.pullRequestMerge"
}

Component key: github.publishCommitStatus

The Publish Commit Status component creates a status check on a GitHub commit, commonly used for CI/CD integrations.

  • CI/CD integration: Report build and test results to GitHub
  • Status reporting: Update commit status from external systems
  • Deployment tracking: Mark commits as deployed or failed
  • Quality gates: Report code quality check results
  • Repository: Select the GitHub repository
  • Commit SHA: The full 40-character commit SHA (supports expressions)
  • State: Status state - pending, success, failure, or error
  • Context: A label to identify this status check (e.g., “ci/build”, “deploy/production”)
  • Description: Short description of the status (max ~140 characters, optional)
  • Target URL: Link to build logs, test results, or deployment details (optional)

Returns the created status object with all status information.

{
"data": {
"context": "ci/build",
"created_at": "2026-01-16T17:45:00Z",
"description": "All checks passed",
"state": "success",
"target_url": "https://ci.example.com/builds/123",
"updated_at": "2026-01-16T17:45:10Z"
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.commitStatus"
}

Component key: github.removeIssueAssignee

The Remove Issue Assignee component removes one or more assignees from an existing GitHub issue without affecting other assignees.

  • De-escalation: Remove assignees when issues are resolved or transferred
  • Rotation: Remove previous on-call assignees when rotating responsibilities
  • Cleanup: Remove assignees who are no longer involved with an issue
  • Repository: Select the GitHub repository containing the issue
  • Issue Number: The issue number to remove assignees from (supports expressions)
  • Assignees: List of GitHub usernames to remove from the issue

Returns the updated issue object with all current information.

{
"data": {
"assignees": [],
"html_url": "https://github.com/acme/widgets/issues/42",
"id": 101,
"number": 42,
"state": "open",
"title": "Fix flaky build"
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.issue"
}

Component key: github.removeIssueLabel

The Remove Issue Label component removes one or more labels from an existing GitHub issue without affecting other labels.

  • Triage cleanup: Remove temporary triage labels after processing
  • Status transitions: Remove old status labels when issues move forward
  • Automated cleanup: Strip labels that no longer apply based on workflow events
  • Repository: Select the GitHub repository containing the issue
  • Issue Number: The issue number to remove labels from (supports expressions)
  • Labels: List of label names to remove from the issue

Returns the remaining list of labels on the issue after the removal.

{
"data": [
{
"color": "a2eeef",
"default": true,
"description": "New feature or request",
"id": 208045947,
"name": "enhancement"
}
],
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.labels"
}

Component key: github.runWorkflow

The Run Workflow component triggers a GitHub Actions workflow and waits for it to complete.

  • CI/CD orchestration: Trigger builds and deployments from SuperPlane workflows
  • Automated testing: Run test suites as part of workflow automation
  • Multi-stage pipelines: Coordinate complex deployment pipelines
  • Workflow chaining: Chain multiple GitHub Actions workflows together
  1. Dispatches the specified GitHub Actions workflow with optional inputs
  2. Waits for the workflow run to complete (monitored via webhook and polling)
  3. Routes execution based on workflow conclusion:
    • Passed channel: Workflow completed successfully
    • Failed channel: Workflow failed or was cancelled
  • Repository: Select the GitHub repository containing the workflow
  • Workflow File: Path to the workflow file (e.g., .github/workflows/ci.yml)
  • Branch or Tag: Git reference to run the workflow on (default: main)
  • Inputs: Optional workflow inputs as key-value pairs (supports expressions)
  • Passed: Emitted when workflow completes successfully
  • Failed: Emitted when workflow fails or is cancelled
  • The component automatically sets up webhook monitoring for workflow completion
  • Falls back to polling if webhook doesn’t arrive
  • Can be cancelled, which will cancel the running GitHub Actions workflow
{
"data": {
"workflow_run": {
"conclusion": "success",
"html_url": "https://github.com/acme/widgets/actions/runs/9001",
"id": 9001,
"status": "completed"
}
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.workflow.finished"
}

Component key: github.updateIssue

The Update Issue component modifies an existing GitHub issue with new information.

  • Status updates: Change issue state (open/closed) based on workflow results
  • Label management: Add or update labels on issues
  • Assignee updates: Assign issues to team members automatically
  • Content updates: Update issue title or body with new information
  • Repository: Select the GitHub repository containing the issue
    • Issue Number: The issue number to update (supports expressions)
  • Title: New title for the issue (optional, supports expressions)
  • Body: New body/description for the issue (optional, supports expressions)
  • State: Change issue state to “open” or “closed” (optional)
  • Assignees: List of GitHub usernames to assign the issue to (optional)
  • Labels: List of labels to apply to the issue (optional)

Returns the updated issue object with all current information.

{
"data": {
"html_url": "https://github.com/acme/widgets/issues/42",
"id": 101,
"number": 42,
"state": "closed",
"title": "Fix flaky build",
"updated_at": "2026-01-16T17:40:00Z"
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.issue"
}

Component key: github.updateIssueComment

The Update Issue Comment component edits an existing comment on a GitHub issue or pull request.

  • Status updates: Update a summary comment on a PR instead of posting new comments on every run
  • Living reports: Keep a single comment with the latest test results, coverage, or review status
  • Avoid spam: Update one comment instead of flooding a PR with repeated bot comments
  • Repository: Select the GitHub repository
  • Comment ID: The numeric ID of the comment to update (supports expressions)
  • Body: The new comment text (supports Markdown and expressions)

Returns the updated comment object including comment ID, URL, body, and timestamps.

  • The comment ID is returned in the output of github.createIssueComment as id
  • You can store the comment ID in canvas memory on first run, then use it for subsequent updates
  • The authenticated user must have permission to edit the comment (must be the comment author or have admin access)
{
"data": {
"author_association": "NONE",
"body": "## Docs Review Summary\n\n**Verdict:** No update needed\n\nAll changes are internal refactors with no user-facing impact.",
"created_at": "2026-01-16T17:56:16Z",
"html_url": "https://github.com/acme/widgets/issues/42#issuecomment-1234567890",
"id": 1234567890,
"issue_url": "https://api.github.com/repos/acme/widgets/issues/42",
"node_id": "IC_kwDOExample",
"reactions": {
"+1": 0,
"-1": 0,
"confused": 0,
"eyes": 0,
"heart": 0,
"hooray": 0,
"laugh": 0,
"rocket": 0,
"total_count": 0,
"url": "https://api.github.com/repos/acme/widgets/issues/comments/1234567890/reactions"
},
"updated_at": "2026-01-16T18:30:00Z",
"url": "https://api.github.com/repos/acme/widgets/issues/comments/1234567890",
"user": {
"avatar_url": "https://avatars.githubusercontent.com/u/12345678?v=4",
"html_url": "https://github.com/apps/superplane-app",
"id": 12345678,
"login": "superplane-app[bot]",
"node_id": "BOT_kwExample",
"site_admin": false,
"type": "Bot",
"url": "https://api.github.com/users/superplane-app[bot]"
}
},
"timestamp": "2026-01-16T18:30:00.680755501Z",
"type": "github.issueComment"
}

Component key: github.updateRelease

The Update Release component modifies an existing GitHub release.

  • Release updates: Update release notes or metadata after creation
  • Draft to published: Convert draft releases to published releases
  • Metadata updates: Update release name, description, or tags
  • Prerelease management: Change prerelease status
  • Repository: Select the GitHub repository
  • Release Strategy: How to find the release (by tag name or latest)
  • Tag Name: Git tag name of the release to update (if using tag strategy)
  • Name: New release title/name (optional, supports expressions)
  • Body: New release notes/description (optional, supports markdown and expressions)
  • Draft: Update draft status
  • Prerelease: Update prerelease status
  • Generate Release Notes: Regenerate release notes from commits

Returns the updated release object with all current information.

{
"data": {
"draft": false,
"html_url": "https://github.com/acme/widgets/releases/tag/v1.2.3",
"id": 3001,
"name": "Release 1.2.3",
"prerelease": false,
"tag_name": "v1.2.3",
"updated_at": "2026-01-16T17:50:00Z"
},
"timestamp": "2026-01-16T17:56:16.680755501Z",
"type": "github.release"
}