[yocto] [yocto-autobuilder][PATCH v1 4/4] GetDeployDir.py/PublishArtifacts.py: get deploy dir from bitbake

Flanagan, Elizabeth elizabeth.flanagan at intel.com
Fri May 16 10:11:18 PDT 2014


Ok, so looking at this a bit more and I think we need to look at how
we set up the deploydir in PublishArtifacts a bit more.

I think what we can do here is pull the functionality that we have in
getDeployNames out, and put it into GetDeployDir (layerversion here
matters as the default deploy for oe-core changes at LAYERVERSION_core
=3) . So, yeah, if you could resubmit that I think we can pull the
last patch in. The other three are under test right now.

Thanks,

-b

On Thu, May 8, 2014 at 9:44 AM,  <stefan at agner.ch> wrote:
> From: Stefan Agner <stefan at agner.ch>
>
> Since the deploy dir is configureable (also through TMPDIR), we
> need to have a more generic variant to get that path. Also the
> Ångstrom distribution adds "-eglibc" to the TMPDIR. Hence, the
> safest way to get the deployment dir is to parse buildbots
> environment.
>
> Signed-off-by: Stefan Agner <stefan at agner.ch>
> ---
>  .../autobuilder/buildsteps/GetDeployDir.py         | 47 +++++++++++++++++++++
>  .../autobuilder/buildsteps/PublishArtifacts.py     | 48 ++++++++++++----------
>  2 files changed, 73 insertions(+), 22 deletions(-)
>  create mode 100644 lib/python2.7/site-packages/autobuilder/buildsteps/GetDeployDir.py
>
> diff --git a/lib/python2.7/site-packages/autobuilder/buildsteps/GetDeployDir.py b/lib/python2.7/site-packages/autobuilder/buildsteps/GetDeployDir.py
> new file mode 100644
> index 0000000..944fcf0
> --- /dev/null
> +++ b/lib/python2.7/site-packages/autobuilder/buildsteps/GetDeployDir.py
> @@ -0,0 +1,47 @@
> +'''
> +Created on Mai 8, 2014
> +
> +__author__ = "Stefan Agner"
> +__copyright__ = "Copyright 2014, Toradex AG"
> +__credits__ = ["Stefan Agner"]
> +__license__ = "GPL"
> +__version__ = "2.0"
> +__maintainer__ = "Stefan Agner"
> +__email__ = "stefan at agner.ch"
> +'''
> +from buildbot.steps.shell import ShellCommand
> +from buildbot.status import progress
> +from buildbot.status.results import SUCCESS, FAILURE, WARNINGS
> +from buildbot.process.properties import WithProperties
> +from twisted.python import log
> +from autobuilder.config import *
> +
> +class GetDeployDir(ShellCommand):
> +    haltOnFailure = False
> +    flunkOnFailure = True
> +    name = "GetDeployDir"
> +    def __init__(self, factory, argdict=None, **kwargs):
> +        for k, v in argdict.iteritems():
> +            setattr(self, k, v)
> +        self.description = "Get Deploy Directory"
> +        self.deploydir = None
> +        ShellCommand.__init__(self, **kwargs)
> +
> +    def start(self):
> +        cmd = '. ./oe-init-build-env; bitbake -e | grep "^DEPLOY_DIR="'
> +        self.command = cmd
> +        ShellCommand.start(self)
> +
> +    def commandComplete(self, cmd):
> +        if cmd.didFail():
> +            return
> +        result = cmd.logs['stdio'].getText()
> +        if "=" not in result:
> +            self.finished(FAILURE)
> +        param, value = result.split("=")
> +        deploydir = value.replace('"', '').strip()
> +        self.setProperty('deploydir', deploydir, "Setting Deploy Directory")
> +        self.finished(SUCCESS)
> +
> +    def getText(self, cmd, results):
> +        return ShellCommand.getText(self, cmd, results)
> diff --git a/lib/python2.7/site-packages/autobuilder/buildsteps/PublishArtifacts.py b/lib/python2.7/site-packages/autobuilder/buildsteps/PublishArtifacts.py
> index ebc761f..303df36 100644
> --- a/lib/python2.7/site-packages/autobuilder/buildsteps/PublishArtifacts.py
> +++ b/lib/python2.7/site-packages/autobuilder/buildsteps/PublishArtifacts.py
> @@ -19,10 +19,10 @@ class PublishArtifacts(ShellCommand):
>
>      haltOnFailure = False
>      flunkOnFailure = True
> -    name = "Publishing Artifacts"
> +    name = "PublishArtifacts"
> +    description = "Publishing Artifacts"
>      def __init__(self, factory, argdict=None, **kwargs):
>          self.factory = factory
> -        self.description = "Publishing Artifacts"
>          self.slavedir=os.path.join(os.path.join(YOCTO_ABBASE, "yocto-slave"))
>          for k, v in argdict.iteritems():
>              if type(v) is bool:
> @@ -42,10 +42,14 @@ class PublishArtifacts(ShellCommand):
>          self.layerversion_yoctobsp = self.getProperty("layerversion_yoctobsp")
>          self.layerversion_yocto = self.getProperty("layerversion_yocto")
>          self.layerversion_core = self.getProperty("layerversion_core")
> +        self.deploydir = self.getProperty("deploydir")
>          log.msg(layerversion_yoctobsp)
> -        self.basedir=os.path.join(os.path.join(
> -                                    self.slavedir, buildername),
> -                                    "build/build/")
> +        self.basedir = os.path.join(self.slavedir, buildername, "build/build/")
> +
> +        # Deploydir might not be set in case the step did not run, fallback to default
> +        if self.deploydir is None:
> +            self.deploydir = os.path.join(self.basedir, "tmp/deploy/")
> +
>          command=""
>          DATESTAMP=datetime.datetime.now().strftime("%Y%m%d")
>          if str(os.environ.get('PUBLISH_BUILDS')) == "True":
> @@ -70,17 +74,17 @@ class PublishArtifacts(ShellCommand):
>                  if artifact == "adt-installer":
>                      command=command+"mkdir -p " + os.path.join(DEST, ADT_INST_PUBLISH_DIR) + ";"
>                      command=command+"cp -R --no-dereference --preserve=links " + \
> -                                    os.path.join(self.basedir, "tmp/deploy/sdk/") + \
> +                                    os.path.join(self.deploydir, "sdk/") + \
>                                      "*adt* " + os.path.join(DEST, ADT_INST_PUBLISH_DIR) + ";"
>                  elif artifact == "adt-installer-QA":
>                      command=command+"mkdir -p " + os.path.join(DEST, ADTQA_INST_PUBLISH_DIR) + ";"
>                      command=command+"cp -R --no-dereference --preserve=links " + \
> -                                    os.path.join(self.basedir, "tmp/deploy/sdk/") + \
> +                                    os.path.join(self.deploydir, "sdk/") + \
>                                      "*adt* " + os.path.join(DEST, ADTQA_INST_PUBLISH_DIR)+ ";"
>                  elif artifact == "adtrepo-dev":
>                      adt_dev_dest= os.environ.get("ADTREPO_DEV_PATH") + "/" + distroversion + "-" + got_revision_poky + '-' + self.getProperty("branch_poky")
>                      command=command+"mkdir -p " + adt_dev_dest + "/adt-ipk;"
> -                    command=command+"rsync -av " + os.path.join(self.basedir, "tmp/deploy/ipk/") + " " +  adt_dev_dest + "/adt-ipk;"
> +                    command=command+"rsync -av " + os.path.join(self.deploydir, "ipk/") + " " +  adt_dev_dest + "/adt-ipk;"
>                      command=command+"rm -rf " + adt_dev_dest + "/rootfs; mkdir -p " + adt_dev_dest + "/rootfs;"
>                      command=command+"for x in `ls " + DEST + "/machines/qemu/|grep -v tiny`; do ln -s " + DEST + "/machines/qemu/$x " + adt_dev_dest + "/rootfs/$x; done;"
>                      if self.layerversion_yocto is not None and int(self.layerversion_yocto) < 2:
> @@ -101,49 +105,49 @@ class PublishArtifacts(ShellCommand):
>                      command=command+"mkdir -p " + DEST + "/" + BA_PUBLISH_DIR + ";"
>                      if self.layerversion_core is not None and int(self.layerversion_core) > 2:
>                          command=command+"cp -R --no-dereference --preserve=links " + \
> -                                        os.path.join(self.basedir, "tmp/deploy/images/qemux86-64/*.zip") + \
> +                                        os.path.join(self.deploydir, "images/qemux86-64/*.zip") + \
>                                          " " + DEST + "/" + BA_PUBLISH_DIR + ";"
>                      else:
>                          command=command+"cp -R --no-dereference --preserve=links " + \
> -                                        os.path.join(self.basedir, "tmp/deploy/images/*.zip") + \
> +                                        os.path.join(self.deploydir, "images/*.zip") + \
>                                          " " + DEST + "/" + BA_PUBLISH_DIR + ";"
>                  elif artifact == "buildtools-tarball":
>                      command=command+"mkdir -p " + DEST + "/buildtools;"
>                      command=command+"cp -R --no-dereference --preserve=links " + \
> -                                    os.path.join(self.basedir, "tmp/deploy/sdk/*.sh") + \
> +                                    os.path.join(self.deploydir, "sdk/*.sh") + \
>                                      " " + DEST + "/buildtools;"
>                  elif artifact == "rpm":
>                      command=command+"mkdir -p " + os.path.join(DEST, RPM_PUBLISH_DIR) + ";"
>                      command=command+"cp -R --no-dereference --preserve=links " + \
> -                                    os.path.join(self.basedir, "tmp/deploy/rpm/* ") + \
> +                                    os.path.join(self.deploydir, "rpm/* ") + \
>                                      os.path.join(DEST, RPM_PUBLISH_DIR) + ";"
>                  elif artifact == "deb":
>                      command=command+"mkdir -p " + os.path.join(DEST, DEB_PUBLISH_DIR) + ";"
>                      command=command+"cp -R --no-dereference --preserve=links " + \
> -                                    os.path.join(self.basedir, "tmp/deploy/deb/* ") + \
> +                                    os.path.join(self.deploydir, "deb/* ") + \
>                                      os.path.join(DEST, DEB_PUBLISH_DIR) + ";"
>                  elif artifact == "ipk":
>                      command=command+"mkdir -p " + os.path.join(DEST, IPK_PUBLISH_DIR) + ";"
>                      command=command+"cp -R --no-dereference --preserve=links " + \
> -                                    os.path.join(self.basedir, "tmp/deploy/ipk/* ") + \
> +                                    os.path.join(self.deploydir, "ipk/* ") + \
>                                      os.path.join(DEST, IPK_PUBLISH_DIR) + ";"
>                  elif artifact == "toolchain":
>                      command=command+"mkdir -p " + os.path.join(DEST, X86TC_PUBLISH_DIR) + ";"
>                      command=command+"cp -R --no-dereference --preserve=links " + \
> -                                    os.path.join(self.basedir, "tmp/deploy/sdk/poky-eglibc-i686* ") + \
> +                                    os.path.join(self.deploydir, "sdk/poky-eglibc-i686* ") + \
>                                      os.path.join(DEST, X86TC_PUBLISH_DIR) + ";"
>                      command=command+"mkdir -p " + os.path.join(DEST, X8664TC_PUBLISH_DIR) + ";"
>                      command=command+"cp -R --no-dereference --preserve=links " + \
> -                                    os.path.join(self.basedir, "tmp/deploy/sdk/poky-eglibc-x86_64* ") + \
> +                                    os.path.join(self.deploydir, "sdk/poky-eglibc-x86_64* ") + \
>                                      os.path.join(DEST, X8664TC_PUBLISH_DIR) + ";"
>                  elif artifact == "oe-toolchain":
>                      command=command+"mkdir -p " + os.path.join(DEST, X86TC_PUBLISH_DIR) + ";"
>                      command=command+"cp -R --no-dereference --preserve=links " + \
> -                                    os.path.join(self.basedir, "tmp/deploy/sdk/oecore-i686* ") + \
> +                                    os.path.join(self.deploydir, "sdk/oecore-i686* ") + \
>                                      os.path.join(DEST, X86TC_PUBLISH_DIR) + ";"
>                      command=command+"mkdir -p " + os.path.join(DEST, X8664TC_PUBLISH_DIR) + ";"
>                      command=command+"cp -R --no-dereference --preserve=links " + \
> -                                    os.path.join(self.basedir, "tmp/deploy/sdk/oecore-x86_64* ") + \
> +                                    os.path.join(self.deploydir, "sdk/oecore-x86_64* ") + \
>                                      os.path.join(DEST, X8664TC_PUBLISH_DIR) + ";"
>
>                  elif "qemu" in artifact:
> @@ -162,11 +166,11 @@ class PublishArtifacts(ShellCommand):
>                      command=command+"mkdir -p " + DEST + "/" + QEMU_PUBLISH_DIR + "/qemu-tiny;"
>                      if self.layerversion_core is not None and int(self.layerversion_core) > 2:
>                          command=command+"cp -R --no-dereference --preserve=links " + \
> -                                        os.path.join(self.basedir, "tmp/deploy/images/qemux86/* ") + \
> +                                        os.path.join(self.deploydir, "images/qemux86/* ") + \
>                                          " " + DEST + "/" + QEMU_PUBLISH_DIR + "/qemu-tiny;"
>                      else:
>                          command=command+"cp -R --no-dereference --preserve=links " + \
> -                                        os.path.join(self.basedir, "tmp/deploy/images/*") + \
> +                                        os.path.join(self.deploydir, "images/*") + \
>                                          DEST + "/" + QEMU_PUBLISH_DIR + "/qemu-tiny;"
>                  elif artifact == "conf":
>                      artifact_name, deploy_image_dir = self.getDeployNames(artifact, buildername)
> @@ -208,9 +212,9 @@ class PublishArtifacts(ShellCommand):
>          if "-lsb" in buildername:
>              artifact_name = artifact_name + "-lsb"
>          if self.layerversion_core is not None and int(self.layerversion_core) > 2:
> -            deploy_dir_image = os.path.join(os.path.join(self.basedir, "tmp/deploy/images/"), artifact)
> +            deploy_dir_image = os.path.join(os.path.join(self.deploydir, "images/"), artifact)
>          else:
> -            deploy_dir_image = os.path.join(self.basedir, "tmp/deploy/images/")
> +            deploy_dir_image = os.path.join(self.deploydir, "images/")
>          return artifact_name, deploy_dir_image
>
>      def describe(self, done=False):
> --
> 1.9.0
>



-- 
Elizabeth Flanagan
Yocto Project
Build and Release



More information about the yocto mailing list