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:
- In a GitHub repository, go to Settings → Webhooks
- Verify that Rensei's webhook is configured (added by the GitHub integration)
- 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:
| Trigger | Payload |
|---|---|
trigger.github_actions.workflow_run | Workflow 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 # HighWebhook 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:
| Variable | Example |
|---|---|
$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_at | ISO 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 failuresCommon filters:
| Filter | Values |
|---|---|
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_nameandconclusion) - 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
- GitHub integration - Repository and PR operations
- Workflow triggers - Set up event-based automation
- Linear integration - Update issues based on CI status
- Slack integration - Notify teams on CI events