

How to generate release notes from GitHub to Jira with Pipedream
Auto-generate release notes by updating linked Jira tickets to Done when GitHub releases are published.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Dev teams who link GitHub PRs to Jira tickets and need automated release documentation
Not ideal for
Teams that don't link commits/PRs to Jira issues or use different project management tools
Sync type
real-timeUse case type
notificationReal-World Example
A 25-person engineering team releases weekly and manually updates 15-30 Jira tickets per release, then copies summaries into release notes. The process takes 45 minutes and often misses tickets. This workflow finds all linked tickets in 30 seconds, updates their status, and generates formatted release notes.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Import this workflow directly into Pipedream
Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. All modules, filters, and field mappings are already configured — you just need to connect your accounts.
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Release Tag Name | ||
| Release Description | ||
| Jira Ticket Key | key | |
| Ticket Summary | fields.summary | |
| Ticket Status | fields.status.name | |
2 optional fields▸ show
| Issue Type | fields.issuetype.name |
| Ticket Description | fields.description |
Step-by-Step Setup
Pipedream > New Workflow > Sources > GitHub
Create GitHub webhook source
Navigate to pipedream.com and click New Workflow. Select GitHub as your source app from the triggers list. Choose the 'New Release Published' event type. Pipedream generates a unique webhook URL instantly.
- 1Click 'New Workflow' from your dashboard
- 2Select 'GitHub' from the source apps
- 3Choose 'New Release Published' event
- 4Copy the generated webhook URL
GitHub Repo > Settings > Webhooks > Add webhook
Configure GitHub repository webhook
In your GitHub repo, go to Settings > Webhooks > Add webhook. Paste the Pipedream URL in the payload URL field. Set content type to application/json and select 'Releases' in the event selection.
- 1Navigate to your repository settings
- 2Click 'Webhooks' in the left sidebar
- 3Click 'Add webhook' button
- 4Paste the Pipedream URL in Payload URL
- 5Select 'application/json' for Content type
- 6Choose 'Let me select individual events'
- 7Check only 'Releases' checkbox
Pipedream Workflow > + Add Step > Jira
Add Jira connection step
Back in Pipedream, click '+' to add a new step. Search for Jira and select 'Jira' from the apps list. Choose any Jira action for now - we'll customize with code. Connect your Jira account using your domain, email, and API token.
- 1Click the '+' button below your GitHub source
- 2Type 'Jira' in the app search box
- 3Select 'Jira' from results
- 4Click 'Connect your account'
- 5Enter your Jira domain (yourcompany.atlassian.net)
- 6Enter your Jira email and API token
Pipedream Workflow > + Add Step > Code
Add code step for ticket extraction
Add a Node.js code step to parse the release body for Jira ticket references. This step will scan the release description and commit messages for ticket patterns like 'PROJ-123' or 'fixes #123'.
- 1Click '+' to add another step
- 2Select 'Code' from the step types
- 3Choose 'Run Node.js code'
- 4Replace the default code with ticket extraction logic
This code handles the core logic for extracting Jira tickets from GitHub release data and updating their status. Paste it into your ticket extraction code step.
JavaScript — Code Stepexport default defineComponent({▸ Show code
export default defineComponent({
async run({ steps, $ }) {
const releaseBody = steps.trigger.event.body;... expand to see full code
export default defineComponent({
async run({ steps, $ }) {
const releaseBody = steps.trigger.event.body;
const releaseCommits = steps.trigger.event.commits || [];
// Extract ticket patterns like PROJ-123, ABC-456
const ticketRegex = /([A-Z]{2,}-\d+)/g;
const tickets = new Set();
// Check release description
if (releaseBody) {
const bodyTickets = releaseBody.match(ticketRegex) || [];
bodyTickets.forEach(ticket => tickets.add(ticket));
}
// Check commit messages in release
releaseCommits.forEach(commit => {
const commitTickets = commit.message.match(ticketRegex) || [];
commitTickets.forEach(ticket => tickets.add(ticket));
});
const ticketList = Array.from(tickets);
if (ticketList.length === 0) {
$.respond({ message: 'No Jira tickets found in release', tickets: [] });
return { tickets: [] };
}
// Update tickets to Done status
const jiraResults = [];
for (const ticketKey of ticketList) {
try {
const response = await $.send.http({
method: 'PUT',
url: `https://yourcompany.atlassian.net/rest/api/2/issue/${ticketKey}/transitions`,
headers: {
'Authorization': `Basic ${Buffer.from('your-email:your-api-token').toString('base64')}`,
'Content-Type': 'application/json'
},
data: {
transition: { id: '31' } // 31 is typically 'Done' - check your workflow
}
});
jiraResults.push({ ticket: ticketKey, status: 'updated' });
} catch (error) {
jiraResults.push({ ticket: ticketKey, status: 'failed', error: error.message });
}
}
return { tickets: ticketList, results: jiraResults };
}
});Pipedream Workflow > + Add Step > Code
Configure ticket status updates
Add another code step to update each found Jira ticket to 'Done' status. This step loops through the extracted ticket IDs and makes PUT requests to update their workflow status.
- 1Add another Node.js code step
- 2Import the ticket IDs from the previous step
- 3Loop through each ticket ID
- 4Make API calls to transition tickets to Done
Pipedream Workflow > + Add Step > Code
Fetch ticket summaries
Create a code step to retrieve the summary and description fields from each Jira ticket. This data becomes the content for your release notes. Use Jira's REST API to get issue details in a single batch request.
- 1Add a new Node.js code step
- 2Use the Jira REST API to fetch issue details
- 3Request summary, description, and issue type fields
- 4Store the results for release notes compilation
Pipedream Workflow > + Add Step > Code
Generate formatted release notes
Add a final code step to compile ticket summaries into formatted release notes. Group tickets by type (bug, feature, task) and create markdown or HTML output suitable for your documentation.
- 1Create another Node.js code step
- 2Group tickets by issue type or label
- 3Format as markdown or HTML
- 4Include ticket links and release metadata
Pipedream Workflow > + Add Step > Slack/Email
Add notification step
Connect Slack or email to send the generated release notes to your team. Choose Slack if you want channel notifications, or email for stakeholder updates. The message includes the formatted notes and release link.
- 1Click '+' to add a final step
- 2Choose 'Slack' or 'Send Email' from apps
- 3Connect your Slack workspace or email service
- 4Select target channel or recipient
- 5Reference the formatted release notes from previous step
Pipedream Workflow > Deploy
Test the complete workflow
Deploy your workflow and create a test GitHub release to verify all steps execute correctly. Check that Jira tickets update to Done status and release notes generate with the expected format.
- 1Click 'Deploy' in the top right
- 2Go to your GitHub repo and create a test release
- 3Include some Jira ticket references in the description
- 4Watch the workflow execution in Pipedream's logs
- 5Verify tickets updated in Jira and notes were sent
Scaling Beyond 25+ tickets per release+ Records
If your volume exceeds 25+ tickets per release records, apply these adjustments.
Batch Jira API requests
Use JQL search with 'key IN (PROJ-1, PROJ-2...)' to fetch multiple ticket details in single requests instead of individual calls. Limits network overhead and prevents timeouts.
Implement parallel processing
Process ticket updates in chunks of 20-25 using Promise.all() instead of sequential loops. Jira's rate limits allow concurrent requests from the same user.
Add progress checkpoints
Store successfully processed tickets in workflow state so you can resume from failures. Use Pipedream's $.send.http with retry logic for transient API errors.
Cache ticket metadata
Store frequently accessed ticket data like project keys and issue types to reduce redundant API calls. Use Pipedream's data stores for persistence between runs.
Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use Pipedream for this if you need custom logic for parsing ticket references or have complex Jira workflows that require multi-step status transitions. The Node.js code steps handle regex parsing and batch API calls better than drag-and-drop platforms. Pipedream's instant webhooks also mean your release notes generate within 10 seconds of publishing. Skip Pipedream if you want a simpler no-code setup and your tickets follow standard patterns.
This workflow costs around 8 credits per execution - 1 for the webhook trigger, 2-3 for each code step, and 2 for the notification step. At 4 releases per month, you'll use 32 credits monthly, well within Pipedream's free tier of 300. Zapier charges $20/month minimum for webhooks, and Make charges $9/month for 1,000 operations, making Pipedream the cheapest option for low-volume releases.
Make handles Jira's complex API authentication more smoothly with built-in OAuth flows, while Zapier has pre-built formatters for release notes templates. n8n offers better bulk processing with its batch node for high-volume releases. Power Automate integrates cleanly if you're already using Azure DevOps instead of GitHub. But Pipedream wins on speed - the webhook processing is instant, and you can customize the ticket extraction logic exactly how your team references issues.
You'll hit Jira's transition ID complexity first - each workflow has different numeric IDs for status changes, and 'Done' isn't always transition ID 31. Second, GitHub's release webhook doesn't include commit details by default, so you'll need additional API calls to scan commit messages for ticket references. Third, teams that reference tickets inconsistently (some use PROJ-123, others use #123) will need multiple regex patterns and duplicate detection logic.
Ideas for what to build next
- →Add Confluence integration — Automatically create or update Confluence release pages with the generated notes and deployment instructions.
- →Create digest notifications — Send weekly rollup emails to stakeholders summarizing all releases and ticket completion metrics.
- →Build rollback automation — Create a reverse workflow that reverts ticket statuses if a release gets rolled back or tagged as problematic.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup