All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/5] Makefile/set_versions: Allow poky.yaml to be autogenerated
@ 2022-03-23 10:19 Richard Purdie
  2022-03-23 10:19 ` [PATCH 2/5] conf.py/set_versions/poky.yaml: Set version in conf.py from poky.yaml Richard Purdie
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Richard Purdie @ 2022-03-23 10:19 UTC (permalink / raw)
  To: docs

Use a script to generate the branch/tag information inside poky.yaml.

If the branch isn't a known release branch, include git magic to find
the closest matching release branch we know about.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 documentation/.gitignore                  |   1 +
 documentation/Makefile                    |   1 +
 documentation/{poky.yaml => poky.yaml.in} |   0
 documentation/set_versions.py             | 120 ++++++++++++++++++++++
 4 files changed, 122 insertions(+)
 rename documentation/{poky.yaml => poky.yaml.in} (100%)
 create mode 100755 documentation/set_versions.py

diff --git a/documentation/.gitignore b/documentation/.gitignore
index 35ead8af6..e5e2c1708 100644
--- a/documentation/.gitignore
+++ b/documentation/.gitignore
@@ -1,5 +1,6 @@
 _build/
 Pipfile.lock
+poky.yaml
 .vscode/
 */svg/*.png
 */svg/*.pdf
diff --git a/documentation/Makefile b/documentation/Makefile
index f04f381bd..bec53399c 100644
--- a/documentation/Makefile
+++ b/documentation/Makefile
@@ -57,4 +57,5 @@ all: html epub latexpdf
 # Catch-all target: route all unknown targets to Sphinx using the new
 # "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
 %:
+	$(SOURCEDIR)/set_versions.py
 	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/documentation/poky.yaml b/documentation/poky.yaml.in
similarity index 100%
rename from documentation/poky.yaml
rename to documentation/poky.yaml.in
diff --git a/documentation/set_versions.py b/documentation/set_versions.py
new file mode 100755
index 000000000..d48b8b74c
--- /dev/null
+++ b/documentation/set_versions.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python3
+#
+# Add version information to poky.yaml based upon current git branch/tags
+#
+# Copyright Linux Foundation
+# Author: Richard Purdie <richard.purdie@linuxfoundation.org>
+#
+# SPDX-License-Identifier: MIT
+#
+
+
+import subprocess
+import collections
+import sys
+
+ourversion = None
+if len(sys.argv) == 2:
+    ourversion = sys.argv[1]
+
+activereleases = ["honister", "hardknott", "gatesgarth", "dunfell", "zeus", "warrior"]
+#devbranch = "langdale"
+devbranch = "kirkstone"
+ltsseries = ["kirkstone", "dunfell"]
+
+release_series = collections.OrderedDict()
+#release_series["langdale"] = "4.1"
+release_series["kirkstone"] = "4.0"
+release_series["honister"] = "3.4"
+release_series["hardknott"] = "3.3"
+release_series["gatesgarth"] = "3.2"
+release_series["dunfell"] = "3.1"
+
+ourversion = None
+ourseries = None
+ourbranch = None
+
+# Test tags exist and inform the user to fetch if not
+try:
+    subprocess.run(["git", "show", "yocto-3.4.2"], capture_output=True, check=True)
+except subprocess.CalledProcessError:
+    sys.exit("Please run 'git fetch --tags' before building the documentation")
+
+# Try and figure out what we are
+tags = subprocess.run(["git", "tag", "--points-at", "HEAD"], capture_output=True, text=True).stdout
+for t in tags.split():
+    if t.startswith("yocto-"):
+        ourversion = t[6:]
+
+if ourversion:
+    # We're a tagged release
+    components = ourversion.split(".")
+    baseversion = components[0] + "." + components[1]
+    for i in release_series:
+        if release_series[i] == baseversion:
+            ourseries = i
+            ourbranch = i
+else:
+    # We're floating on a branch
+    branch = subprocess.run(["git", "branch", "--show-current"], capture_output=True, text=True).stdout.strip()
+    ourbranch = branch
+    if branch != "master" and branch not in release_series:
+        possible_branches = []
+        for b in release_series.keys():
+            result = subprocess.run(["git", "show-ref", "heads/" + b], capture_output=True, text=True)
+            if result.returncode == 0:
+                possible_branches.append(b)
+                continue
+            result = subprocess.run(["git", "show-ref", "origin/" + b], capture_output=True, text=True)
+            if result.returncode == 0:
+                possible_branches.append("origin/" + b)
+        nearestbranch = subprocess.run('git show-branch master ' + ' '.join(possible_branches) + ' | grep "*" | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -n1', shell=True, capture_output=True, text=True).stdout
+        branch = nearestbranch.split('[')[1].split('~')[0]
+        print("Nearest release branch esimtated to be %s" % branch)
+    if branch == "master":
+        ourseries = devbranch
+    elif branch in release_series:
+        ourseries = branch
+    else:
+        sys.exit("Unknown series for branch %s" % branch)
+
+    previoustags = subprocess.run(["git", "tag", "--merged", "HEAD"], capture_output=True, text=True).stdout
+    previoustags = [t[6:] for t in previoustags.split() if t.startswith("yocto-" + release_series[ourseries])]
+    futuretags = subprocess.run(["git", "tag", "--merged", ourbranch], capture_output=True, text=True).stdout
+    futuretags = [t[6:] for t in futuretags.split() if t.startswith("yocto-" + release_series[ourseries])]
+
+    # Append .999 against the last known version
+    if len(previoustags) != len(futuretags):
+        ourversion = previoustags[-1] + ".999"
+    else:
+        ourversion = release_series[ourseries] + ".999"
+
+series = [k for k in release_series]
+previousseries = series[series.index(ourseries)+1:]
+lastlts = [k for k in previousseries if k in ltsseries]
+
+print("Version calculated to be %s" % ourversion)
+print("Release series calculated to be %s" % ourseries)
+
+replacements = {
+    "DISTRO" : ourversion,
+    "DISTRO_NAME_NO_CAP" : ourseries,
+    "DISTRO_NAME" : ourseries.capitalize(),
+    "DISTRO_NAME_NO_CAP_MINUS_ONE" : previousseries[0],
+    "DISTRO_NAME_NO_CAP_LTS" : lastlts[0],
+    "YOCTO_DOC_VERSION" : ourversion,
+    "DISTRO_REL_TAG" : "yocto-" + ourversion,
+}
+
+with open("poky.yaml.in", "r") as r, open("poky.yaml", "w") as w:
+    lines = r.readlines()
+    for line in lines:
+        data = line.split(":")
+        k = data[0].strip()
+        if k in replacements:
+            w.write("%s : \"%s\"\n" % (k, replacements[k]))
+        else:
+            w.write(line)
+
+print("poky.yaml generated from poky.yaml.in")
+
-- 
2.32.0



^ permalink raw reply related	[flat|nested] 6+ messages in thread
* [PATCH 0/5 v2] Proposed docs version changes
@ 2022-03-21 17:44 Richard Purdie
  2022-03-21 17:44 ` [PATCH 5/5] set_versions: Various improvements Richard Purdie
  0 siblings, 1 reply; 6+ messages in thread
From: Richard Purdie @ 2022-03-21 17:44 UTC (permalink / raw)
  To: docs

I've tweaked my patchset with some review feedback from Quentin. The v2:

* uses yaml to load the variables in conf.py
* fixes a bitbake_mapping[i] -> branch
* fixes a comment typo in set_versions.py
* comments the bitbake langdale version mapping

Richard Purdie (5):
  Makefile/set_versions: Allow poky.yaml to be autogenerated
  conf.py/set_versions/poky.yaml: Set version in conf.py from poky.yaml
  set_versions: Add support for setting POKYVERSION found in older
    releases
  set_versions/switchers.js: Allow switchers.js version information to
    be autogenerated
  set_versions: Various improvements

 documentation/.gitignore                      |   2 +
 documentation/Makefile                        |   1 +
 documentation/conf.py                         |  22 +-
 documentation/{poky.yaml => poky.yaml.in}     |   2 +
 documentation/set_versions.py                 | 225 ++++++++++++++++++
 .../{switchers.js => switchers.js.in}         |   8 +-
 6 files changed, 251 insertions(+), 9 deletions(-)
 rename documentation/{poky.yaml => poky.yaml.in} (98%)
 create mode 100755 documentation/set_versions.py
 rename documentation/sphinx-static/{switchers.js => switchers.js.in} (97%)

-- 
2.32.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-03-23 10:20 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-23 10:19 [PATCH 1/5] Makefile/set_versions: Allow poky.yaml to be autogenerated Richard Purdie
2022-03-23 10:19 ` [PATCH 2/5] conf.py/set_versions/poky.yaml: Set version in conf.py from poky.yaml Richard Purdie
2022-03-23 10:19 ` [PATCH 3/5] set_versions: Add support for setting POKYVERSION found in older releases Richard Purdie
2022-03-23 10:19 ` [PATCH 4/5] set_versions/switchers.js: Allow switchers.js version information to be autogenerated Richard Purdie
2022-03-23 10:19 ` [PATCH 5/5] set_versions: Various improvements Richard Purdie
  -- strict thread matches above, loose matches on Subject: below --
2022-03-21 17:44 [PATCH 0/5 v2] Proposed docs version changes Richard Purdie
2022-03-21 17:44 ` [PATCH 5/5] set_versions: Various improvements Richard Purdie

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.