diff mbox series

[yocto-autobuilder-helper,v2] scripts/release-parser.py: add bitbake version mappings to releases.json

Message ID 20260317-release-parser-bitbake-mapping-v2-1-1368b57dbf40@bootlin.com
State New
Headers show
Series [yocto-autobuilder-helper,v2] scripts/release-parser.py: add bitbake version mappings to releases.json | expand

Commit Message

Antonin Godard March 17, 2026, 8:11 a.m. UTC
Instead of maintaining the bitbake <-> yocto version mappings in
yocto-docs[1] and bitbake[2], let's maintain it here instead. This is
part of a work-in-progress to use the generated releases.json file in
these two repositories to generate the documentation.

[1]: https://git.yoctoproject.org/yocto-docs/tree/documentation/set_versions.py?id=d97cfeaa55ed42722998d3313c1857aa377f6881#n66
[2]: https://git.openembedded.org/bitbake/tree/doc/setversions.py?id=1d0d4a0066603461eacb92a766fec616c1e91257#n25

Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
---
Tested on this build:
https://autobuilder.yoctoproject.org/valkyrie/#/builders/104/builds/49344

Output: https://0x0.st/P9zd.json
---
Changes in v2:
- Rebased on master
- Link to v1: https://patch.msgid.link/20260305-release-parser-bitbake-mapping-v1-1-f023e03bb484@bootlin.com
---
 scripts/release-parser.py   | 39 ++++++++++++++++++++++++++++++++++++++-
 scripts/run-dashboard-index |  2 +-
 2 files changed, 39 insertions(+), 2 deletions(-)


---
base-commit: 1e27bfd901292297c8471e287d62226f4555a2e1
change-id: 20260304-release-parser-bitbake-mapping-baa27555ac04
diff mbox series

Patch

diff --git a/scripts/release-parser.py b/scripts/release-parser.py
index 4bac558..a38824f 100755
--- a/scripts/release-parser.py
+++ b/scripts/release-parser.py
@@ -7,7 +7,10 @@  import sys
 
 from git import Repo
 
+# this is the repository where we fetch most of our tag data
 GIT_REPO = sys.argv[1]
+# the bitbake repository is used to associate bitbake versions to them
+BITBAKE_REPO = sys.argv[2]
 
 print(f"Reading tag information in {GIT_REPO}")
 
@@ -20,10 +23,40 @@  SUPPORTED_RELEASES = {
 CURRENT_ACTIVE_DEV_CODENAME = "Wrynose"
 CURRENT_ACTIVE_DEV_VERSION = "6.0"
 CURRENT_ACTIVE_DEV_MAINTAINER = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+CURRENT_ACTIVE_DEV_BITBAKE_MAPPING = "2.18"
 CURRENT_STABLE_BRANCH = "5.3"
 CURRENT_STABLE_MAINTAINER = "Yoann Congal <yoann.congal@smile.fr>"
 
 repo = Repo(GIT_REPO)
+bitbake_repo = Repo(BITBAKE_REPO)
+
+def get_bitbake_mapping(yocto_tag: str) -> str:
+    """
+    Get the bitbake mapping for a yocto project tag ("yocto-X.Y").
+    If the tag does not exist in bitbake, return an empty string.
+    For any tag lower than yocto-3.1 there were no bitbake mappings, return an empty string.
+    """
+    if yocto_tag not in bitbake_repo.tags:
+        return ""
+
+    semver_tag = yocto_tag.replace("yocto-", "")
+    try:
+        semver_tag = semver.VersionInfo.parse(semver_tag)
+    except ValueError:
+        semver_tag = semver.VersionInfo.parse(semver_tag + ".0")
+
+    if semver_tag < semver.VersionInfo(major=3, minor=1, patch=0):
+        return ""
+
+    branches = bitbake_repo.git.branch(
+        "--remotes",
+        "--sort=version:refname",
+        "--contains", yocto_tag,
+        "origin/*.*").splitlines()
+    if not branches:
+        return ""
+
+    return branches[0].strip().replace("origin/", "")
 
 def get_git_tags():
     tagmap = {}
@@ -92,6 +125,8 @@  def get_git_tags():
         status = SUPPORTED_RELEASES.get(branch, "EOL")
         maintainer = CURRENT_STABLE_MAINTAINER if branch in SUPPORTED_RELEASES else "N/A"
 
+        bitbake_mapping = get_bitbake_mapping(tags[0].name)
+
         # Create a dictionary for the series entry
         tag_dict = {
             "series_version": re.sub(r"[^\d\.]", "", tags[0].name),
@@ -103,7 +138,8 @@  def get_git_tags():
             "status": status,
             "download": download,
             "release_notes": release_notes,
-            "maintainer": maintainer
+            "maintainer": maintainer,
+            "bitbake_version": bitbake_mapping,
         }
         tag_list.append(tag_dict)
 
@@ -124,6 +160,7 @@  tags.append(
         "status": "Active Development",
         "download": "",
         "maintainer": CURRENT_ACTIVE_DEV_MAINTAINER,
+        "bitbake_version": CURRENT_ACTIVE_DEV_BITBAKE_MAPPING,
     }
 )
 
diff --git a/scripts/run-dashboard-index b/scripts/run-dashboard-index
index c3fb8fa..c7beca3 100755
--- a/scripts/run-dashboard-index
+++ b/scripts/run-dashboard-index
@@ -16,7 +16,7 @@  scriptdir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
 dest=${DEST:-docs@docs.yoctoproject.org:dashboard/}
 
 cd $builddir
-$scriptdir/release-parser.py $builddir/yocto-docs
+$scriptdir/release-parser.py $builddir/yocto-docs $builddir/repos/bitbake
 $scriptdir/layer-parser.py
 curl --silent --output $scriptdir/dashboard/testresults.json https://git.yoctoproject.org/yocto-testresults/plain/oeselftest/reproducible/qemux86-64/testresults.json