From 85c69e10963d10493aec1090156ed687021a5080 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Wed, 19 Jan 2022 15:58:36 +0100 Subject: [PATCH] Add release automation Added script which assists in creating an automatic release by extracting the current version and newest changes from the semantic changelog. This is then used in the gitea release preparation as title and content of the release message. The files built in the dist directory by poetry will be attached. --- .woodpecker.yml | 8 ++++++ CHANGELOG.md | 2 +- tools/extract-changelog.py | 56 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 tools/extract-changelog.py diff --git a/.woodpecker.yml b/.woodpecker.yml index 946ad62..0aacbed 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -41,6 +41,12 @@ pipeline: when: branch: main + release_prep: + image: python + commands: + - echo "----------------- preparing release ------------------" + - python tools/extract-changelog.py + gitea_release: image: plugins/gitea-release settings: @@ -48,6 +54,8 @@ pipeline: from_secret: gitea_release_token base_url: https://git.martyoeh.me files: dist/* + title: NEWEST_VERSION.md + note: NEWEST_CHANGES.md when: branch: main event: tag diff --git a/CHANGELOG.md b/CHANGELOG.md index a03a334..723aa00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ and this project tries to adhere to [Semantic Versioning](https://semver.org/spe * Compatible with Python stretching back to version 3.7 -## [0.4] - 2021-12-06 +## [0.4.0] - 2021-12-06 ### Added diff --git a/tools/extract-changelog.py b/tools/extract-changelog.py new file mode 100644 index 0000000..e14de09 --- /dev/null +++ b/tools/extract-changelog.py @@ -0,0 +1,56 @@ +import re + +## Extracts the version and newest changes from a semantic changelog. +# +# Important, it only works with three-parted version numbers +# a-la 1.2.3 or 313.01.1888 -- needs \d.\d.\d to work. +# +# The version number and changeset will be put in `NEWEST_VERSION.md` +# and `NEWEST_CHANGES.md` respectively, for further use in releases. +OUTPUT_FILE_VERSION = "NEWEST_VERSION.md" +OUTPUT_FILE_CHANGES = "NEWEST_CHANGES.md" + + +def getVersion(file): + for line in file: + m = re.match(r"^## \[(\d+\.\d+\.\d+)\]", line) + if m and m.group(1): + return m.group(1) + + +def getSection(file): + inRecordingMode = False + for line in file: + if not inRecordingMode: + if re.match(r"^## \[\d+\.\d+\.\d+\]", line): + inRecordingMode = True + elif re.match(r"^## \[\d+\.\d+\.\d+\]", line): + inRecordingMode = False + break + elif re.match(r"^$", line): + pass + else: + yield line + + +def toFile(fname, content): + file = open(fname, "w") + file.write(content) + file.close() + + +with open("CHANGELOG.md") as file: + title = getVersion(file) + print(title) + toFile(OUTPUT_FILE_VERSION, title) + +with open("CHANGELOG.md") as file: + newest_changes_gen = getSection(file) + newest_changes = "" + for line in newest_changes_gen: + newest_changes += line + print("[Extracted Changelog]") + print(newest_changes) + toFile(OUTPUT_FILE_CHANGES, newest_changes) + +file.close()