Skip to main content

GitHub integration

Run issues, pull requests, releases, and Actions workflows across your clients' repositories from any TaskJuice workflow.

What it does

The GitHub integration turns repository activity into automation you run on behalf of your clients. Connect a Personal Access Token once, then read and write issues, pull requests, reviews, labels, milestones, releases, files, and GitHub Actions runs from any workflow step. Twenty-eight real-time triggers let you react the moment an issue changes, a pull request moves through review, a build finishes, or a security alert opens.

Typical uses: open an issue when a support ticket is escalated, post a Slack summary when a pull request is approved, cut a release when a milestone closes, or file a ticket the moment Dependabot reports a high-severity advisory.

GitHub lives under the Developer Tools category. You can also find it by searching for git or gh.

Connect a GitHub account

The connection holds one credential: a Personal Access Token. This integration does not use OAuth, so there is no "Sign in to GitHub" button and no consent screen. The webhook signing secret for triggers is configured separately, per trigger, when you publish a workflow.

  1. Generate a token in GitHub

    Create a fine-grained token at https://github.com/settings/personal-access-tokens, or a classic token at https://github.com/settings/tokens. Grant only the permissions your workflows need. For the actions below that is typically read and write on Contents, Issues, Pull requests, and Actions, plus read on Metadata.

  2. Paste it into the connection

    In TaskJuice, open the GitHub connection and paste the token into the Personal Access Token field.

  3. Save the connection

    TaskJuice stores the token encrypted. It is not shown again after you save, so keep a copy in GitHub if you need to reference it later.

To revoke access, delete the token in GitHub. Because access is scoped to the token, switching the acting account means generating a new token and rotating it into the connection. For credential lifecycle details, see Connections.

The signing secret is per trigger, not on the connection

Do not put a webhook secret in the connection. When you publish a trigger, TaskJuice gives you a signing secret to paste into the GitHub webhook's Secret field. See the inbound delivery section below.

Choosing a repository

Every repository-scoped action takes a single Repository dropdown rather than separate owner and name fields. The list contains every repository your token can reach, across your personal account and all of your organizations, shown as owner/name.

To act on a repository the workflow computes instead of one you pick, use the {} toggle on the field and bind an expression. Trigger payloads carry the value directly, so a common binding is:

{{$trigger.repository.full_name}}

Dependent dropdowns for Label, Branch, and Workflow populate from whichever repository is selected. Select the repository first, then those fields load.

Triggers

Every trigger is a real-time webhook. Each inbound delivery is one event and produces one activation. There is no polling and no batch or digest collapse.

Most events fire across many lifecycle transitions. The specific transition arrives in the action field of the output, so add a Branch or Switch node downstream and filter on it, for example action == "opened". Push, Create, Delete, Fork, and Commit Status carry no action field. See Triggers and actions.

Issues and discussions

TriggerKeyFires when
Issue Eventgithub/issue-eventAn issue is opened, edited, closed, reopened, assigned, labeled, or otherwise changed.
Issue Comment Eventgithub/issue-comment-eventA comment is created, edited, or deleted on an issue or pull request.
Discussion Eventgithub/discussion-eventA discussion is created, answered, categorized, or otherwise changed.
Discussion Comment Eventgithub/discussion-comment-eventA comment on a discussion is created, edited, or deleted.

Pull requests

TriggerKeyFires when
Pull Request Eventgithub/pull-request-eventA pull request is opened, synchronized, closed, merged, or marked ready for review.
Pull Request Review Eventgithub/pull-request-review-eventA review is submitted, edited, or dismissed.
Pull Request Review Comment Eventgithub/pull-request-review-comment-eventA comment on a pull request diff is created, edited, or deleted.

Code and releases

TriggerKeyFires when
Push Eventgithub/push-eventCommits are pushed to a branch or tag.
Branch or Tag Createdgithub/create-eventA branch or tag is created. Check ref_type to tell them apart.
Branch or Tag Deletedgithub/delete-eventA branch or tag is deleted.
Release Eventgithub/release-eventA release is published, created, edited, or deleted.
Commit Comment Eventgithub/commit-comment-eventA comment is left on a commit.
Commit Status Eventgithub/commit-status-eventExternal CI reports a commit status.

Builds and deployments

TriggerKeyFires when
Workflow Run Eventgithub/workflow-run-eventAn Actions run is requested, is in progress, or completes.
Workflow Job Eventgithub/workflow-job-eventA job in an Actions run is queued, starts, or completes.
Check Run Eventgithub/check-run-eventA check run is created, completes, or is requested again.
Check Suite Eventgithub/check-suite-eventA check suite completes. Use this for an aggregate pass or fail.
Deployment Eventgithub/deployment-eventA deployment is created.
Deployment Status Eventgithub/deployment-status-eventA deployment status is posted.

Repository administration and security

TriggerKeyFires when
Label Eventgithub/label-eventA repository label is created, edited, or deleted.
Milestone Eventgithub/milestone-eventA milestone is created, closed, opened, edited, or deleted.
Repository Eventgithub/repository-eventA repository is created, archived, renamed, or changes visibility.
Repository Member Eventgithub/member-eventA collaborator is added, removed, or has permissions changed.
Repository Forkedgithub/fork-eventSomeone forks the repository.
Repository Starredgithub/star-eventThe repository is starred or unstarred.
Repository Watchedgithub/watch-eventSomeone starts watching the repository.
Dependabot Alert Eventgithub/dependabot-alert-eventA Dependabot alert is created, dismissed, resolved, or reintroduced.
Code Scanning Alert Eventgithub/code-scanning-alert-eventA code-scanning alert is created, fixed, reopened, or closed by a user.

Output shape

Every trigger delivers the raw GitHub webhook body. repository and sender are present on all of them. The event subject arrives under its own key, for example issue, pull_request, release, or workflow_run. organization is present when the repository belongs to an organization, and installation only on GitHub App deliveries, so treat both as optional.

Verifying inbound deliveries

Each trigger verifies every delivery against an HMAC-SHA256 signature in the X-Hub-Signature-256 header. When you publish a trigger, TaskJuice gives you a signing secret. Paste it into the GitHub webhook's configuration under Secret. GitHub signs the raw request body and sends the hex digest in that header. Deliveries whose signature does not match are rejected before the workflow runs.

Actions

All actions authenticate with the token from your connection. Reads accept page and per_page so you control how much comes back on each call. GitHub caps per_page at 100.

Issues

ActionKeyWhat it does
List Issuesgithub/list-issuesList issues, filtered by state, labels, assignee, creator, or milestone.
Get Issuegithub/get-issueFetch a single issue by number.
Create Issuegithub/create-issueOpen a new issue.
Update Issuegithub/update-issueChange title, body, labels, assignees, or milestone.
Close Issuegithub/close-issueClose an issue, optionally recording why.
Reopen Issuegithub/reopen-issueReopen a closed issue.
Lock Issuegithub/lock-issueLock the conversation so only collaborators can comment.
Unlock Issuegithub/unlock-issueUnlock the conversation.
Add Labels to Issuegithub/add-labels-to-issueAdd labels without disturbing the ones already applied.
Remove Label from Issuegithub/remove-label-from-issueRemove one label.
Add Assignees to Issuegithub/add-assignees-to-issueAssign users.
Remove Assignees from Issuegithub/remove-assignees-from-issueUnassign users.
List Issue Commentsgithub/list-issue-commentsList comments on an issue or pull request.
Create Issue Commentgithub/create-issue-commentComment on an issue or pull request.
Update Issue Commentgithub/update-issue-commentEdit an existing comment.
Delete Issue Commentgithub/delete-issue-commentPermanently delete a comment.

List Issues returns pull requests alongside issues, which is how the GitHub API behaves. To exclude them, filter downstream on the pull_request key: it is present only on rows that are pull requests.

Use Close Issue and Reopen Issue rather than setting state through Update Issue. Keeping state changes in their own actions means an update that only edits a title cannot accidentally reopen a closed issue.

Pull requests

ActionKeyWhat it does
List Pull Requestsgithub/list-pull-requestsList pull requests by state, head, or base branch.
Get Pull Requestgithub/get-pull-requestFetch one, including mergeability and diff statistics.
Create Pull Requestgithub/create-pull-requestOpen a pull request from a head branch into a base branch.
Update Pull Requestgithub/update-pull-requestChange title, body, or base branch.
Merge Pull Requestgithub/merge-pull-requestMerge, squash, or rebase.
List Pull Request Filesgithub/list-pull-request-filesList changed files with per-file diff statistics.
List Pull Request Commitsgithub/list-pull-request-commitsList the commits on a pull request.
List Pull Request Reviewsgithub/list-pull-request-reviewsList the reviews left on a pull request.
Create Pull Request Reviewgithub/create-pull-request-reviewApprove, request changes, or comment.
Request Pull Request Reviewersgithub/request-pull-request-reviewersRequest reviews from users or teams.
Create Pull Request Review Commentgithub/create-pull-request-review-commentComment on a specific line of the diff.

Merge Pull Request accepts an expected head SHA. Supply it when the workflow read the pull request earlier in the run and you want the merge to fail rather than land on top of newer commits. GitHub answers 409 when the head has moved.

Repositories, branches, and commits

ActionKeyWhat it does
List Repositoriesgithub/list-repositoriesList repositories the token can access.
Get Repositorygithub/get-repositoryFetch one repository.
Create Repositorygithub/create-repositoryCreate a repository owned by the connected account.
Update Repositorygithub/update-repositoryChange description, homepage, visibility, or default branch.
List Branchesgithub/list-branchesList branches, optionally only protected ones.
Get Branchgithub/get-branchFetch one branch and its protection state.
List Commitsgithub/list-commitsList commits by branch, path, author, or date range.
Get Commitgithub/get-commitFetch one commit with its file list.
List Collaboratorsgithub/list-collaboratorsList users with access.
List Organizationsgithub/list-organizationsList organizations the account belongs to.
List Organization Repositoriesgithub/list-organization-repositoriesList repositories owned by an organization.
Get Authenticated Usergithub/get-authenticated-userFetch the account the connection authenticates as.

Files

ActionKeyWhat it does
Get File Contentsgithub/get-file-contentsRead a file at a branch, tag, or commit.
Create or Update Filegithub/create-or-update-fileCommit a file.
Delete Filegithub/delete-fileDelete a file.

File contents travel base64-encoded in both directions. Get File Contents returns the body in content with encoding: "base64", and Create or Update File expects base64 in its Content field. To replace an existing file you must supply its current sha, which Get File Contents returns. Omit the sha to create a new file.

Labels, milestones, and releases

ActionKeyWhat it does
List Labelsgithub/list-labelsList every label in the repository.
Get Labelgithub/get-labelFetch one label.
Create Labelgithub/create-labelCreate a label.
Update Labelgithub/update-labelRename a label or change its color.
Delete Labelgithub/delete-labelDelete a label and remove it from every issue.
List Milestonesgithub/list-milestonesList milestones by state.
Get Milestonegithub/get-milestoneFetch one milestone.
Create Milestonegithub/create-milestoneCreate a milestone.
Update Milestonegithub/update-milestoneChange title, description, due date, or state.
Delete Milestonegithub/delete-milestoneDelete a milestone. Its issues are not deleted.
List Releasesgithub/list-releasesList releases, newest first.
Get Releasegithub/get-releaseFetch one release by id.
Get Latest Releasegithub/get-latest-releaseFetch the most recent published release.
Create Releasegithub/create-releasePublish a release against a tag.
Update Releasegithub/update-releaseChange name, notes, or draft and pre-release flags.
Delete Releasegithub/delete-releaseDelete a release. The git tag is left in place.

Create Release can write the notes for you. Turn on Generate notes and GitHub composes them from the pull requests merged since the previous tag.

A new release does not appear in List Releases immediately

GitHub's release list is eventually consistent. A release created earlier in the same run can still be missing from List Releases seconds later, while Get Release and Get Latest Release already return it. If a workflow creates a release and then needs to read it back, use Get Release with the id from the create step rather than listing.

Actions and workflows

ActionKeyWhat it does
List Workflowsgithub/list-workflowsList the workflows defined in the repository.
Run Workflowgithub/dispatch-workflowTrigger a workflow_dispatch run against a ref.
List Workflow Runsgithub/list-workflow-runsList runs by branch, event, status, or actor.
Get Workflow Rungithub/get-workflow-runFetch one run and its conclusion.
Cancel Workflow Rungithub/cancel-workflow-runCancel an in-progress run.
Re-run Workflow Rungithub/rerun-workflow-runRe-run a completed run.
List Workflow Run Jobsgithub/list-workflow-run-jobsList a run's jobs with each step and its conclusion.
Create Repository Dispatchgithub/create-repository-dispatchSend a repository_dispatch event with a custom payload.

Run Workflow targets a workflow that already declares a workflow_dispatch trigger in its YAML. If it does not, GitHub answers 404. Create Repository Dispatch is the alternative when you want to trigger work without naming a specific workflow: any workflow listening for repository_dispatch picks it up, and your JSON arrives as github.event.client_payload.

List Workflows, List Workflow Runs, and List Workflow Run Jobs return their items nested under workflows, workflow_runs, and jobs respectively, not as a bare list. Reference them accordingly downstream, for example {{$steps.list_runs.data.workflow_runs}}.

Errors

When a request fails, the step's top-level error code is UPSTREAM_REQUEST_FAILED. GitHub's HTTP status maps to a specific TaskJuice error code:

HTTPTaskJuice error codeRetryableWhat it means
400INVALID_INPUTNoThe request was malformed.
401AUTH_EXPIREDNoThe token was revoked or expired. Rotate it to restore the connection.
403FORBIDDENNoThe token lacks permission for this operation, or a rate limit was exhausted.
404NOT_FOUNDNoThe resource does not exist, or the token cannot see it.
409CONFLICTNoThe state moved underneath you, for example a merge whose head advanced.
422VALIDATION_ERRORNoThe request was well formed but rejected, for example a label that does not exist.
429RATE_LIMITEDYesA rate limit was hit. TaskJuice retries with backoff.
500PROVIDER_ERRORYesGitHub returned a server error. TaskJuice retries.

A 404 on a repository you know exists almost always means the token cannot see it. Check the token's repository access before assuming the name is wrong.

For how a paused or failed run recovers, see Run and step statuses and Reconnect an integration.

Known limitations

  • Authentication is a Personal Access Token, not OAuth. Access is limited to the permissions you granted the token. Switching the acting account means generating a new token and rotating the connection.
  • Tokens expire. Fine-grained and classic tokens can carry an expiry. When one lapses, requests return 401. Rotate the token to restore the connection.
  • Rate limits apply per token. GitHub publishes per-token quotas for authenticated REST requests. Every step records the remaining quota, and a 429 is retried with backoff.
  • Reads return one page per step. Set page and per_page and iterate with a Loop node when you need more than one page. This keeps a single step from exhausting your quota on a large repository.
  • The repository dropdown lists up to 1000 repositories. Beyond that, bind the field with the {} toggle instead of picking from the list.
  • A webhook signing secret is required for every trigger. Deliveries without a valid X-Hub-Signature-256 signature are rejected.
  • github.com only. The connection targets api.github.com. There is no host field, so GitHub Enterprise Server is not supported. If you manage projects on a self-managed host, see the GitLab integration.
  • Projects v2 is not covered. GitHub exposes Projects v2 only through its GraphQL API, which this integration does not use.
  • Release assets cannot be uploaded. Releases can be created, updated, and deleted, but binary asset upload uses a separate upload host and is not available.
  • Triggers are real-time and single-event. Each webhook delivery is one activation. There is no polling, batching, or digest mode.
Was this helpful?