diff --git a/.woodpecker.yml b/.woodpecker.yml index caa86d4..6c3c118 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -20,7 +20,17 @@ pipeline: - python --version && poetry --version - poetry build when: - branch: main + event: tag + tag: v* + + release_prep: + image: python + commands: + - echo "----------------- preparing release ------------------" + - python tools/extract-changelog.py + when: + event: tag + tag: v* gitea_release: image: plugins/gitea-release 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()