On a schedule
Post a daily digest of Jira and GitHub activity
Every weekday morning Slack shows which Jira tickets moved and which pull requests were opened or merged, with a short summary.
- Runs
- On a schedule
- Apps
- GitHub, Jira
- AI
- Yes, uses the built-in AI allowance
- Access
- read on both
Send this to your assistant
Create a ClickRuntime automation: every weekday at 9, summarise Jira tickets updated in project ENG yesterday and PRs opened or merged in acme/app, and post it to #eng.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
An engineering manager's team plans in Jira and works in GitHub. To see what happened yesterday they check two tools and try to match tickets to pull requests in their head. Standup becomes a recap session.
One morning message combining both gives the team and the manager the full picture in a minute. Standup can focus on blockers, and stakeholders who only read Slack stay informed too.
What you get out of it
Both tools in one view
Ticket movements and code changes are summarised together. Nobody needs to cross-reference two tools.
Standups get shorter
Status is already shared in writing. Meeting time goes to problems.
Stalled work stands out
Tickets that moved without code, or code without a ticket, become visible. Gaps get noticed early.
A plain summary for stakeholders
AI sums up the day in a few sentences. Product and leadership can follow without reading every ticket.
How it works
What happens, step by step
Every weekday morning, ClickRuntime finds the Jira tickets updated in your projects since the previous day.
It finds the pull requests opened or merged in your GitHub repositories in the same period.
AI writes a short summary of what moved and what shipped.
The digest is posted to your #eng Slack channel.
Before it runs live
- Connect GitHub
- Connect Jira
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other GitHub and Jira steps into one automation
Under the hood
The code that runs this automation
from datetime import date, timedelta
from clickruntime import on_trigger, credentials, http, notify, ai
def gh(method, path, **kw):
resp = http.request(method, f"https://api.github.com{path}", headers={
"Authorization": f"Bearer {credentials.connection('github', 'work')}", "Accept": "application/vnd.github+json"}, **kw)
return resp.raise_for_status() or (resp.json() if resp.content else None)
JIRA = "https://api.atlassian.com/ex/jira/your-cloud-id"
def jira(method, path, **kw):
resp = http.request(method, JIRA + path, headers={"Authorization": f"Bearer {credentials.connection('jira', 'work')}", "Accept": "application/json"}, **kw)
return resp.raise_for_status() or (resp.json() if resp.content else None)
def adf(text):
return {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": text}]}]}
REPO, PROJECT = "acme/app", "ENG"
@on_trigger
def run(event):
since = date.today() - timedelta(days=3 if date.today().weekday() == 0 else 1)
tickets = jira("POST", "/rest/api/3/search/jql", json={"jql": f"project = {PROJECT} AND updated >= '{since}'",
"fields": ["summary", "status", "assignee"], "maxResults": 100})["issues"]
prs = gh("GET", "/search/issues", params={"q": f"repo:{REPO} is:pr updated:>={since}", "per_page": 50})["items"]
text = ("Jira:\n" + "\n".join(f"{t['key']} [{t['fields']['status']['name']}] {t['fields']['summary']}" for t in tickets)
+ "\n\nPull requests:\n" + "\n".join(f"#{p['number']} [{'merged' if p.get('pull_request', {}).get('merged_at') else p['state']}] {p['title']}" for p in prs))
summary = ai.generate(text[:15000], system="Summarise yesterday's engineering progress in 4 short plain sentences. Mention blockers.", max_output_tokens=250).text
notify.slack(f"Engineering digest\n{summary}\n_{len(tickets)} tickets moved, {len(prs)} pull requests active_", channel="#eng")
return {"tickets": len(tickets), "prs": len(prs)}FAQ
Common questions
Which Jira tickets are included?
Does it skip weekends?
Can it link tickets to pull requests?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Open Jira tickets for exploited vulnerabilities in your dependencies
Every 6 hours your repositories' dependencies are checked against public vulnerability data, and each new known vulnerability gets one Jira ticket.
See how it worksTurn GitHub bug reports into Jira tickets
When a bug is reported on GitHub, a Jira ticket is created with an AI summary and priority, and the GitHub issue gets a comment with the Jira key.
See how it worksGet a daily news digest in Slack
Each morning your team gets a short summary of what's new on the sites and blogs you follow.
See how it worksKeep exploring
Set up “Post a daily digest of Jira and GitHub activity” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.