From 3bc5d49dee5e1a2e1c6de046e9518559a8fab5bb Mon Sep 17 00:00:00 2001 From: Ronny Lorenz Date: Mon, 29 May 2023 16:06:15 +0200 Subject: [PATCH 1/7] Add options to specify header level and version prefix --- README.md | 42 ++++++++++++++++++++++++++++++++++++++---- action.yml | 8 ++++++++ src/index.js | 25 ++++++++++++++++++++----- 3 files changed, 66 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 99242d8..c91abcc 100644 --- a/README.md +++ b/README.md @@ -17,10 +17,12 @@ This GitHub Action extracts release notes from a [Keep a Changelog](https://keep ### Inputs -| Input | Description | -|-----------------------------------|---------------------------------------------------------------| -| `changelog_file` _(optional)_ | The input path of the changelog file. Default: `CHANGELOG.md` | -| `release_notes_file` _(optional)_ | The output path of the (optional) release notes file. | +| Input | Description | +| --------------------------------- | ----------------------------------------------------------------------------------------------------- | +| `changelog_file` _(optional)_ | The input path of the changelog file. Default: `CHANGELOG.md` | +| `release_notes_file` _(optional)_ | The output path of the (optional) release notes file. | +| `version_prefix` _(optional)_ | A prefix before the version number in the changelog header tag, e.g. `version` as in [version x.y.z]. | +| `header_level` _(optional)_ | The header level where the version description is expected. Default: `2` | ### Outputs @@ -78,6 +80,38 @@ jobs: changelog_file: MY_CHANGELOG.md ``` +### Change expected version header level to H3 + +```yaml +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Extract release notes + id: extract-release-notes + uses: ffurrer2/extract-release-notes@v1 + with: + header_level: 3 +``` + +### Accept CHANGELOG.md files with [Version x.y.z] titles + +```yaml +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Extract release notes + id: extract-release-notes + uses: ffurrer2/extract-release-notes@v1 + with: + version_prefix: Version +``` + ### Create a release notes file ```yaml diff --git a/action.yml b/action.yml index 394eeb4..8635ea9 100644 --- a/action.yml +++ b/action.yml @@ -17,6 +17,14 @@ inputs: description: '`true` to get release notes from the `[Unreleased]` section. `false` to get release notes for the latest release. Default: `false`' required: false default: 'false' + version_prefix: + description: 'A prefix before the version number in the changelog.md header tag, e.g. `version` as in [version x.y.z]. Default: ``' + required: false + default: '' + header_level: + description: 'The header level where the version description is expected. Default: `2`' + required: false + default: 2 outputs: release_notes: description: 'The escaped release notes.' diff --git a/src/index.js b/src/index.js index b419e24..c6c54c5 100644 --- a/src/index.js +++ b/src/index.js @@ -20,7 +20,13 @@ async function main() { const prerelease = core.getInput('prerelease') core.debug(`prerelease = '${prerelease}'`) - const releaseNotes = await extractReleaseNotes(changelogFile, prerelease) + const versionPrefix = core.getInput('version_prefix') + core.debug(`version-prefix = '${versionPrefix}'`) + + const headerLevel = parseInt(core.getInput('header_level')) + core.debug(`header_level = '${headerLevel}'`) + + const releaseNotes = await extractReleaseNotes(changelogFile, prerelease, versionPrefix, headerLevel) core.debug(`release-notes = '${releaseNotes}'`) writeReleaseNotesFile(releaseNotesFile, releaseNotes) @@ -28,18 +34,27 @@ async function main() { core.setOutput("release_notes", releaseNotes) } -async function extractReleaseNotes(changelogFile, prerelease) { +async function extractReleaseNotes(changelogFile, prerelease, versionPrefix, headerLevel) { const fileStream = fs.createReadStream(changelogFile, {encoding: encoding}) const rl = readline.createInterface({ input: fileStream }) const lines = [] let inside_release = false + const header_level = (Number.isInteger(headerLevel) && (headerLevel > 0) && (headerLevel < 7)) ? headerLevel : 2 + const level_match_regex = "^#{" + header_level + "}\\s+" + const levelup_match_regex = (header_level > 1) ? "^#{1," + (header_level - 1) + "}\\s+" : level_match_regex + const version_match_regex = "\\[" + versionPrefix + "\\s*[0-9]" + const unreleases_match_regex = "\\[Unreleased\\]" + core.debug(`version_match_regex: '${version_match_regex}'`) + core.debug(`unrelease_match_regex: '${unreleases_match_regex}'`) for await (const line of rl) { - const start_of_release = (!!line.match("^#+ \\[[0-9]") || (prerelease === 'true' && !!line.match("^#+ \\[Unreleased\\]"))) + let header_match = (!!line.match(level_match_regex)) + let headerup_match = (!!line.match(levelup_match_regex)) + let start_of_release = (!!line.match(level_match_regex + version_match_regex) || (prerelease === 'true' && !!line.match(level_match_regex + unreleases_match_regex))) if (inside_release) { - if (start_of_release) { - core.debug(`next version found: '${line}'`) + if (header_match || headerup_match) { + core.debug(`end of version block: '${line}'`) break } else { lines.push(line) From 79f593a62547ac31ae84ab20e90121bf93702293 Mon Sep 17 00:00:00 2001 From: Ronny Lorenz Date: Tue, 2 Apr 2024 15:09:05 +0200 Subject: [PATCH 2/7] Update version number in README.md examples --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c91abcc..6a35128 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ jobs: uses: actions/checkout@v3 - name: Extract release notes id: extract-release-notes - uses: ffurrer2/extract-release-notes@v1 + uses: ffurrer2/extract-release-notes@v2 with: header_level: 3 ``` @@ -107,7 +107,7 @@ jobs: uses: actions/checkout@v3 - name: Extract release notes id: extract-release-notes - uses: ffurrer2/extract-release-notes@v1 + uses: ffurrer2/extract-release-notes@v2 with: version_prefix: Version ``` From 4d37e2e40510710cda9921fdc737f02e80cba597 Mon Sep 17 00:00:00 2001 From: Ronny Lorenz Date: Tue, 14 May 2024 11:25:28 +0200 Subject: [PATCH 3/7] Fix potential regex injection from user-provided version_prefix --- src/index.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index c6c54c5..e0c24c0 100644 --- a/src/index.js +++ b/src/index.js @@ -41,10 +41,10 @@ async function extractReleaseNotes(changelogFile, prerelease, versionPrefix, hea }) const lines = [] let inside_release = false - const header_level = (Number.isInteger(headerLevel) && (headerLevel > 0) && (headerLevel < 7)) ? headerLevel : 2 + const header_level = (Number.isInteger(headerLevel) && (headerLevel > 0) && (headerLevel < 7)) ? +headerLevel : 2 const level_match_regex = "^#{" + header_level + "}\\s+" const levelup_match_regex = (header_level > 1) ? "^#{1," + (header_level - 1) + "}\\s+" : level_match_regex - const version_match_regex = "\\[" + versionPrefix + "\\s*[0-9]" + const version_match_regex = "\\[" + escapeRegex(versionPrefix) + "\\s*[0-9]" const unreleases_match_regex = "\\[Unreleased\\]" core.debug(`version_match_regex: '${version_match_regex}'`) core.debug(`unrelease_match_regex: '${unreleases_match_regex}'`) @@ -93,3 +93,7 @@ function writeReleaseNotesFile(releaseNotesFile, releaseNotes) { }) } } + +function escapeRegex(string) { + return string.replace(/[/\-\\^$*+?.()|[\]{}]/g, '\\$&'); +} From cb13f4eb58d88f74dfda37fe6d3b55b974c85e25 Mon Sep 17 00:00:00 2001 From: Ronny Lorenz Date: Wed, 15 May 2024 11:30:00 +0200 Subject: [PATCH 4/7] TESTS: Add tests for `version_prefix` and `header_level` --- .github/workflows/ci.yml | 24 ++++++++++++++++ .github/workflows/test.yml | 16 +++++++++++ test/testdata/CHANGELOG_5.md | 48 +++++++++++++++++++++++++++++++ test/testdata/CHANGELOG_6.md | 55 ++++++++++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+) create mode 100644 test/testdata/CHANGELOG_5.md create mode 100644 test/testdata/CHANGELOG_6.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f719ae..f685254 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -143,3 +143,27 @@ jobs: RELEASE_NOTES: ${{ steps.extract-release-notes-9.outputs.release_notes }} run: | diff RELEASE_NOTES.md test/testdata/expected/RELEASE_NOTES_3.md + - name: Run action + id: extract-release-notes-10 + uses: ./ + with: + changelog_file: test/testdata/CHANGELOG_5.md + version_prefix: v + - name: Assert that release_notes contains expected content + shell: bash + env: + RELEASE_NOTES: ${{ steps.extract-release-notes-10.outputs.release_notes }} + run: | + diff <(echo -n "${RELEASE_NOTES}") test/testdata/expected/RELEASE_NOTES_1.md + - name: Run action + id: extract-release-notes-11 + uses: ./ + with: + changelog_file: test/testdata/CHANGELOG_6.md + header_level: 3 + - name: Assert that release_notes contains expected content + shell: bash + env: + RELEASE_NOTES: ${{ steps.extract-release-notes-11.outputs.release_notes }} + run: | + diff <(echo -n "${RELEASE_NOTES}") test/testdata/expected/RELEASE_NOTES_1.md diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6204dd5..907f888 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -103,6 +103,14 @@ jobs: - changelog_file: CHANGELOG_4.md expected_release_notes_file: RELEASE_NOTES_4.md prerelease: true + - changelog_file: CHANGELOG_5.md + expected_release_notes_file: RELEASE_NOTES_1.md + prerelease: false + version_prefix: v + - changelog_file: CHANGELOG_6.md + expected_release_notes_file: RELEASE_NOTES_1.md + prerelease: false + header_level: 3 runs-on: ${{ matrix.os }} steps: - name: Checkout @@ -137,6 +145,14 @@ jobs: - changelog_file: CHANGELOG_4.md expected_release_notes_file: RELEASE_NOTES_4.md prerelease: true + - changelog_file: CHANGELOG_5.md + expected_release_notes_file: RELEASE_NOTES_1.md + prerelease: false + version_prefix: v + - changelog_file: CHANGELOG_6.md + expected_release_notes_file: RELEASE_NOTES_1.md + prerelease: false + header_level: 3 runs-on: ${{ matrix.os }} steps: - name: Checkout diff --git a/test/testdata/CHANGELOG_5.md b/test/testdata/CHANGELOG_5.md new file mode 100644 index 0000000..1653298 --- /dev/null +++ b/test/testdata/CHANGELOG_5.md @@ -0,0 +1,48 @@ + + +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +### Changed + +### Deprecated + +### Removed + +### Fixed + +### Security + +## [v1.0.0] - 2024-05-15 + +### Added + +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +### Changed + +- At vero eos et accusam et justo duo dolores et ea rebum. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +### Removed + +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +## [v0.1.0] - 2019-12-01 + +### Added + +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. diff --git a/test/testdata/CHANGELOG_6.md b/test/testdata/CHANGELOG_6.md new file mode 100644 index 0000000..8f13609 --- /dev/null +++ b/test/testdata/CHANGELOG_6.md @@ -0,0 +1,55 @@ + + +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## Version 1.0.x + +### [Unreleased] + +#### Added + +#### Changed + +#### Deprecated + +#### Removed + +#### Fixed + +#### Security + + +### [1.0.0] - 2024-05-15 + +#### Added + +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +#### Changed + +- At vero eos et accusam et justo duo dolores et ea rebum. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +#### Removed + +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + + +## Version 0.1.x + +### [0.1.0] - 2019-12-01 + +#### Added + +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. From ae85e8ea4fcf13b4e9e479d42b783a64dcb59fb1 Mon Sep 17 00:00:00 2001 From: Ronny Lorenz Date: Wed, 15 May 2024 11:41:33 +0200 Subject: [PATCH 5/7] Update CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c049e0..2dc52d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Added +- Allow for version number prefix in the changelog header tag, e.g. `version` as in [version x.y.z] +- Allow for changing the header level (default 2) where the version description is expected + ### Changed ### Deprecated From 82415a18a76c6ece9a4b55a75f6693c0b23dcafc Mon Sep 17 00:00:00 2001 From: Ronny Lorenz Date: Wed, 15 May 2024 12:50:09 +0200 Subject: [PATCH 6/7] TESTS: Fix expected results for CHANGELOG_6.md - Also fix indentation errors in action.yml --- .github/workflows/ci.yml | 2 +- .github/workflows/test.yml | 4 ++-- action.yml | 4 ++-- test/testdata/CHANGELOG_6.md | 3 --- test/testdata/expected/RELEASE_NOTES_6.md | 16 ++++++++++++++++ 5 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 test/testdata/expected/RELEASE_NOTES_6.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f685254..6828966 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -166,4 +166,4 @@ jobs: env: RELEASE_NOTES: ${{ steps.extract-release-notes-11.outputs.release_notes }} run: | - diff <(echo -n "${RELEASE_NOTES}") test/testdata/expected/RELEASE_NOTES_1.md + diff <(echo -n "${RELEASE_NOTES}") test/testdata/expected/RELEASE_NOTES_6.md diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 907f888..b8c1178 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -108,7 +108,7 @@ jobs: prerelease: false version_prefix: v - changelog_file: CHANGELOG_6.md - expected_release_notes_file: RELEASE_NOTES_1.md + expected_release_notes_file: RELEASE_NOTES_6.md prerelease: false header_level: 3 runs-on: ${{ matrix.os }} @@ -150,7 +150,7 @@ jobs: prerelease: false version_prefix: v - changelog_file: CHANGELOG_6.md - expected_release_notes_file: RELEASE_NOTES_1.md + expected_release_notes_file: RELEASE_NOTES_6.md prerelease: false header_level: 3 runs-on: ${{ matrix.os }} diff --git a/action.yml b/action.yml index 8635ea9..c89c162 100644 --- a/action.yml +++ b/action.yml @@ -22,9 +22,9 @@ inputs: required: false default: '' header_level: - description: 'The header level where the version description is expected. Default: `2`' + description: 'The header level where the version description is expected. Default: `2`' required: false - default: 2 + default: 2 outputs: release_notes: description: 'The escaped release notes.' diff --git a/test/testdata/CHANGELOG_6.md b/test/testdata/CHANGELOG_6.md index 8f13609..9fa564a 100644 --- a/test/testdata/CHANGELOG_6.md +++ b/test/testdata/CHANGELOG_6.md @@ -6,7 +6,6 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - ## Version 1.0.x ### [Unreleased] @@ -23,7 +22,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), #### Security - ### [1.0.0] - 2024-05-15 #### Added @@ -43,7 +41,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. - ## Version 0.1.x ### [0.1.0] - 2019-12-01 diff --git a/test/testdata/expected/RELEASE_NOTES_6.md b/test/testdata/expected/RELEASE_NOTES_6.md new file mode 100644 index 0000000..d60258d --- /dev/null +++ b/test/testdata/expected/RELEASE_NOTES_6.md @@ -0,0 +1,16 @@ +#### Added + +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +#### Changed + +- At vero eos et accusam et justo duo dolores et ea rebum. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +#### Removed + +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. \ No newline at end of file From dbe4161cec7bb4d356e5f8ff30556e4f8673792f Mon Sep 17 00:00:00 2001 From: Ronny Lorenz Date: Tue, 21 May 2024 10:23:05 +0200 Subject: [PATCH 7/7] Make enclosing brackets for version number optional --- .github/workflows/ci.yml | 12 +++++++++ .github/workflows/test.yml | 8 ++++++ CHANGELOG.md | 1 + src/index.js | 4 +-- test/testdata/CHANGELOG_7.md | 48 ++++++++++++++++++++++++++++++++++++ 5 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 test/testdata/CHANGELOG_7.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6828966..316ec91 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -167,3 +167,15 @@ jobs: RELEASE_NOTES: ${{ steps.extract-release-notes-11.outputs.release_notes }} run: | diff <(echo -n "${RELEASE_NOTES}") test/testdata/expected/RELEASE_NOTES_6.md + - name: Run action + id: extract-release-notes-12 + uses: ./ + with: + changelog_file: test/testdata/CHANGELOG_7.md + version_prefix: version + - name: Assert that release_notes contains expected content + shell: bash + env: + RELEASE_NOTES: ${{ steps.extract-release-notes-12.outputs.release_notes }} + run: | + diff <(echo -n "${RELEASE_NOTES}") test/testdata/expected/RELEASE_NOTES_1.md diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b8c1178..9764605 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -111,6 +111,10 @@ jobs: expected_release_notes_file: RELEASE_NOTES_6.md prerelease: false header_level: 3 + - changelog_file: CHANGELOG_7.md + expected_release_notes_file: RELEASE_NOTES_1.md + prerelease: false + version_prefix: version runs-on: ${{ matrix.os }} steps: - name: Checkout @@ -153,6 +157,10 @@ jobs: expected_release_notes_file: RELEASE_NOTES_6.md prerelease: false header_level: 3 + - changelog_file: CHANGELOG_7.md + expected_release_notes_file: RELEASE_NOTES_1.md + prerelease: false + version_prefix: version runs-on: ${{ matrix.os }} steps: - name: Checkout diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dc52d1..1340bb0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Allow for version number prefix in the changelog header tag, e.g. `version` as in [version x.y.z] - Allow for changing the header level (default 2) where the version description is expected +- Allow for omitting enclosing brackets of version number ### Changed diff --git a/src/index.js b/src/index.js index e0c24c0..31ef4e6 100644 --- a/src/index.js +++ b/src/index.js @@ -44,8 +44,8 @@ async function extractReleaseNotes(changelogFile, prerelease, versionPrefix, hea const header_level = (Number.isInteger(headerLevel) && (headerLevel > 0) && (headerLevel < 7)) ? +headerLevel : 2 const level_match_regex = "^#{" + header_level + "}\\s+" const levelup_match_regex = (header_level > 1) ? "^#{1," + (header_level - 1) + "}\\s+" : level_match_regex - const version_match_regex = "\\[" + escapeRegex(versionPrefix) + "\\s*[0-9]" - const unreleases_match_regex = "\\[Unreleased\\]" + const version_match_regex = "\\[?" + escapeRegex(versionPrefix) + "\\s*[0-9]" + const unreleases_match_regex = "\\[?Unreleased\\]?" core.debug(`version_match_regex: '${version_match_regex}'`) core.debug(`unrelease_match_regex: '${unreleases_match_regex}'`) for await (const line of rl) { diff --git a/test/testdata/CHANGELOG_7.md b/test/testdata/CHANGELOG_7.md new file mode 100644 index 0000000..e09d188 --- /dev/null +++ b/test/testdata/CHANGELOG_7.md @@ -0,0 +1,48 @@ + + +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## Unreleased + +### Added + +### Changed + +### Deprecated + +### Removed + +### Fixed + +### Security + +## version 1.0 - 2024-05-21 + +### Added + +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +### Changed + +- At vero eos et accusam et justo duo dolores et ea rebum. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +### Removed + +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +## version 0.1 - 2019-12-01 + +### Added + +- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +- At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +- Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.