-
-
Notifications
You must be signed in to change notification settings - Fork 41
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add utility script to add commits to changelog's unreleased section
- Loading branch information
1 parent
06c8e21
commit dce279d
Showing
2 changed files
with
42 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
|
||
const { execSync, spawnSync } = require('child_process'); | ||
const fs = require('fs'); | ||
|
||
const tag = execSync('git describe --tags --abbrev=0').toString().trim(); | ||
console.log('Checking commits since', tag); | ||
|
||
const args = ['-n', '1', `${tag}..HEAD`, '--abbrev=7', '--pretty=%h', '--', 'CHANGELOG.md']; | ||
function findCommit(line) { | ||
const result = spawnSync('git', ['log', '-S', line, ...args], { shell: false }); | ||
if (result.status === 0) return result.stdout.toString().trim(); | ||
throw new Error(result.stderr.toString()); | ||
} | ||
|
||
const lines = fs.readFileSync('CHANGELOG.md').toString().split(/\r?\n/g); | ||
|
||
let enhanced = 0; | ||
let shouldEnhance = false; | ||
for (let i = 0; i < lines.length; i++) { | ||
const line = lines[i]; | ||
if (line.startsWith('## Unreleased')) shouldEnhance = true; | ||
else if (line.startsWith('## ')) break; | ||
if (!line.startsWith('- ')) continue; | ||
const commit = findCommit(line); | ||
if (!commit) return; | ||
console.log(line, '=>', commit); | ||
const brackets = line.match(/ \((.*?)\)$/); | ||
if (brackets) { | ||
if (brackets[1].match(/[\da-fA-F]{7}/)) continue; | ||
if (!brackets[1].includes(' ')) { | ||
lines[i] = line.replace(/\(.*?\)$/, `(${commit}, ${brackets[1]})`); | ||
enhanced++; | ||
continue; | ||
} | ||
} | ||
lines[i] = `${line} (${commit})`; | ||
enhanced++; | ||
} | ||
|
||
console.log(`Enhanced ${enhanced} lines`); | ||
fs.writeFileSync('CHANGELOG.md', lines.join('\n')); |