mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00

versions array is supposed to store the latest version of all active releases. However, in the loop it is reassigned and therefore, the check on whether our version is already in the versions array will always return false (except for the latest version of the last active release) and write our version again in the list. By using a local variable for the logic instead of versions array, the check now works properly. Fixes: f2b069be8c307 "set_versions: Various improvements" Cc: Quentin Schulz <foss+yocto@0leil.net> (From yocto-docs rev: 36a088c8c99dd37f5ca07ec8f90f2c51ef8b36f2) Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
230 lines
8.0 KiB
Python
Executable File
230 lines
8.0 KiB
Python
Executable File
#!/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
|
|
import os
|
|
import itertools
|
|
|
|
ourversion = None
|
|
if len(sys.argv) == 2:
|
|
ourversion = sys.argv[1]
|
|
|
|
ourversion = None
|
|
if len(sys.argv) == 2:
|
|
ourversion = sys.argv[1]
|
|
|
|
activereleases = ["honister", "hardknott", "dunfell"]
|
|
#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"
|
|
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 = {
|
|
"kirkstone" : "2.0",
|
|
"honister" : "1.52",
|
|
"hardknott" : "1.50",
|
|
"gatesgarth" : "1.48",
|
|
"dunfell" : "1.46",
|
|
}
|
|
|
|
# 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",
|
|
}
|
|
|
|
ourseries = None
|
|
ourbranch = None
|
|
bitbakeversion = None
|
|
docconfver = 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]
|
|
docconfver = ourversion
|
|
for i in release_series:
|
|
if release_series[i] == baseversion:
|
|
ourseries = i
|
|
ourbranch = 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:
|
|
# 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:
|
|
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
|
|
if branch in bitbake_mapping:
|
|
bitbakeversion = bitbake_mapping[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"
|
|
if not docconfver:
|
|
docconfver = ourversion
|
|
|
|
series = [k for k in release_series]
|
|
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)
|
|
|
|
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,
|
|
"DOCCONF_VERSION" : docconfver,
|
|
"BITBAKE_SERIES" : bitbakeversion,
|
|
}
|
|
|
|
if release_series[ourseries] in poky_mapping:
|
|
pokyversion = poky_mapping[release_series[ourseries]]
|
|
if ourversion != release_series[ourseries]:
|
|
pokyversion = pokyversion + "." + ourversion.rsplit(".", 1)[1]
|
|
else:
|
|
pokyversion = pokyversion + ".0"
|
|
replacements["POKYVERSION"] = pokyversion
|
|
|
|
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:
|
|
if "VERSIONS_PLACEHOLDER" in line:
|
|
w.write(" 'dev': { 'title': 'dev (%s)', 'obsolete': false,},\n" % release_series[devbranch])
|
|
for branch in activereleases:
|
|
if branch == devbranch:
|
|
continue
|
|
branch_versions = subprocess.run('git tag --list yocto-%s*' % (release_series[branch]), shell=True, capture_output=True, text=True).stdout.split()
|
|
branch_versions = sorted([v.replace("yocto-" + release_series[branch] + ".", "").replace("yocto-" + release_series[branch], "0") for v in branch_versions], key=int)
|
|
if not branch_versions:
|
|
continue
|
|
version = release_series[branch]
|
|
if branch_versions[-1] != "0":
|
|
version = version + "." + branch_versions[-1]
|
|
versions.append(version)
|
|
w.write(" '%s': {'title': '%s', 'obsolete': %s,},\n" % (version, version, str(branch == ourseries).lower()))
|
|
if ourversion not in versions and ourseries != devbranch:
|
|
w.write(" '%s': {'title': '%s', 'obsolete': true,},\n" % (ourversion, ourversion))
|
|
else:
|
|
w.write(line)
|
|
|
|
print("switchers.js generated from switchers.js.in")
|
|
|