diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index a2c2931..87fe093 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -34,6 +34,20 @@ jobs: echo "version=$VERSION" >> $GITHUB_OUTPUT + - name: Extract version changelog + id: changelog + run: | + # VERSION="${{ steps.tag.outputs.version }}" + VERSION=$(cat VERSION | tr -d '[:space:]') # read version and trim whitespace + CHANGELOG_FILE=$(python scripts/get_changelog.py $VERSION) + + if [[ $? != 0 ]]; then + echo "No changelog found for version $VERSION" + exit 1 + fi + + echo "changelog=$(cat $CHANGELOG_FILE)" >> $GITHUB_OUTPUT + - name: Build Artifacts if: steps.tag.outputs.version run: | @@ -46,6 +60,7 @@ jobs: id: create_release run: | VERSION="${{ steps.tag.outputs.version }}" + CHANGELOG="${{ steps.changelog.outputs.changelog }}" RESPONSE=$(curl -s -X POST \ -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ -H "Content-Type: application/json" \ @@ -53,7 +68,7 @@ jobs: -d '{ "tag_name": "v'"$VERSION"'", "name": "wapp-v'"$VERSION"'", - "body": "Automated release for wapp-v'"$VERSION"'", + "body": "'"$CHANGELOG"'", "draft": false, "prerelease": false }') diff --git a/scripts/get_changelog.py b/scripts/get_changelog.py new file mode 100644 index 0000000..4db43e3 --- /dev/null +++ b/scripts/get_changelog.py @@ -0,0 +1,57 @@ +import os +import re +import argparse +from pathlib import Path +from tempfile import mkstemp + +VERSION_HEADER = re.compile(r"\[\d+.\d+.\d+\]") + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("version") + args = parser.parse_args() + + changelog = get_changelog(args.version) + outfilename = save_changelog(args.version, changelog) + + print(outfilename) + + +def get_changelog(version: str) -> list[str]: + script_dir = Path(__file__).absolute().parent.parent + changelog = script_dir / "CHANGELOG.md" + + with changelog.open("r") as infile: + lines = infile.readlines() + + start = -1 + end = -1 + + for i, line in enumerate(lines): + if start == -1: + match = re.search(version, line) + if match is None: + continue + start = i + else: + match = VERSION_HEADER.search(line) + if match is not None: + end = i + break + + if start == -1: + exit(1) + + return lines[start:end] if end > -1 else lines[start:] + + +def save_changelog(version: str, lines: list[str]) -> str: + fd, name = mkstemp(prefix=f"wapp-changelog-{version}-", text=True) + os.write(fd, "".join(lines).encode("utf-8")) + os.close(fd) + return name + + +if __name__ == "__main__": + main()