diff mbox series

[yocto-autobuilder2] builders: Write out an overrides file for bitbake-setup

Message ID 20250926165749.31002-1-richard.purdie@linuxfoundation.org
State New
Headers show
Series [yocto-autobuilder2] builders: Write out an overrides file for bitbake-setup | expand

Commit Message

Richard Purdie Sept. 26, 2025, 4:57 p.m. UTC
bitbake-setup can take an overrides file for repository information. Write
this out into all builds.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 builders.py               |  2 +
 steps/writebbsetupjson.py | 83 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 85 insertions(+)
 create mode 100644 steps/writebbsetupjson.py
diff mbox series

Patch

diff --git a/builders.py b/builders.py
index bf36c755..e519562e 100644
--- a/builders.py
+++ b/builders.py
@@ -121,6 +121,7 @@  def create_builder_factory():
     f.addStep(TargetPresent())
     f.addStep(steps.SetProperties(properties=ensure_props_set))
     f.addStep(WriteLayerInfo(name='Write main layerinfo.json', haltOnFailure=True))
+    f.addStep(WriteBBSetupJson(name='Write bbsetup-overrides.json', haltOnFailure=True))
     f.addStep(steps.ShellCommand(
         command=[util.Interpolate("%(prop:builddir)s/yocto-autobuilder-helper/scripts/shared-repo-unpack"),
                  util.Interpolate("%(prop:builddir)s/layerinfo.json"),
@@ -298,6 +299,7 @@  def create_parent_builder_factory(buildername, waitname):
         haltOnFailure=True,
         name='Fetch yocto-autobuilder-helper'))
     factory.addStep(WriteLayerInfo(name='Write main layerinfo.json', haltOnFailure=True))
+    factory.addStep(WriteBBSetupJson(name='Write bbsetup-overrides.json', haltOnFailure=True))
     factory.addStep(steps.ShellCommand(
         command=[
             util.Interpolate("%(prop:builddir)s/yocto-autobuilder-helper/scripts/prepare-shared-repos"),
diff --git a/steps/writebbsetupjson.py b/steps/writebbsetupjson.py
new file mode 100644
index 00000000..ae55d01a
--- /dev/null
+++ b/steps/writebbsetupjson.py
@@ -0,0 +1,83 @@ 
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Author: Richard Purdie <richard.purdie@linuxfoundation.org>
+#
+
+from twisted.internet import defer
+from buildbot.process import buildstep
+import json
+import os
+
+import config
+
+mappings = {
+    "oecore" : "openembedded-core",
+}
+
+class WriteBBSetupJson(buildstep.ShellMixin, buildstep.BuildStep):
+    name = "WriteBBSetupJson"
+
+    def __init__(self, **kwargs):
+        buildstep.BuildStep.__init__(self, **kwargs)
+
+    def generateSetupJson(self):
+        setupdata = {}
+        setupdata["description"] = "Autobuilder generated bitbake setup json config"
+        setupdata["version"] = "1.0"
+        setupdata["sources"] = {}
+
+        writerepos = config.buildertorepos.get(self.getProperty("buildername"))
+        if not writerepos:
+            writerepos = config.buildertorepos["default"]
+
+        for repo in writerepos:
+            # poky is only used for older releases which don't use bitbake-setup
+            if repo == "poky":
+                continue
+
+            url = self.getProperty("repo_{}".format(repo))
+            branch = self.getProperty("branch_{}".format(repo))
+            revision = self.getProperty("commit_{}".format(repo))
+
+            if revision and revision != "HEAD":
+                rev = revision
+            else:
+                rev = branch
+
+            reponame = repo
+            if repo in mappings:
+                reponame = mappings[repo]
+            repodict = {
+                "git-remote": {
+                    "remotes" : {
+                        "origin": {
+                            "uri" : url
+                        }
+                    },
+                   "rev" : rev
+                }
+            }
+            setupdata["sources"] = {reponame : repodict}
+
+        return json.dumps(setupdata, sort_keys=True, indent=4,
+                          separators=(',', ': '))
+
+    @defer.inlineCallbacks
+    def run(self):
+        repojson = self.generateSetupJson()
+        layerinfo = os.path.join(self.getProperty("builddir"),
+                                 "bbsetup-overrides.json")
+        writerepos = "printf '%s' > %s" % (repojson, layerinfo)
+        cmd = yield self.makeRemoteShellCommand(
+            command=writerepos)
+        yield self.runCommand(cmd)
+        return cmd.results()
+
+
+@defer.inlineCallbacks
+def run(self):
+    cmd = RemoteCommand(args)
+    log = yield self.addLog('output')
+    cmd.useLog(log, closeWhenFinished=True)
+    yield self.runCommand(cmd)