@@ -20,26 +20,41 @@ async function main() {
20
20
const prerelease = core . getInput ( 'prerelease' )
21
21
core . debug ( `prerelease = '${ prerelease } '` )
22
22
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 )
24
30
core . debug ( `release-notes = '${ releaseNotes } '` )
25
31
26
32
writeReleaseNotesFile ( releaseNotesFile , releaseNotes )
27
33
28
34
core . setOutput ( "release_notes" , releaseNotes )
29
35
}
30
36
31
- async function extractReleaseNotes ( changelogFile , prerelease ) {
37
+ async function extractReleaseNotes ( changelogFile , prerelease , versionPrefix , headerLevel ) {
32
38
const fileStream = fs . createReadStream ( changelogFile , { encoding : encoding } )
33
39
const rl = readline . createInterface ( {
34
40
input : fileStream
35
41
} )
36
42
const lines = [ ]
37
43
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 } '` )
38
51
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 ) ) )
40
55
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 } '` )
43
58
break
44
59
} else {
45
60
lines . push ( line )
0 commit comments