Every 10 minutes
Turn bug reports in a sheet into GitHub issues
Each new bug report row in your sheet becomes a GitHub issue, and the issue link is written back into the row.
- Runs
- Every 10 minutes
- Apps
- GitHub, Google Sheets
- AI
- Optional
- Access
- GitHub issues write; sheet editor
Send this to your assistant
Create a ClickRuntime automation: every 10 minutes, check my Bug reports sheet for rows without an issue link; open a GitHub issue in acme/app for each and write the link back.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A product team collects bug reports from customers and staff through a Google Form that feeds a sheet. Engineers work in GitHub, so someone copies each report across by hand, and the sheet never says what happened to a report after that.
Opening an issue for each new row and writing the link back closes the gap. Reporters and support staff can follow the link to see progress, and engineers get every report without a copy-and-paste step.
What you get out of it
No reports fall through
Every row gets an issue, even on busy days. Nothing depends on someone remembering to copy it.
Two-way traceability
The sheet links to the issue, and the issue quotes the row. Anyone can follow a report from either side.
Non-engineers can follow along
Support staff use the sheet they know and click through to see the issue's status. They can update customers without asking engineers.
Cleaner issues if you want them
With AI turned on, rough reports get a clear title and suggested labels. Engineers start with a tidy issue.
How it works
What happens, step by step
Every 10 minutes, ClickRuntime reads your Bug reports sheet.
It finds rows that do not have an issue link yet.
If you turn on AI, it writes a clear title and suggests labels from the report.
It opens a GitHub issue for each row.
The issue link is written back into the row, so each report is filed once.
Before it runs live
- Connect GitHub
- Connect your Google Sheets account and pick the spreadsheets it may use
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
- 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 Google Sheets steps into one automation
Under the hood
The code that runs this automation
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, ai, report_fetched
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, SHEET_ID = "acme/app", "your-spreadsheet-id"
@on_trigger
def run(event):
values = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).spreadsheets().values()
rows = values.get(spreadsheetId=SHEET_ID, range="Bug reports!A2:E").execute().get("values", [])
todo = [(i, r) for i, r in enumerate(rows, start=2) if len(r) >= 3 and (len(r) < 5 or not r[4])]
report_fetched(len(todo))
if not todo:
return {"created": 0}
for i, r in todo:
when, reporter, report = r[0], r[1], r[2]
title = report.splitlines()[0][:100]
try:
title = ai.generate(report[:3000], system="Write a short, specific GitHub issue title for this bug report.", max_output_tokens=30).text.strip()
except (ai.AINotIncluded, ai.AILimitReached):
pass
issue = gh("POST", f"/repos/{REPO}/issues", json={"title": title, "labels": ["bug", "from-sheet"],
"body": f"Reported by {reporter} on {when}\n\n{report}"})
values.update(spreadsheetId=SHEET_ID, range=f"Bug reports!E{i}", valueInputOption="RAW", body={"values": [[issue["html_url"]]]}).execute()
return {"created": len(todo)}FAQ
Common questions
Does it work with Google Forms?
What goes in the issue?
What if I delete the link from a row?
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
Fill a timesheet sheet from your GitHub activity
Every Friday your timesheet sheet gets rows for the week's work, grouped by repository and day, with a short description and estimated hours.
See how it worksLog daily engineering activity to a sheet
Each morning yesterday's merged pull requests and closed issues are added to a sheet, and a short summary is sent to you.
See how it worksTriage new GitHub issues and pull requests into a sheet
Every new issue and pull request is labelled by type and priority, logged in a triage sheet, and critical ones are posted to Slack.
See how it worksKeep exploring
Set up “Turn bug reports in a sheet into GitHub issues” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.