From 99ccb1be599ad7e65a0f13d9048ba7e27e7e8713 Mon Sep 17 00:00:00 2001 From: Romain Vigier Date: Fri, 27 Aug 2021 11:39:51 +0200 Subject: [PATCH] Use custom script for getting release notes --- .gitlab-ci.yml | 5 ++- build-aux/get_release_notes.py | 62 ++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100755 build-aux/get_release_notes.py 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)