From d51fb3c8b950f504351b3642986d1a0be629c398 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 18 Mar 2022 16:28:32 +0000 Subject: set_versions: Various improvements - Allow specifying the version from the commandline - Add all previous release series/version mappings (to support transitions branch) - Add poky mapping for 3.4 as some releases erronously use it - Improve git branch 'guessing' code to work properly - Handle poky '.0' release mappings correctly - Only write poky.yaml if poky.yaml.in exists - Ensure older non-active releases are shown in the switchers.js release list. - Ensure current version and current release series are shown in switcher. (From yocto-docs rev: f2b069be8c307e3efe518f5d9bb1e6e705b96554) Signed-off-by: Richard Purdie --- documentation/set_versions.py | 117 +++++++++++++++++++++++++++++++----------- 1 file changed, 88 insertions(+), 29 deletions(-) (limited to 'documentation') diff --git a/documentation/set_versions.py b/documentation/set_versions.py index 94e2704a50..9f0d794292 100755 --- a/documentation/set_versions.py +++ b/documentation/set_versions.py @@ -12,6 +12,12 @@ import subprocess import collections import sys +import os +import itertools + +ourversion = None +if len(sys.argv) == 2: + ourversion = sys.argv[1] ourversion = None if len(sys.argv) == 2: @@ -29,6 +35,27 @@ release_series["honister"] = "3.4" release_series["hardknott"] = "3.3" release_series["gatesgarth"] = "3.2" release_series["dunfell"] = "3.1" +release_series["zeus"] = "3.0" +release_series["warrior"] = "2.7" +release_series["thud"] = "2.6" +release_series["sumo"] = "2.5" +release_series["rocko"] = "2.4" +release_series["pyro"] = "2.3" +release_series["morty"] = "2.2" +release_series["krogoth"] = "2.1" +release_series["jethro"] = "2.0" +release_series["jethro-pre"] = "1.9" +release_series["fido"] = "1.8" +release_series["dizzy"] = "1.7" +release_series["daisy"] = "1.6" +release_series["dora"] = "1.5" +release_series["dylan"] = "1.4" +release_series["danny"] = "1.3" +release_series["denzil"] = "1.2" +release_series["edison"] = "1.1" +release_series["bernard"] = "1.0" +release_series["laverne"] = "0.9" + # "langdale" : "2.2", bitbake_mapping = { @@ -40,13 +67,14 @@ bitbake_mapping = { } # 3.4 onwards doesn't have poky version +# Early 3.4 release docs do reference it though poky_mapping = { + "3.4" : "26.0", "3.3" : "25.0", "3.2" : "24.0", "3.1" : "23.0", } -ourversion = None ourseries = None ourbranch = None bitbakeversion = None @@ -73,31 +101,38 @@ if ourversion: if release_series[i] == baseversion: ourseries = i ourbranch = i - bitbakeversion = bitbake_mapping[i] + if i in bitbake_mapping: + bitbakeversion = bitbake_mapping[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) + # We're not on a known release branch so we have to guess. Compare the numbers of commits + # from each release branch and assume the smallest number of commits is the one we're based off + possible_branch = None + branch_count = 0 + for b in itertools.chain(release_series.keys(), ["master"]): + result = subprocess.run(["git", "log", "--format=oneline", "HEAD..origin/" + 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) + count = result.stdout.count('\n') + if not possible_branch or count < branch_count: + print("Branch %s has count %s" % (b, count)) + possible_branch = b + branch_count = count + if possible_branch: + branch = possible_branch + else: + branch = "master" + print("Nearest release branch estimated to be %s" % branch) if branch == "master": ourseries = devbranch docconfver = "dev" bitbakeversion = "" elif branch in release_series: ourseries = branch - bitbakeversion = bitbake_mapping[branch] + if branch in bitbake_mapping: + bitbakeversion = bitbake_mapping[branch] else: sys.exit("Unknown series for branch %s" % branch) @@ -115,8 +150,8 @@ else: docconfver = ourversion series = [k for k in release_series] -previousseries = series[series.index(ourseries)+1:] -lastlts = [k for k in previousseries if k in ltsseries] +previousseries = series[series.index(ourseries)+1:] or [""] +lastlts = [k for k in previousseries if k in ltsseries] or "dunfell" print("Version calculated to be %s" % ourversion) print("Release series calculated to be %s" % ourseries) @@ -134,21 +169,40 @@ replacements = { } if release_series[ourseries] in poky_mapping: - pokyversion = poky_mapping[release_series[ourseries]] + "." + ourversion.rsplit(".", 1)[1] + pokyversion = poky_mapping[release_series[ourseries]] + if ourversion != release_series[ourseries]: + pokyversion = pokyversion + "." + ourversion.rsplit(".", 1)[1] + else: + pokyversion = pokyversion + ".0" replacements["POKYVERSION"] = pokyversion -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") - +if os.path.exists("poky.yaml.in"): + 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") + + +# In the switcher list of versions we display: +# - latest dev +# - latest stable release +# - latest LTS +# - latest for each releases listed as active +# - latest doc version in current series +# - current doc version +# (with duplicates removed) + +if ourseries not in activereleases: + activereleases.append(ourseries) + +versions = [] with open("sphinx-static/switchers.js.in", "r") as r, open("sphinx-static/switchers.js", "w") as w: lines = r.readlines() for line in lines: @@ -159,10 +213,15 @@ with open("sphinx-static/switchers.js.in", "r") as r, open("sphinx-static/switch continue versions = subprocess.run('git tag --list yocto-%s*' % (release_series[branch]), shell=True, capture_output=True, text=True).stdout.split() versions = sorted([v.replace("yocto-" + release_series[branch] + ".", "").replace("yocto-" + release_series[branch], "0") for v in versions], key=int) + if not versions: + continue version = release_series[branch] if versions[-1] != "0": version = version + "." + versions[-1] + versions.append(version) w.write(" '%s': '%s',\n" % (version, version)) + if ourversion not in versions: + w.write(" '%s': '%s',\n" % (ourversion, ourversion)) else: w.write(line) -- cgit v1.2.3-54-g00ecf