From 3d8f9b450f8355f7f5d4061b52f29305c2714731 Mon Sep 17 00:00:00 2001 From: Alexis Mousset Date: Wed, 5 Dec 2018 09:58:26 +0100 Subject: [PATCH] Work in progress --- .gitignore | 1 + Makefile | 16 +++++- site-dev.yml | 4 +- site-local.yml | 4 +- site.yml | 21 +++++++- src/changelogs/.gitignore | 4 ++ src/changelogs/Makefile | 20 +++++++ src/changelogs/antora.yml | 6 +++ src/changelogs/dependencies/.gitignore | 3 ++ src/changelogs/dependencies/Makefile | 27 ++++++++++ src/changelogs/tools/generate-nav.py | 72 ++++++++++++++++++++++++++ 11 files changed, 173 insertions(+), 5 deletions(-) create mode 100644 src/changelogs/.gitignore create mode 100644 src/changelogs/Makefile create mode 100644 src/changelogs/antora.yml create mode 100644 src/changelogs/dependencies/.gitignore create mode 100644 src/changelogs/dependencies/Makefile create mode 100755 src/changelogs/tools/generate-nav.py diff --git a/.gitignore b/.gitignore index c99413db..a02cbdf8 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ doc.iml # Temporary doc-build +changelogs-build diff --git a/Makefile b/Makefile index 67d7e7ec..3ae6337f 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ +ALL_VERSIONS = 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 3.0 3.1 3.2 4.0 4.1 4.2 4.3 5.0 VERSIONS = 5.0 5.1 VERSION_DOCS = $(addprefix doc-, $(VERSIONS)) VERSION_ARCHIVES = $(addsuffix .archive, $(VERSIONS)) @@ -6,7 +7,7 @@ GENERIC_DOCS = site site-dev site-local SITES = $(GENERIC_DOCS) $(VERSIONS) -.PHONY: prepare rudder-theme/build/ui-bundle.zip optipng doc-build build/sites/site/.htaccess build/history/5.0/.htaccess build/files $(SITES) +.PHONY: prepare rudder-theme/build/ui-bundle.zip optipng doc-build changelogs-build build/sites/site/.htaccess build/history/5.0/.htaccess build/files $(SITES) .DEFAULT_GOAL := local all: $(GENERIC_DOCS) build/sites/site/.htaccess build/history/5.0/.htaccess $(VERSION_ARCHIVES) build/files test @@ -28,8 +29,19 @@ doc-build: cd $@/src/reference && make cd $@ && git add -f src/reference && git commit --allow-empty -m "Build master" +changelogs-build: + [ -d $@ ] || git clone https://github.com/amousset/rudder-doc.git $@ + cd $@ && git checkout master && git pull + for version in $(ALL_VERSIONS); do \ + cd $@ && git checkout master && git branch -df "branches/rudder/$$version" && git checkout -b "branches/rudder/$$version" ; \ + sed -i 's@version: "5.0"@version: "$$version"@' src/changelogs/antora.yml ; \ + sed -i 's@RUDDER_VERSION = 5.0@RUDDER_VERSION = $$version@' src/changelogs/dependencies/Makefile ; \ + src/changelogs && make ; \ + cd .. && git add -f src/changelogs && git commit --allow-empty -m "Build" ; \ + done + # Prepare everything, even if not needed -prepare: doc-build +prepare: doc-build changelogs-build cd src/reference && make $(SITES): prepare rudder-theme/build/ui-bundle.zip diff --git a/site-dev.yml b/site-dev.yml index 2dde6463..639398ca 100644 --- a/site-dev.yml +++ b/site-dev.yml @@ -15,4 +15,6 @@ content: - url: ./doc-build branches: ["branches/rudder/5.0", "master"] start_path: src/reference - + - url: . + branches: master + start_path: src/changelogs diff --git a/site-local.yml b/site-local.yml index 86453560..43caa681 100644 --- a/site-local.yml +++ b/site-local.yml @@ -14,4 +14,6 @@ content: - url: . branches: HEAD start_path: src/reference - + - url: . + branches: HEAD + start_path: src/changelogs diff --git a/site.yml b/site.yml index 5c8bd03b..1ec4fc3b 100644 --- a/site.yml +++ b/site.yml @@ -15,4 +15,23 @@ content: - url: ./doc-build branches: "branches/rudder/5.0" start_path: src/reference - + - url: ./changelogs-build + branches: + - "branches/rudder/2.3" + - "branches/rudder/2.4" + - "branches/rudder/2.5" + - "branches/rudder/2.6" + - "branches/rudder/2.7" + - "branches/rudder/2.8" + - "branches/rudder/2.9" + - "branches/rudder/2.10" + - "branches/rudder/2.11" + - "branches/rudder/3.0" + - "branches/rudder/3.1" + - "branches/rudder/3.2" + - "branches/rudder/4.0" + - "branches/rudder/4.1" + - "branches/rudder/4.2" + - "branches/rudder/4.3" + - "branches/rudder/5.0" + start_path: src/changelogs diff --git a/src/changelogs/.gitignore b/src/changelogs/.gitignore new file mode 100644 index 00000000..21b7115a --- /dev/null +++ b/src/changelogs/.gitignore @@ -0,0 +1,4 @@ +modules/*/nav.adoc +modules/*/pages/_partials/dyn/ +modules/*/assets/images/graphviz/ +modules/plugins/assets/ diff --git a/src/changelogs/Makefile b/src/changelogs/Makefile new file mode 100644 index 00000000..a81e048c --- /dev/null +++ b/src/changelogs/Makefile @@ -0,0 +1,20 @@ +## Rudder Changelog Makefile + +.PHONY: clean nav + +## Dynamic content + +changelogs: + cd dependencies && make $@ + cp -r dependencies/$@/* modules/ROOT/pages/ + mv modules/ROOT/pages/main.adoc modules/ROOT/pages/index.adoc + echo "* xref:index.adoc[Main changelogs]" > modules/ROOT/nav.adoc + echo "* Plugins" >> modules/ROOT/nav.adoc + find modules/ROOT/pages/plugins -type f | sed 's/.*\///' | sed "s/\.adoc//" | sed -r 's@(.*)@** xref:plugins/\1.adoc[\1]@' | sort >> modules/ROOT/nav.adoc + +## Clean + +clean: + cd dependencies && make clean + rm -rf modules/*/nav.adoc + rm -rf modules/*/pages/* diff --git a/src/changelogs/antora.yml b/src/changelogs/antora.yml new file mode 100644 index 00000000..f8deb3ae --- /dev/null +++ b/src/changelogs/antora.yml @@ -0,0 +1,6 @@ +name: changelogs +title: Changelogs +version: "5.0" +nav: +- modules/ROOT/nav.adoc + diff --git a/src/changelogs/dependencies/.gitignore b/src/changelogs/dependencies/.gitignore new file mode 100644 index 00000000..028e1ecc --- /dev/null +++ b/src/changelogs/dependencies/.gitignore @@ -0,0 +1,3 @@ +# Generated files +/changelogs/ +/rudder-tools-repo/ diff --git a/src/changelogs/dependencies/Makefile b/src/changelogs/dependencies/Makefile new file mode 100644 index 00000000..611ba63c --- /dev/null +++ b/src/changelogs/dependencies/Makefile @@ -0,0 +1,27 @@ +## Builds dynamic dependencies from other repos + +RUDDER_VERSION = 5.0 + +.PHONY: clean changelogs +all: changelogs + +## Repos + +rudder-tools-repo: + git clone https://github.com/Normation/rudder-tools.git rudder-tools-repo + +## Dynamic content + +changelogs: rudder-tools-repo + cd rudder-tools-repo && git checkout master + cd rudder-tools-repo && git pull + mkdir -p changelogs + cp -r rudder-tools-repo/release-data/changelogs/$(RUDDER_VERSION)/* changelogs/ + +## Clean + +clean: + rm -rf changelogs + +veryclean: clean + rm -rf changelogs rudder-tools-repo diff --git a/src/changelogs/tools/generate-nav.py b/src/changelogs/tools/generate-nav.py new file mode 100755 index 00000000..b61cb153 --- /dev/null +++ b/src/changelogs/tools/generate-nav.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python + +import os +import re +import sys + +MODULE = sys.argv[1] +NAME = sys.argv[2] + +MODULEDIR = "modules/"+MODULE +PAGESDIR = MODULEDIR+"/pages/" +TITLE = re.compile("^(=+) (.+)$") +ID = re.compile(r"^\[\[(.+),?.*\]\]$") + +def remove_duplicate_underscore(string): + prev = ' ' + res = [] + for char in string: + if prev == '_' and char == '_': + pass + else: + res.append(char) + prev = char + return ''.join(res) + +# reproduce asciidoc's behavior +def slugify(s): + s = "_" + s + s = s.lower() + s = s.strip() + s = re.sub('\W', '_', s) + s = remove_duplicate_underscore(s) + s = s.rstrip('_') + return s + +# Get all standalone .adoc pages, sorted alphanumerically +# We exclude files in root (the index of the doc), _partials which are not actual pages + +with open(MODULEDIR + "/nav.list") as f: + files = f.read().splitlines() +#files = sorted([file for root, dirs, files in os.walk('.') for file in files if file.endswith(".adoc") and not "_partials" in root]) +#files = sorted([root.split('/', 1)[-1]+"/"+file for root, dirs, files in os.walk('.') for file in files if file.endswith(".adoc") and not "_partials" in root]) + +result = ["// Automatically generated list of content - do not edit", "* "+NAME] + +os.chdir(PAGESDIR) + +for file in files: + with open(file) as f: + content = f.read().splitlines() + + prev = "" + first = True + for line in content: + search_title = TITLE.search(line) + if search_title: + level = search_title.group(1).count("=") + 1 + title = search_title.group(2) + search_id = ID.search(prev) + if search_id: + page_id = search_id.group(1) + else: + page_id = slugify(title) + if level < 4: + if first: + result.append("*" * level + " xref:" + file + "[" + title + "]") + first = False + else: + result.append("*" * level + " xref:" + file + "#" + page_id + "[" + title + "]") + prev = line + +print("\n".join(result))