diff mbox series

[v3] set_versions.py: build with versions from releases.json

Message ID 20260304-releases-json-v3-1-fdde0b9ba93b@bootlin.com
State New
Headers show
Series [v3] set_versions.py: build with versions from releases.json | expand

Commit Message

Antonin Godard March 4, 2026, 8:39 a.m. UTC
Build using the releases.json file obtained from
https://dashboard.yoctoproject.org/releases.json. If this file is
already downloaded, don't fetch it again.

If we fail fetching the file, use default values (and print a warning).

Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
---
Changes in v3:
- Reduce series to a single patch. We now download the releases.json
  file on the first build of the documentation, and re-use it for the
  following builds.
- Fallback on default values in case we failed to fetch and no
  releases.json is present.
- The Makefile clean target also removes the releases.json file.
- Link to v2: https://patch.msgid.link/20260226-releases-json-v2-0-6ba4a3b37b24@bootlin.com

Changes in v2:
- add a python script to fetch and format the releases.json file
- instead of a make target, make it possible to use a different
  releases.json file using an environment variable
- Link to v1: https://patch.msgid.link/20260225-releases-json-v1-0-fee3f01b9197@bootlin.com
---
 documentation/.gitignore      |  1 +
 documentation/Makefile        |  2 +-
 documentation/set_versions.py | 88 +++++++++++++++++++++++++------------------
 3 files changed, 54 insertions(+), 37 deletions(-)


---
base-commit: d97cfeaa55ed42722998d3313c1857aa377f6881
change-id: 20260223-releases-json-93f5d84dd93a
diff mbox series

Patch

diff --git a/documentation/.gitignore b/documentation/.gitignore
index b23d59805..d6d020efb 100644
--- a/documentation/.gitignore
+++ b/documentation/.gitignore
@@ -9,3 +9,4 @@  releases.rst
 */svg/*.pdf
 styles/*
 !styles/config
+releases.json
diff --git a/documentation/Makefile b/documentation/Makefile
index d9964822d..fe0574537 100644
--- a/documentation/Makefile
+++ b/documentation/Makefile
@@ -33,7 +33,7 @@  publish: Makefile checks epub latexpdf html singlehtml
 	sed -i -e 's@index.html#@singleindex.html#@g' $(BUILDDIR)/$(DESTDIR)/singleindex.html
 
 clean:
-	@rm -rf $(BUILDDIR) poky.yaml sphinx-static/switchers.js releases.rst
+	@rm -rf $(BUILDDIR) poky.yaml sphinx-static/switchers.js releases.rst releases.json
 
 checks:
 	$(SOURCEDIR)/tools/check-glossaries --docs-dir $(SOURCEDIR)
diff --git a/documentation/set_versions.py b/documentation/set_versions.py
index 96903e14c..08be8c665 100755
--- a/documentation/set_versions.py
+++ b/documentation/set_versions.py
@@ -11,57 +11,73 @@ 
 #
 
 
+import json
 import subprocess
 import collections
 import sys
 import os
 import itertools
 
-# Order matters: most recent to least recent
+from urllib.request import urlopen, URLError
+
+# NOTE: these variables contain default values in case we are not able to fetch
+# the releases.json file from https://dashboard.yoctoproject.org/releases.json
 activereleases = ["whinlatter", "scarthgap", "kirkstone"]
 devbranch = "wrynose"
 ltsseries = ["wrynose", "scarthgap", "kirkstone"]
+release_series = collections.OrderedDict({
+    "wrynose": "6.0",
+    "whinlatter": "5.3",
+    "scarthgap": "5.0",
+    "kirkstone": "4.0",
+})
+
+releases_from_json = {}
+
+# Use the local releases.json file if found, fetch it from the dashboard otherwise
+releases_json_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "releases.json")
+try:
+    with open(releases_json_path, "r") as f:
+        releases_from_json = json.load(f)
+except FileNotFoundError:
+    print("Fetching releases.json from https://dashboard.yoctoproject.org/releases.json...",
+          file=sys.stderr)
+    try:
+        with urlopen("https://dashboard.yoctoproject.org/releases.json") as r, \
+                open(releases_json_path, "w") as f:
+            releases_from_json = json.load(r)
+            json.dump(releases_from_json, f)
+    except URLError:
+        print("WARNING: tried to fetch https://dashboard.yoctoproject.org/releases.json "
+              "but failed, using default values for active releases", file=sys.stderr)
+        pass
+
+if releases_from_json:
+    release_series = collections.OrderedDict()
+    activereleases = []
+    devbranch = ""
+    ltsseries = []
+
+    for release in releases_from_json:
+        codename = release["release_codename"].lower()
+        release_series[codename] = release["series_version"]
+        if release["status"] == "Active Development":
+            devbranch = codename
+        if release["series"] == "current":
+            activereleases.append(codename)
+        if "LTS until" in release["status"]:
+            ltsseries.append(codename)
+
+    activereleases.remove(devbranch)
 
 # used by run-docs-builds to get the default page
 if len(sys.argv) > 1 and sys.argv[1] == "getlatest":
     print(activereleases[0])
     sys.exit(0)
 
-release_series = collections.OrderedDict()
-release_series["wrynose"] = "6.0"
-release_series["whinlatter"] = "5.3"
-release_series["walnascar"] = "5.2"
-release_series["styhead"] = "5.1"
-release_series["scarthgap"] = "5.0"
-release_series["nanbield"] = "4.3"
-release_series["mickledore"] = "4.2"
-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"
-
+print(f"activereleases calculated to be {activereleases}")
+print(f"devbranch calculated to be {devbranch}")
+print(f"ltsseries calculated to be {ltsseries}")
 
 bitbake_mapping = {
     "wrynose" : "2.18",