Scheduled GitHub pull request digests and issues

Post open pull requests to your team's chat before standup, and open recurring issues for chores, without a GitHub Action that runs on a schedule.

Example: open PRs to Slack every weekday

json
{
  "name": "Open PRs to #eng",
  "cron": { "expression": "0 9 * * 1-5", "time_zone": "Europe/Berlin" },
  "nodes": [
    { "id": "prs", "github_list_pull_requests": { "credential_id": "YOUR_GITHUB_CREDENTIAL_ID", "owner": "acme", "repo": "web", "state": "open" } },
    { "id": "lines", "transform": { "template": "{ \"count\": \"{{ $.length }}\", \"lines\": { \"{{#each $}}\": \"• <{{ $.html_url }}|#{{ $.number }}> {{ $.title }} ({{ $.user.login }})\" } }" } },
    { "id": "post", "slack_send_message": {
        "webhook_url": "https://hooks.slack.com/services/T000/B000/XXXX",
        "text": "*{{ $.count }} open pull requests*\n{{ join($.lines, \"\\n\") }}" } }
  ]
}

Example: a monthly dependency review issue

json
{
  "name": "Monthly dependency review",
  "cron": { "expression": "0 9 * * MON#1", "time_zone": "America/New_York" },
  "nodes": [
    { "id": "issue", "github_create_issue": {
        "credential_id": "YOUR_GITHUB_CREDENTIAL_ID",
        "owner": "acme",
        "repo": "web",
        "title": "Dependency review: {{ format(now:America/New_York, \"MMMM YYYY\") }}",
        "body": "- [ ] Review Dependabot PRs\n- [ ] Check `npm audit`\n- [ ] Bump the Go toolchain" } }
  ]
}

Set up

Create a fine-grained token with read access to pull requests (and write access to issues, to open them), and save it as a bearer_token credential.

Reference

List GitHub pull requests: github_list_pull_requests

Sends GET https://api.github.com/repos/<owner>/<repo>/pulls. Output for the next step: A list of pull requests, each with number, title, html_url, user.login, draft and created_at.

Field Type Notes
credential_id string, required The id of a bearer_token credential holding a GitHub token that can read the repository.
owner string, required The user or organization.
repo string, required The repository name.
state string, required open, closed or all.
per_page integer 1 to 100. Omit for GitHub’s default of 30.

Open a GitHub issue: github_create_issue

Sends POST https://api.github.com/repos/<owner>/<repo>/issues. Output for the next step: The created issue, with its number and html_url.

Field Type Notes
credential_id string, required The id of a bearer_token credential holding a GitHub token that can create issues.
owner string, required The user or organization.
repo string, required The repository name.
title string, required Up to 256 characters. Placeholders allowed.
body string Markdown, up to 65,536 characters. Placeholders allowed.

More ideas

  • Post stale PRs (open over a week) by filtering in a transform and your own endpoint.
  • Open a weekly on-call handoff issue: 0 16 * * FRI.
  • Open a release checklist issue once, at an exact time, with run_at.