@@ -20,26 +20,41 @@ async function main() {
2020 const prerelease = core . getInput ( 'prerelease' )
2121 core . debug ( `prerelease = '${ prerelease } '` )
2222
23- const releaseNotes = await extractReleaseNotes ( changelogFile , prerelease )
23+ const versionPrefix = core . getInput ( 'version_prefix' )
24+ core . debug ( `version-prefix = '${ versionPrefix } '` )
25+
26+ const headerLevel = parseInt ( core . getInput ( 'header_level' ) )
27+ core . debug ( `header_level = '${ headerLevel } '` )
28+
29+ const releaseNotes = await extractReleaseNotes ( changelogFile , prerelease , versionPrefix , headerLevel )
2430 core . debug ( `release-notes = '${ releaseNotes } '` )
2531
2632 writeReleaseNotesFile ( releaseNotesFile , releaseNotes )
2733
2834 core . setOutput ( "release_notes" , releaseNotes )
2935}
3036
31- async function extractReleaseNotes ( changelogFile , prerelease ) {
37+ async function extractReleaseNotes ( changelogFile , prerelease , versionPrefix , headerLevel ) {
3238 const fileStream = fs . createReadStream ( changelogFile , { encoding : encoding } )
3339 const rl = readline . createInterface ( {
3440 input : fileStream
3541 } )
3642 const lines = [ ]
3743 let inside_release = false
44+ const header_level = ( Number . isInteger ( headerLevel ) && ( headerLevel > 0 ) && ( headerLevel < 7 ) ) ? headerLevel : 2
45+ const level_match_regex = "^#{" + header_level + "}\\s+"
46+ const levelup_match_regex = ( header_level > 1 ) ? "^#{1," + ( header_level - 1 ) + "}\\s+" : level_match_regex
47+ const version_match_regex = "\\[" + versionPrefix + "\\s*[0-9]"
48+ const unreleases_match_regex = "\\[Unreleased\\]"
49+ core . debug ( `version_match_regex: '${ version_match_regex } '` )
50+ core . debug ( `unrelease_match_regex: '${ unreleases_match_regex } '` )
3851 for await ( const line of rl ) {
39- const start_of_release = ( ! ! line . match ( "^#+ \\[[0-9]" ) || ( prerelease === 'true' && ! ! line . match ( "^#+ \\[Unreleased\\]" ) ) )
52+ let header_match = ( ! ! line . match ( level_match_regex ) )
53+ let headerup_match = ( ! ! line . match ( levelup_match_regex ) )
54+ let start_of_release = ( ! ! line . match ( level_match_regex + version_match_regex ) || ( prerelease === 'true' && ! ! line . match ( level_match_regex + unreleases_match_regex ) ) )
4055 if ( inside_release ) {
41- if ( start_of_release ) {
42- core . debug ( `next version found : '${ line } '` )
56+ if ( header_match || headerup_match ) {
57+ core . debug ( `end of version block : '${ line } '` )
4358 break
4459 } else {
4560 lines . push ( line )
0 commit comments