diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e2653d5..b294c96 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -107,15 +107,14 @@ package: "${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}/${PACKAGE_NAME}" release-notes: + extends: .python stage: deploy needs: - reuse - image: rust:latest rules: - if: $CI_COMMIT_TAG script: - - cargo install parse-changelog - - parse-changelog --version-format="^\d+$" CHANGELOG.md $CI_COMMIT_TAG > release-notes.md + - ./build-aux/get_release_notes.py $CI_COMMIT_TAG > release-notes.md artifacts: paths: - release-notes.md diff --git a/build-aux/get_release_notes.py b/build-aux/get_release_notes.py new file mode 100755 index 0000000..108cd27 --- /dev/null +++ b/build-aux/get_release_notes.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: 2021 Romain Vigier +# SPDX-License-Identifier: GPL-3.0-or-later + +"""Get release notes for a specific release.""" + + +import argparse +import re + +from typing import Dict, List + + +releases: Dict[str, str] = {} + + +def parse_changelog(path: str): + """Parse a changelog file for versions and release notes. + + Args: + path (str): Path to the changelog file. + """ + release_regex = re.compile(r"^##\s") + version_regex = re.compile(r"([\d\.]+)") + + current_version = '' + current_notes: List[str] = [] + + with open(path, "r") as f: + for line in f.readlines(): + if release_regex.match(line): + if current_version != '': + releases[current_version] = ''.join(current_notes).strip() + current_notes = [] + current_version = version_regex.findall(line)[0] + else: + current_notes.append(line) + releases[current_version] = ''.join(current_notes).strip() + + +def print_release_notes(version: str): + """Print the release notes of the given release. + + Args: + version (str): The requested version. + """ + print(releases[version.replace("v", "")]) + + +argparser = argparse.ArgumentParser() +argparser.add_argument( + "-f", "--file", + default="CHANGELOG.md", + help="Path to the changelog file", + metavar="CHANGELOG") +argparser.add_argument("version", help="Version to get the release notes for") +args = argparser.parse_args() + + +parse_changelog(args.file) +print_release_notes(args.version)