[PATCH 1/3] steps: avoid shell when writing repo metadata

Anders Heimer <[email protected]>
Newsgroups org.yoctoproject.lists.yocto-patches
Message-ID <[email protected]>
Use Buildbot StringDownload for repo metadata JSON instead of shell
printf. This transfers scheduler-supplied repo values as file content
without shell interpretation.

AI-Generated: Claude Opus 4.6 <[email protected]>
Signed-off-by: Anders Heimer <[email protected]>
---
 steps/writebbsetupjson.py | 19 +++++++------------
 steps/writelayerinfo.py   | 19 +++++++------------
 2 files changed, 14 insertions(+), 24 deletions(-)

diff --git a/steps/writebbsetupjson.py b/steps/writebbsetupjson.py
index da8d434..e1f1463 100644
--- a/steps/writebbsetupjson.py
+++ b/steps/writebbsetupjson.py
@@ -5,9 +5,8 @@
 #
 
 from twisted.internet import defer
-from buildbot.process import buildstep
+from buildbot.plugins import steps
 import json
-import os
 
 from yoctoabb import config
 
@@ -15,11 +14,11 @@ mappings = {
     "oecore" : "openembedded-core",
 }
 
-class WriteBBSetupJson(buildstep.ShellMixin, buildstep.BuildStep):
+class WriteBBSetupJson(steps.StringDownload):
     name = "WriteBBSetupJson"
 
     def __init__(self, **kwargs):
-        buildstep.BuildStep.__init__(self, **kwargs)
+        super().__init__(s="", workerdest="bbsetup-overrides.json", **kwargs)
 
     def generateSetupJson(self):
         setupdata = {}
@@ -66,14 +65,10 @@ class WriteBBSetupJson(buildstep.ShellMixin, buildstep.BuildStep):
 
     @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()
+        self.s = self.generateSetupJson()
+        self.workdir = self.getProperty("builddir")
+        result = yield super().run()
+        return result
 
 
 @defer.inlineCallbacks
diff --git a/steps/writelayerinfo.py b/steps/writelayerinfo.py
index a0669bd..009e9fc 100644
--- a/steps/writelayerinfo.py
+++ b/steps/writelayerinfo.py
@@ -3,18 +3,17 @@
 #
 
 from twisted.internet import defer
-from buildbot.process import buildstep
+from buildbot.plugins import steps
 import json
-import os
 
 from yoctoabb import config
 
 
-class WriteLayerInfo(buildstep.ShellMixin, buildstep.BuildStep):
+class WriteLayerInfo(steps.StringDownload):
     name = "WriteLayerInfo"
 
     def __init__(self, **kwargs):
-        buildstep.BuildStep.__init__(self, **kwargs)
+        super().__init__(s="", workerdest="layerinfo.json", **kwargs)
 
     def generateLayerInfo(self):
         layerinfo = {}
@@ -34,14 +33,10 @@ class WriteLayerInfo(buildstep.ShellMixin, buildstep.BuildStep):
 
     @defer.inlineCallbacks
     def run(self):
-        repojson = self.generateLayerInfo()
-        layerinfo = os.path.join(self.getProperty("builddir"),
-                                 "layerinfo.json")
-        writerepos = "printf '%s' > %s" % (repojson, layerinfo)
-        cmd = yield self.makeRemoteShellCommand(
-            command=writerepos)
-        yield self.runCommand(cmd)
-        return cmd.results()
+        self.s = self.generateLayerInfo()
+        self.workdir = self.getProperty("builddir")
+        result = yield super().run()
+        return result
 
 
 @defer.inlineCallbacks
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.