409e92d6ae
Build and Push Docker Images / Build Docker Image (push) Has been cancelled
Build and Push Docker Images / Build Railway Docker Image (push) Has been cancelled
Build and Publish n8n Docker Image / test-image (push) Has been cancelled
Dependency Compatibility Check / Fresh Install Dependency Check (push) Has been cancelled
Build and Publish n8n Docker Image / build-and-push (push) Has been cancelled
Build and Publish n8n Docker Image / create-release (push) Has been cancelled
Automated Release / Detect Version Change (push) Has been cancelled
Automated Release / Generate Release Notes (push) Has been cancelled
Automated Release / Create GitHub Release (push) Has been cancelled
Automated Release / Package MCPB Bundle (push) Has been cancelled
Automated Release / Build and Verify (push) Has been cancelled
Automated Release / Publish to NPM (push) Has been cancelled
Automated Release / Build and Push Docker Images (push) Has been cancelled
Automated Release / Update Documentation (push) Has been cancelled
Automated Release / Notify Release Completion (push) Has been cancelled
Secret Scan / secretlint (push) Has been cancelled
Test Suite / test (push) Has been cancelled
Test Suite / cjs-runtime (push) Has been cancelled
Test Suite / publish-results (push) Has been cancelled
84 lines
2.3 KiB
JavaScript
Executable File
84 lines
2.3 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Extract changelog content for a specific version
|
|
* Used by GitHub Actions to extract release notes
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
function extractChangelog(version, changelogPath) {
|
|
try {
|
|
if (!fs.existsSync(changelogPath)) {
|
|
console.error(`Changelog file not found at ${changelogPath}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
const content = fs.readFileSync(changelogPath, 'utf8');
|
|
const lines = content.split('\n');
|
|
|
|
// Find the start of this version's section
|
|
const versionHeaderRegex = new RegExp(`^## \\[${version.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\]`);
|
|
let startIndex = -1;
|
|
let endIndex = -1;
|
|
|
|
for (let i = 0; i < lines.length; i++) {
|
|
if (versionHeaderRegex.test(lines[i])) {
|
|
startIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (startIndex === -1) {
|
|
console.error(`No changelog entries found for version ${version}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
// Find the end of this version's section (next version or end of file)
|
|
for (let i = startIndex + 1; i < lines.length; i++) {
|
|
if (lines[i].startsWith('## [') && !lines[i].includes('Unreleased')) {
|
|
endIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (endIndex === -1) {
|
|
endIndex = lines.length;
|
|
}
|
|
|
|
// Extract the section content
|
|
const sectionLines = lines.slice(startIndex, endIndex);
|
|
|
|
// Remove the version header and any trailing empty lines
|
|
let contentLines = sectionLines.slice(1);
|
|
while (contentLines.length > 0 && contentLines[contentLines.length - 1].trim() === '') {
|
|
contentLines.pop();
|
|
}
|
|
|
|
if (contentLines.length === 0) {
|
|
console.error(`No content found for version ${version}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
const releaseNotes = contentLines.join('\n').trim();
|
|
|
|
// Write to stdout for GitHub Actions
|
|
console.log(releaseNotes);
|
|
|
|
} catch (error) {
|
|
console.error(`Error extracting changelog: ${error.message}`);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// Parse command line arguments
|
|
const version = process.argv[2];
|
|
const changelogPath = process.argv[3];
|
|
|
|
if (!version || !changelogPath) {
|
|
console.error('Usage: extract-changelog.js <version> <changelog-path>');
|
|
process.exit(1);
|
|
}
|
|
|
|
extractChangelog(version, changelogPath); |