mirror of
https://git.yoctoproject.org/poky
synced 2026-09-19 18:49:32 +02:00
Makefile/set_versions: Allow poky.yaml to be autogenerated
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. (From yocto-docs rev: 841e2df0e2e544b82fff9ddd0339a4e775148e3a) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
1
documentation/.gitignore
vendored
1
documentation/.gitignore
vendored
@@ -1,5 +1,6 @@
|
|||||||
_build/
|
_build/
|
||||||
Pipfile.lock
|
Pipfile.lock
|
||||||
|
poky.yaml
|
||||||
.vscode/
|
.vscode/
|
||||||
*/svg/*.png
|
*/svg/*.png
|
||||||
*/svg/*.pdf
|
*/svg/*.pdf
|
||||||
|
|||||||
@@ -57,4 +57,5 @@ all: html epub latexpdf
|
|||||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||||
%:
|
%:
|
||||||
|
$(SOURCEDIR)/set_versions.py
|
||||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
|
|||||||
120
documentation/set_versions.py
Executable file
120
documentation/set_versions.py
Executable file
@@ -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")
|
||||||
|
|
||||||
Reference in New Issue
Block a user