The moment it happens
Update Jira and log a Notion changelog from your commits
When code is pushed with a Jira key in the commit message, the ticket gets a comment and moves forward, and a changelog entry is added to Notion.
- Runs
- The moment it happens
- Apps
- Jira, Notion
- AI
- Not needed
- Access
- Jira write; Notion insert
Send this to your assistant
Create a ClickRuntime automation: when code is pushed to main, find Jira keys in the commit messages, comment the commit on each ticket and move it to In Review, add an entry to my Notion Changelog database, and post a note to #eng.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Developers on a product team mention Jira keys in their commits, but tickets still sit in 'In Progress' long after the code is merged, and the product manager keeps a changelog in Notion by asking around each Friday.
Updating the ticket and writing the changelog entry the moment code is pushed keeps both tools accurate without anyone's effort. Jira reflects real progress, and the changelog builds itself.
What you get out of it
Tickets reflect real progress
A pushed commit moves its ticket forward. The board shows where work actually is.
A changelog that writes itself
Each push adds a Notion entry with the commit and ticket. Release notes start from a complete list.
Commits are linked to tickets
A comment on the ticket names the commit. Reviewers can jump straight to the code.
No extra steps for developers
Mentioning the key in the commit message is all it takes. No forms or tools to update.
How it works
What happens, step by step
When code is pushed, your code host sends the commit details to your automation's trigger link.
ClickRuntime finds Jira ticket keys in the commit messages.
Each ticket gets a comment with the commit and is moved to the next status.
An entry is added to your Notion Changelog database with the commit and ticket keys.
A short note is posted to your #eng Slack channel.
Before it runs live
- Connect Jira
- Connect Notion and share the database you want it to use
- Paste your automation's link into the other app's webhook settings
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
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Jira and Notion steps into one automation
Under the hood
The code that runs this automation
import re
from clickruntime import on_event, credentials, http, notify
JIRA, SITE = "https://api.atlassian.com/ex/jira/your-cloud-id", "https://acme.atlassian.net/browse/"
adf = lambda text: {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": text}]}]}
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 notion(method, path, **kw):
resp = http.request(method, f"https://api.notion.com/v1{path}", headers={
"Authorization": f"Bearer {credentials.secret('NOTION_TOKEN')}", "Notion-Version": "2022-06-28"}, **kw)
return resp.raise_for_status() or resp.json()
CHANGELOG, TARGET = "your-notion-database-id", "In Review"
@on_event
def handle(event):
push = event.json or {}
commits = [c for c in push.get("commits", []) if re.search(r"[A-Z]+-\d+", c["message"])]
for c in commits:
keys = sorted(set(re.findall(r"[A-Z]+-\d+", c["message"])))
for key in keys:
jira("POST", f"/rest/api/3/issue/{key}/comment", json={"body": adf(f"Commit {c['id'][:7]} by {c['author']['name']}: {c['message']}\n{c['url']}")})
move = next((t for t in jira("GET", f"/rest/api/3/issue/{key}/transitions")["transitions"] if t["to"]["name"] == TARGET), None)
if move:
jira("POST", f"/rest/api/3/issue/{key}/transitions", json={"transition": {"id": move["id"]}})
notion("POST", "/pages", json={"parent": {"database_id": CHANGELOG}, "properties": {
"Name": {"title": [{"text": {"content": c["message"].splitlines()[0][:200]}}]},
"Jira": {"rich_text": [{"text": {"content": ", ".join(keys)}}]}, "Commit": {"url": c["url"]}}})
if commits:
notify.slack(f"{len(commits)} commits logged to Jira and the changelog", channel="#eng")
return {"commits": len(commits)}FAQ
Common questions
Which status does it move tickets to?
What sends the push events?
What if a commit mentions several tickets?
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
Log security events as Jira tasks and Notion records
Each security or data-quality alert creates one Jira task and one entry in your Notion security log, and the team is told in Slack.
See how it worksTriage feedback into Jira with a Notion log
Every piece of feedback is logged in your Notion database with its type and severity, bugs become Jira issues, and critical ones are posted to Slack.
See how it worksGet a pre-meeting briefing from Jira and Notion
Before each project meeting, Slack gets a briefing with the open Jira issues and a summary of the latest Notion notes for that project.
See how it worksKeep exploring
Set up “Update Jira and log a Notion changelog from your commits” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.