From 0469dec71ee0110409067d7cbd56d99a071820a2 Mon Sep 17 00:00:00 2001 From: Martine Lenders <m.lenders@fu-berlin.de> Date: Thu, 11 May 2017 14:37:37 +0200 Subject: [PATCH] doc: add release notes to doxygen documentation Provides a script to generate a doxygen page from the `release-notes.txt` and includes it to the doxygen build. --- doc/doxygen/.gitignore | 1 + doc/doxygen/Makefile | 11 ++++-- doc/doxygen/generate-changelog.py | 66 +++++++++++++++++++++++++++++++ doc/doxygen/riot.doxyfile | 3 +- doc/doxygen/src/changelog.md.tmp | 6 +++ 5 files changed, 82 insertions(+), 5 deletions(-) create mode 100755 doc/doxygen/generate-changelog.py create mode 100644 doc/doxygen/src/changelog.md.tmp diff --git a/doc/doxygen/.gitignore b/doc/doxygen/.gitignore index 6276aff47c..53e838267f 100644 --- a/doc/doxygen/.gitignore +++ b/doc/doxygen/.gitignore @@ -1 +1,2 @@ src/css/variables.less +src/changelog.md diff --git a/doc/doxygen/Makefile b/doc/doxygen/Makefile index 544278314c..840bbf9c8e 100644 --- a/doc/doxygen/Makefile +++ b/doc/doxygen/Makefile @@ -10,11 +10,11 @@ doc: html # by marking html as phony we force make to re-run Doxygen even if the directory exists. .PHONY: html -html: src/css/riot.css +html: src/css/riot.css src/changelog.md ( cat riot.doxyfile ; echo "GENERATE_HTML = yes" ) | doxygen - .PHONY: man -man: +man: src/changelog.md ( cat riot.doxyfile ; echo "GENERATE_MAN = yes" ) | doxygen - ifneq (,$(shell which lessc)) @@ -27,9 +27,12 @@ src/css/variables.less: src/config.json -e 's/",\?$$/;/g' -e 's/\\"/"/g' > $@ endif +src/changelog.md: src/changelog.md.tmp ../../release-notes.txt + @./generate-changelog.py $+ $@ + .PHONY: -latex: +latex: src/changelog.md ( cat riot.doxyfile ; echo "GENERATE_LATEX= yes" ) | doxygen - clean: - -@rm -rf latex man html doxygen_objdb_*.tmp doxygen_entrydb_*.tmp + -@rm -rf latex man html doxygen_objdb_*.tmp doxygen_entrydb_*.tmp src/changelog.md diff --git a/doc/doxygen/generate-changelog.py b/doc/doxygen/generate-changelog.py new file mode 100755 index 0000000000..2e35e4e702 --- /dev/null +++ b/doc/doxygen/generate-changelog.py @@ -0,0 +1,66 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +# vim:fenc=utf-8 +# +# Copyright © 2017 Martine Lenders <m.lenders@fu-berlin.de> +# +# Distributed under terms of the MIT license. + +from __future__ import print_function +import re +import sys + +def generate_changelog(template_filename, changelog_filename, output_filename): + with open(template_filename) as template, \ + open(changelog_filename) as changelog, \ + open(output_filename, "w") as output: + changelog_lines = [] + release_title = re.compile(r"((RIOT-\d{4}\.\d{2} - Release Notes)|(Release 2013\.08))") + notes_template = re.compile(r"\[Notes\]") + first_title = True + title = 0 + prev_newline = False + # Traverse changelog file line-wise + for line in changelog: + # Remove duplicate newlines + if line == "\n" and not prev_newline: + prev_newline = True + elif line == "\n" and prev_newline: + continue + else: + prev_newline = False + if title: # if a release title was previously detected + changelog_lines.append("\n") # Remove the underline + title = False + prev_newline = True # this introduces a newline, so count it + elif release_title.match(line): + # if line contains a release title + release_match = re.search(r"(\d{4}\.\d{2})", line) + assert(release_match != None) + # parse out release number + release = release_match.group(1) + title = "Release %s" % release + tag = "release-%s" % release.replace('.', '-') + # append as level 1 title with reference anchor tag + changelog_lines.append("# %s {#%s}\n" % (title ,tag)) + title = True + first_title = False + else: + # append non-title log lines as verbatim (so notation is kept) + changelog_lines.append(" %s" % line) + for line in template: + # Traverse template file line-wise + if notes_template.match(line): + # if template string is matched: start adding changelog lines + for line_log in changelog_lines: + print(line_log, file=output, end="") + else: + # just print the template line + print(line, file=output, end="") + +if __name__ == "__main__": + if len(sys.argv) < 4: + print("usage %s <md template> <changelog> <output md>" % sys.argv[0], file=sys.stderr) + sys.exit(1) + generate_changelog(sys.argv[1], sys.argv[2], sys.argv[3]) + diff --git a/doc/doxygen/riot.doxyfile b/doc/doxygen/riot.doxyfile index 677db136d0..493c165c5a 100644 --- a/doc/doxygen/riot.doxyfile +++ b/doc/doxygen/riot.doxyfile @@ -764,7 +764,8 @@ INPUT = ../../doc.txt \ src/mainpage.md \ src/creating-modules.md \ src/creating-an-application.md \ - src/getting-started.md + src/getting-started.md \ + src/changelog.md # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/doc/doxygen/src/changelog.md.tmp b/doc/doxygen/src/changelog.md.tmp new file mode 100644 index 0000000000..acff108ce0 --- /dev/null +++ b/doc/doxygen/src/changelog.md.tmp @@ -0,0 +1,6 @@ +Changelog {#changelog} +========= + +[TOC] + +[Notes] -- GitLab