Skip to content
Registry

github

v0.3.0

GitHub CLI and event-driven PR monitoring — typed queries and mutations, authenticated temporary webhooks, CI/comment/review notifications, and merge-triggered cleanup.

Install

bash
iii trigger compose::add worker=github@0.3.0

Run in your project with the iii engine running. Exact versions are immutable and digest-pinned.

Functions34

github::api

Function

Call any GitHub REST endpoint via gh api: { path: "repos/OWNER/REPO/issues", method?, fields?, body?, jq?, paginate?, timeout_ms? } -> { value: <parsed JSON> }. fields become -f key=value form fields (default method flips to POST); body is sent verbatim as the JSON request body. Non-2xx responses are errors carrying gh's stderr.

Request
  • bodyunknown

    Raw JSON request body, piped to gh via `--input -`. Mutually exclusive with fields (gh rejects the combination).

  • fieldsobject

    Form fields, each passed as `-f key=value` (string-typed on the wire).

  • jqstring

    jq expression gh applies to the response (`--jq`); keeps large responses small.

  • methodstring

    HTTP method. gh defaults to GET, or POST when fields/body are present.

  • paginateboolean

    Follow pagination to the end (`--paginate`); combine with jq.

  • pathstringrequired

    Endpoint path, with concrete owner/repo values (e.g. "rate_limit" or "repos/cli/cli/issues") — placeholder expansion needs a checkout the worker does not have.

  • timeout_msinteger· uint64min 0

    Per-call timeout in ms, clamped to the configured max_timeout_ms.

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::exec

Function

Run any gh command: { args: ["pr", "list", "-R", "owner/name"], stdin?, timeout_ms? } -> { stdout, stderr, exit_code, duration_ms, timed_out, stdout_truncated, stderr_truncated }. A non-zero exit or a timeout is DATA here, not an error. The escape hatch for everything without a typed github::* function.

Request
  • argsstring[]required

    gh argv, without the leading `gh` (e.g. ["pr", "status", "-R", "o/r"]).

  • stdinstring

    Bytes piped to gh's stdin (for flags like `--body-file -`).

  • timeout_msinteger· uint64min 0

    Per-call timeout in ms, clamped to the configured max_timeout_ms.

Response
  • duration_msinteger· uint64requiredmin 0

    Wall-clock duration of the invocation, in ms.

  • exit_codeinteger· int32

    Process exit code; null when the process was killed (timeout).

  • stderrstringrequired

    Captured stderr (UTF-8 lossy), capped at `max_output_bytes`.

  • stderr_truncatedbooleanrequired

    True when stderr exceeded `max_output_bytes` and was truncated.

  • stdoutstringrequired

    Captured stdout (UTF-8 lossy), capped at `max_output_bytes`.

  • stdout_truncatedbooleanrequired

    True when stdout exceeded `max_output_bytes` and was truncated.

  • timed_outbooleanrequired

    True when the timeout expired and the process group was killed.

github::issue::close

Function

Close an issue: { repo, number, comment?, reason?: completed|not-planned } -> { output }.

Request
  • commentstring

    Closing comment.

  • numberinteger· uint64requiredmin 0

    Issue number.

  • reasonany of

    Close reason.

    any of (2)
    Variant 1
    valuestringenum completed, not-planned
    Variant 2
    valuenull
  • repostringrequired

    Target repository, "owner/name".

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::issue::comment

Function

Comment on an issue: { repo, number, body } -> { output: <comment url> }.

Request
  • bodystringrequired

    Comment body (markdown).

  • numberinteger· uint64requiredmin 0

    Issue number.

  • repostringrequired

    Target repository, "owner/name".

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::issue::create

Function

Open an issue: { repo: "owner/name", title, body, labels?, assignees? } -> { output: <issue url> }.

Request
  • assigneesstring[]

    Assignee logins.

  • bodystringrequired

    Issue body (markdown).

  • labelsstring[]

    Labels to apply.

  • repostringrequired

    Target repository, "owner/name".

  • titlestringrequired

    Issue title.

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::issue::edit

Function

Edit an issue's title/body/labels/assignees: { repo, number, title?, body?, add_labels?, remove_labels?, add_assignees? } -> { output }.

Request
  • add_assigneesstring[]

    Assignee logins to add.

  • add_labelsstring[]

    Labels to add.

  • bodystring

    New body (markdown).

  • numberinteger· uint64requiredmin 0

    Issue number.

  • remove_labelsstring[]

    Labels to remove.

  • repostringrequired

    Target repository, "owner/name".

  • titlestring

    New title.

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::issue::list

Function

List issues: { repo: "owner/name", state?, limit?, author?, labels?, assignee?, search? } -> { value: [{number, title, state, url, author, labels, assignees, milestone, createdAt, updatedAt}] }.

Request
  • assigneestring

    Filter by assignee login.

  • authorstring

    Filter by author login.

  • labelsstring[]

    Filter by labels (all must match).

  • limitinteger· uint32min 0

    Maximum number of results (gh default: 30).

  • repostringrequired

    Target repository, "owner/name".

  • searchstring

    Search query narrowing the list further (GitHub search syntax).

  • stateany of

    Filter by state (gh default: open).

    any of (2)
    Variant 1
    valuestringenum open, closed, all
    Variant 2
    valuenull
Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::issue::view

Function

View one issue with body and comments: { repo: "owner/name", number } -> { value }.

Request
  • numberinteger· uint64requiredmin 0

    Issue number.

  • repostringrequired

    Target repository, "owner/name".

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::on-config-change

Function

Internal: reload github configuration when it changes.

Request
Empty object
Response
  • okboolean

github::pr::checks

Function

CI check rollup for a pull request: { repo, number } -> { value: [{bucket, name, state, link, workflow, description, startedAt, completedAt}] }. Failing or pending checks are data, not errors.

Request
  • numberinteger· uint64requiredmin 0

    Pull request number.

  • repostringrequired

    Target repository, "owner/name".

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::pr::comment

Function

Comment on a pull request: { repo, number, body } -> { output: <comment url> }.

Request
  • bodystringrequired

    Comment body (markdown).

  • numberinteger· uint64requiredmin 0

    Pull request number.

  • repostringrequired

    Target repository, "owner/name".

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::pr::create

Function

Open a pull request: { repo: "owner/name", title, body, head, base?, draft? } -> { output: <pr url> }. head is required: the worker runs outside any checkout, so gh cannot infer a current branch.

Request
  • basestring

    Base branch to merge into (gh default: the repo default branch).

  • bodystringrequired

    Pull request body (markdown).

  • draftboolean

    Open as draft.

  • headstringrequired

    Head branch the PR ships. Required: the worker runs outside any checkout, so gh cannot infer a current branch.

  • repostringrequired

    Target repository, "owner/name".

  • titlestringrequired

    Pull request title.

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::pr::diff

Function

Unified diff of a pull request: { repo, number } -> { diff, truncated }. truncated is true when the diff exceeded the capture cap.

Request
  • numberinteger· uint64requiredmin 0

    Pull request number.

  • repostringrequired

    Target repository, "owner/name".

Response
  • diffstringrequired

    The unified diff as printed by `gh pr diff`.

  • truncatedbooleanrequired

    True when the diff exceeded the capture cap and was cut off.

github::pr::edit

Function

Edit a pull request's title/body/base/labels: { repo, number, title?, body?, base?, add_labels?, remove_labels? } -> { output }.

Request
  • add_labelsstring[]

    Labels to add.

  • basestring

    New base branch.

  • bodystring

    New body (markdown).

  • numberinteger· uint64requiredmin 0

    Pull request number.

  • remove_labelsstring[]

    Labels to remove.

  • repostringrequired

    Target repository, "owner/name".

  • titlestring

    New title.

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::pr::list

Function

List pull requests: { repo: "owner/name", state?, limit?, author?, labels?, base?, search? } -> { value: [{number, title, state, url, author, headRefName, baseRefName, isDraft, labels, createdAt, updatedAt}] }.

Request
  • authorstring

    Filter by author login.

  • basestring

    Filter by base branch.

  • labelsstring[]

    Filter by labels (all must match).

  • limitinteger· uint32min 0

    Maximum number of results (gh default: 30).

  • repostringrequired

    Target repository, "owner/name".

  • searchstring

    Search query narrowing the list further (GitHub search syntax).

  • stateany of

    Filter by state (gh default: open).

    any of (2)
    Variant 1
    valuestringenum open, closed, merged, all
    Variant 2
    valuenull
Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::pr::merge

Function

Merge a pull request: { repo, number, method: merge|squash|rebase, delete_branch?, auto? } -> { output }. auto enables auto-merge once requirements pass.

Request
  • autoboolean

    Enable auto-merge: merge automatically once requirements pass.

  • delete_branchboolean

    Delete the head branch after merging.

  • methodall ofrequired

    Merge method.

    all of (1)
    Variant 1
    valuestringenum merge, squash, rebase
  • numberinteger· uint64requiredmin 0

    Pull request number.

  • repostringrequired

    Target repository, "owner/name".

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::pr::review

Function

Review a pull request: { repo, number, event: approve|request-changes|comment, body? } -> { output }. gh requires body for request-changes and comment reviews.

Request
  • bodystring

    Review body (gh requires it for request-changes and comment).

  • eventall ofrequired

    Review event.

    all of (1)
    Variant 1
    valuestringenum approve, request-changes, comment
  • numberinteger· uint64requiredmin 0

    Pull request number.

  • repostringrequired

    Target repository, "owner/name".

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::pr::view

Function

View one pull request with body, mergeability, review decision, and diff stats: { repo: "owner/name", number } -> { value }.

Request
  • numberinteger· uint64requiredmin 0

    Pull request number.

  • repostringrequired

    Target repository, "owner/name".

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::release::create

Function

Create a release: { repo, tag, title?, notes?, generate_notes?, draft?, prerelease?, target? } -> { output: <release url> }. generate_notes autogenerates from merged PRs.

Request
  • draftboolean

    Create as draft.

  • generate_notesboolean

    Autogenerate notes from merged PRs since the last release.

  • notesstring

    Release notes body (markdown).

  • prereleaseboolean

    Mark as prerelease.

  • repostringrequired

    Target repository, "owner/name".

  • tagstringrequired

    Tag to release (created at target if it does not exist).

  • targetstring

    Target branch or commit SHA for the tag (gh default: the default branch).

  • titlestring

    Release title.

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::release::list

Function

List releases: { repo: "owner/name", limit? } -> { value: [{tagName, name, isDraft, isLatest, isPrerelease, createdAt, publishedAt}] }.

Request
  • limitinteger· uint32min 0

    Maximum number of results (gh default: 30).

  • repostringrequired

    Target repository, "owner/name".

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::release::view

Function

View one release including body and assets: { repo: "owner/name", tag } -> { value }.

Request
  • repostringrequired

    Target repository, "owner/name".

  • tagstringrequired

    Release tag (e.g. "v1.2.0").

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::repo::list

Function

List repositories of an owner: { owner?, limit? } -> { value: [{name, nameWithOwner, description, url, visibility, ...}] }. owner defaults to the authenticated user.

Request
  • limitinteger· uint32min 0

    Maximum number of results (gh default: 30).

  • ownerstring

    User or organization login (default: the authenticated user).

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::repo::view

Function

View a repository's metadata (description, default branch, visibility, stars, language, topics, latest release): { repo: "owner/name" } -> { value }.

Request
  • repostringrequired

    Target repository, "owner/name".

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::run::cancel

Function

Cancel an in-progress workflow run: { repo, run_id } -> { output }.

Request
  • repostringrequired

    Target repository, "owner/name".

  • run_idinteger· uint64requiredmin 0

    Workflow run id.

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::run::list

Function

List GitHub Actions workflow runs: { repo: "owner/name", workflow?, branch?, status?, limit? } -> { value: [{databaseId, displayTitle, workflowName, headBranch, event, status, conclusion, url, ...}] }.

Request
  • branchstring

    Filter by branch.

  • limitinteger· uint32min 0

    Maximum number of results (gh default: 20).

  • repostringrequired

    Target repository, "owner/name".

  • statusstring

    Filter by status (e.g. completed, in_progress, queued, failure, success).

  • workflowstring

    Filter by workflow (file name, e.g. "ci.yml").

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::run::rerun

Function

Rerun a workflow run: { repo, run_id, failed? } -> { output }. failed reruns only the failed jobs.

Request
  • failedboolean

    Rerun only the failed jobs.

  • repostringrequired

    Target repository, "owner/name".

  • run_idinteger· uint64requiredmin 0

    Workflow run id.

Response
  • outputstringrequired

    gh's stdout, trimmed.

github::run::view

Function

View one workflow run including its jobs and their steps: { repo: "owner/name", run_id } -> { value }.

Request
  • repostringrequired

    Target repository, "owner/name".

  • run_idinteger· uint64requiredmin 0

    Workflow run id (databaseId from github::run::list).

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::search::code

Function

Search code: { query, limit? } -> { value: [{path, repository, sha, url, textMatches}] }. Use qualifiers like "repo:o/r language:rust symbol".

Request
  • limitinteger· uint32min 0

    Maximum number of results (gh default: 30).

  • querystringrequired

    Search query (GitHub search syntax, qualifiers included).

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::search::issues

Function

Search issues across repositories: { query, limit? } -> { value: [{number, title, state, url, repository, author, labels, commentsCount, ...}] }. Use qualifiers like "repo:o/r is:open label:bug".

Request
  • limitinteger· uint32min 0

    Maximum number of results (gh default: 30).

  • querystringrequired

    Search query (GitHub search syntax, qualifiers included).

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::search::prs

Function

Search pull requests across repositories: { query, limit? } -> { value }. Use qualifiers like "repo:o/r is:open review:required".

Request
  • limitinteger· uint32min 0

    Maximum number of results (gh default: 30).

  • querystringrequired

    Search query (GitHub search syntax, qualifiers included).

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::search::repos

Function

Search repositories: { query, limit? } -> { value: [{fullName, description, url, visibility, stargazersCount, language, updatedAt, ...}] }. GitHub search syntax (e.g. "language:rust stars:>100 topic:cli").

Request
  • limitinteger· uint32min 0

    Maximum number of results (gh default: 30).

  • querystringrequired

    Search query (GitHub search syntax, qualifiers included).

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::ui-content

Function

Serve the github worker's injected console UI assets (content function for its console:script / console:style triggers).

Request
  • pathstringrequired

    The asset path from the trigger config (e.g. `state/page.js`).

Response
  • contentstringrequired

    The asset source, verbatim.

  • content_typestringrequired

    MIME type the console should serve the asset with.

github::workflow::list

Function

List workflows in a repo: { repo: "owner/name", all? } -> { value: [{id, name, path, state}] }. all includes disabled workflows.

Request
  • allboolean

    Include disabled workflows.

  • repostringrequired

    Target repository, "owner/name".

Response
  • valueunknownrequired

    The JSON gh printed for the requested `--json` fields.

github::workflow::run

Function

Dispatch a workflow (workflow_dispatch): { repo, workflow: <file name or id>, ref?, inputs? } -> { output }. inputs become -f key=value pairs.

Request
  • inputsobject

    workflow_dispatch inputs, each passed as `-f key=value`.

  • refstring

    Branch or tag to run on (gh default: the repo default branch).

  • repostringrequired

    Target repository, "owner/name".

  • workflowstringrequired

    Workflow file name (e.g. "release.yml") or numeric id.

Response
  • outputstringrequired

    gh's stdout, trimmed.

Triggers1

github::called

Trigger

Fires after each github function runs; carries the call + a short result summary.

Invocation
valueunknown
Return
valueunknown

Search the registry

Find workers, kits and executables, or jump to a page.