Weekly
Email a weekly changelog from merged pull requests
Every Friday you get a customer-friendly changelog written from the week's merged pull requests, with any risky changes flagged for a second look.
- Runs
- Weekly
- Apps
- GitHub, Gmail
- AI
- Yes, uses the built-in AI allowance
- Access
- pull_requests:read; gmail.send
Send this to your assistant
Create a ClickRuntime automation: every Friday, take the PRs merged in acme/app this week, have AI write a short customer-friendly changelog and flag risky changes, and email it to me.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A software company ships improvements every week, but customers rarely hear about them. Writing release notes means reading pull request titles full of jargon and translating them, and it keeps getting skipped.
A changelog drafted from merged pull requests each Friday gives the team something to polish and send in minutes. Customers see steady progress, and the risk notes remind engineers which changes deserve a closer watch over the weekend.
What you get out of it
Customers see what you ship
Regular updates show the product is improving. That supports renewals and reduces 'is this still maintained?' questions.
Jargon becomes plain language
AI rewrites technical titles into benefits a customer understands. Internal-only changes are left out.
Risky changes are flagged
Pull requests that touched payments, data or permissions are listed separately. The team knows what to watch after release.
A draft you can forward
The email is ready to edit and send to your list or paste into a blog post. Release notes stop being a chore.
How it works
What happens, step by step
Every Friday, ClickRuntime finds the pull requests merged in your repository during the week.
It skips ones labelled as internal and reads the title, description and changed files of the rest.
AI writes a short customer-friendly changelog and lists any changes that look risky.
The draft is emailed to you to review and send on.
Before it runs live
- Connect GitHub
- Connect Google through your own Google app (a one-time, 10-minute setup), so it works with your own Gmail
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 Gmail 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)
REPO = "acme/app"
SKIP = {"internal", "chore", "dependencies"}
@on_trigger
def run(event):
since = date.today() - timedelta(days=7)
prs = gh("GET", "/search/issues", params={"q": f"repo:{REPO} is:pr is:merged merged:>={since}", "per_page": 100})["items"]
prs = [p for p in prs if not SKIP & {l["name"] for l in p["labels"]}]
if not prs:
return {"prs": 0}
lines = []
for p in prs:
files = gh("GET", f"/repos/{REPO}/pulls/{p['number']}/files", params={"per_page": 50})
lines.append(f"#{p['number']} {p['title']}\n{(p.get('body') or '')[:400]}\nFiles: {', '.join(f['filename'] for f in files)[:300]}")
draft = ai.generate("\n\n".join(lines)[:20000], max_output_tokens=1000,
system="Write a short customer-friendly changelog with bullet points. Then a section 'Risky changes' listing PRs touching billing, auth or data.").text
notify.email_me(f"Changelog draft, week of {since:%d %b}", draft)
return {"prs": len(prs)}FAQ
Common questions
Does it send to customers directly?
How does it decide what is risky?
Can it skip internal changes?
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
Draft your weekly timesheet from email and commits
Every Friday you get an email with a draft timesheet, grouped by client and task, built from the emails you sent and the code you committed that week.
See how it worksMonitor your site and update a GitHub status page
If your site goes down you get an email within five minutes, and the status page you host on GitHub updates itself, then again when the site is back.
See how it worksLabel new GitHub issues and email me about bugs
New GitHub issues are labelled by type automatically, and you get an email whenever one is a bug.
See how it worksKeep exploring
Set up “Email a weekly changelog from merged pull requests” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.