@@ -7,7 +7,7 @@ from buildbot.plugins import *
from yoctoabb import config
from yoctoabb.steps.writelayerinfo import WriteLayerInfo
from yoctoabb.steps.writebbsetupjson import WriteBBSetupJson
-from yoctoabb.steps.runconfig import get_publish_dest, get_publish_resultdir, get_publish_name, RunConfigCheckSteps, TargetPresent
+from yoctoabb.steps.runconfig import get_publish_dest, get_publish_resultdir, get_publish_name, RunConfigCheckSteps, TargetPresent, CheckReleaseDir
from buildbot.process.results import Results, SUCCESS, FAILURE, CANCELLED, WARNINGS, SKIPPED, EXCEPTION, RETRY
from buildbot.process.remotecommand import RemoteCommand
from buildbot.data import resultspec
@@ -317,6 +317,7 @@ def create_parent_builder_factory(buildername, waitname):
mode='incremental',
haltOnFailure=True,
name='Fetch yocto-autobuilder-helper'))
+ factory.addStep(CheckReleaseDir(haltOnFailure=True))
factory.addStep(WriteLayerInfo(name='Write main layerinfo.json', haltOnFailure=True))
factory.addStep(WriteBBSetupJson(name='Write bbsetup-overrides.json', haltOnFailure=True))
factory.addStep(steps.ShellCommand(
@@ -237,3 +237,24 @@ class TargetPresent(shell.ShellCommand):
cmd = yield self.makeRemoteShellCommand()
yield self.runCommand(cmd)
return self.evaluateCommand(cmd)
+
+class CheckReleaseDir(buildstep.BuildStep):
+ name = "Check if release directory already exists"
+ description = ["checking release directory"]
+ descriptionDone = ["checked release directory"]
+
+ def __init__(self, **kwargs):
+ buildstep.BuildStep.__init__(self, **kwargs)
+
+ @defer.inlineCallbacks
+ def run(self):
+ is_release = self.getProperty("is_release", False)
+ deploy_artefacts = self.getProperty("deploy_artefacts", False)
+ if is_release and deploy_artefacts:
+ dest = get_publish_internal(self.build.properties)
+ if dest and os.path.exists(dest):
+ self.descriptionDone = [f"Release directory {dest} already exists!"]
+ yield add_to_log(self, "error", f"Release directory already exists: {dest}\n")
+ return FAILURE
+ return SUCCESS
+