Rensei docs

GitHub Actions

Workflow-run ingestion.

The GitHub Actions integration enables workflows to ingest CI/CD pipeline results from GitHub Actions. When a GitHub Actions workflow completes (success or failure), Rensei receives a webhook event and can trigger downstream workflows or update issue status.

What you can do

  • Ingest workflow runs from GitHub Actions (success, failure, skipped, cancelled)
  • Trigger workflows when a GitHub Actions job completes
  • Update issues based on CI status
  • Notify teams on CI failures
  • Track build artifacts and test results

Webhook setup

GitHub Actions webhooks are automatically configured when the GitHub integration is connected.

Enable workflow run events

To receive workflow run events in Rensei:

  1. In a GitHub repository, go to Settings → Webhooks
  2. Verify that Rensei's webhook is configured (added by the GitHub integration)
  3. Under Let me select individual events, ensure Workflow runs is checked

Once enabled, every GitHub Actions workflow run will trigger a webhook event to Rensei.

Workflow nodes and triggers

GitHub Actions integration provides a workflow_run trigger:

TriggerPayload
trigger.github_actions.workflow_runWorkflow name, job status, conclusion, artifacts URL

Example: Trigger when CI passes

trigger:
  type: trigger.github_actions.workflow_run
  filter:
    status: "completed"
    conclusion: "success"

steps:
  - id: notify_team
    type: slack.post
    inputs:
      channel: "#deployments"
      message: |
        :white_check_mark: {{ $trigger.github_actions.workflow_name }} passed
        Run: {{ $trigger.github_actions.run_url }}

Example: Escalate on CI failure

trigger:
  type: trigger.github_actions.workflow_run
  filter:
    conclusion: "failure"

steps:
  - id: escalate
    type: linear.issue.create
    inputs:
      teamId: "ENG"
      title: "CI failure: {{ $trigger.github_actions.workflow_name }}"
      description: |
        GitHub Actions workflow failed:
        - Workflow: {{ $trigger.github_actions.workflow_name }}
        - Run: {{ $trigger.github_actions.run_url }}
        - Branch: {{ $trigger.github_actions.head_branch }}
      priority: 2  # High

Webhook payload structure

The GitHub Actions webhook payload includes:

{
  "action": "completed",
  "workflow_run": {
    "id": 1234567890,
    "name": "CI",
    "head_branch": "main",
    "status": "completed",
    "conclusion": "success",
    "created_at": "2026-06-02T12:00:00Z",
    "updated_at": "2026-06-02T12:05:00Z",
    "run_number": 42,
    "event": "push",
    "display_title": "Bump version",
    "html_url": "https://github.com/owner/repo/actions/runs/1234567890"
  },
  "repository": {
    "name": "repo",
    "full_name": "owner/repo",
    "html_url": "https://github.com/owner/repo"
  }
}

Accessible trigger variables

In workflows, use the following expressions to access CI results:

VariableExample
$trigger.github_actions.workflow_name"CI"
$trigger.github_actions.conclusion"success" or "failure"
$trigger.github_actions.status"completed"
$trigger.github_actions.run_url"https://github.com/owner/repo/actions/runs/12345"
$trigger.github_actions.head_branch"main"
$trigger.github_actions.created_atISO 8601 timestamp

Common patterns

Monitor main branch CI

trigger:
  type: trigger.github_actions.workflow_run
  filter:
    head_branch: "main"
    workflow_name: "CI"

steps:
  - id: check_conclusion
    type: condition
    condition: "{{ $trigger.github_actions.conclusion == 'failure' }}"
    onTrue: [escalate_to_oncall]
    onFalse: [notify_success]

Update issue status based on CI

trigger:
  type: trigger.github_actions.workflow_run

steps:
  - id: find_issue
    type: issue.search
    inputs:
      jql: 'issue in ({{ $trigger.github.commits[0].message | extractIssueId }})'

  - id: update_status
    type: condition
    condition: "{{ $trigger.github_actions.conclusion == 'success' }}"
    onTrue: [mark_qa_ready]

  - id: mark_qa_ready
    type: issue.update
    inputs:
      issueKey: "{{ $steps.find_issue.issues[0].key }}"
      transitionId: "qa"

Deploy on successful CI

trigger:
  type: trigger.github_actions.workflow_run
  filter:
    head_branch: "main"
    conclusion: "success"

steps:
  - id: deploy
    type: condition
    condition: "{{ $trigger.github_actions.status == 'completed' }}"
    onTrue: [deploy_to_production]

  - id: deploy_to_production
    type: vercel.deployment.create  # placeholder
    inputs:
      project: "my-app"
      gitRef: "{{ $trigger.github_actions.head_commit }}"

Filtering workflow runs

GitHub sends a webhook for every workflow run. Filter in Rensei to avoid running workflows unnecessarily:

trigger:
  type: trigger.github_actions.workflow_run
  filter:
    workflow_name: "CI"  # Only run CI, not other workflows
    conclusion: "failure"  # Only on failures

Common filters:

FilterValues
workflow_name"CI", "Test", "Build", etc.
conclusion"success", "failure", "skipped", "cancelled"
status"completed", "in_progress"
head_branch"main", "develop", branch patterns

Limitations

  • Job-level details: Workflow-run webhooks include job status summaries, but not detailed per-job logs. To get detailed logs, you must call the GitHub API directly (not yet exposed as a workflow node).
  • Artifacts: Artifact URLs are provided, but downloading artifacts is not yet a workflow node.
  • Workflow dispatch: Manually triggered workflows (workflow_dispatch) are not yet triggered via webhooks; use explicit API calls.
  • Matrix builds: If a workflow uses a build matrix (multiple configurations), the webhook is sent once per configuration; you may receive many webhooks for a single workflow run.

Troubleshooting

"Webhook not received"

  • Verify the GitHub integration is connected
  • Check Settings → Webhooks in your GitHub repository for the Rensei webhook
  • Ensure Workflow runs is checked in the webhook event filters
  • Check GitHub's webhook delivery logs for failures

"Workflow trigger not firing"

  • Verify the trigger filter matches your workflow (check workflow_name and conclusion)
  • Check the workflow runs successfully in GitHub (the webhook must have a "completed" status)
  • Inspect the workflow's payload in GitHub's webhook delivery logs

"Parsing errors"

  • Ensure trigger variables match the actual webhook payload structure
  • Check the workflow logs in the Rensei session inspector for detailed error messages

Next steps

On this page