#!/usr/bin/env python3 # # Iterate over a set of configurations from json.conf, calling setup-config for each one, then running the build. # # Called with $1 - The 'nightly' target the autobuilder is running # $2 - The target build directory to configure # $3 - The poky branch name the build is running on # $4 - The name of the repository the build is running on # $5 - The directory to publish sstate into # $6 - A build-appliance SRCREV to use # import json import os import sys import subprocess import errno import utils if len(sys.argv) != 7: print("Incorrect number of parameters, please call as %s ") sys.exit(1) target = sys.argv[1] builddir = sys.argv[2] branchname = sys.argv[3] reponame = sys.argv[4] sstate_release = sys.argv[5] buildappsrcrev = sys.argv[6] ourconfig = utils.loadconfig(__file__) # Find out the number of steps this target has maxsteps = 1 if target in ourconfig['overrides']: for v in ourconfig['overrides'][target]: if v.startswith("step"): n = int(v[4:]) if n <= maxsteps: continue maxsteps = n utils.printheader("Target task %s has %d steps" % (target, maxsteps)) finalret = 0 def flush(): sys.stdout.flush() sys.stderr.flush() def bitbakecmd(builddir, cmd): global finalret flush() ret = subprocess.call(". ./oe-init-build-env; %s" % cmd, shell=True, cwd=builddir + "/..") if ret: utils.printheader("ERROR: Command %s failed with exit code %d, see errors above." % (cmd, ret)) finalret = 1 for stepnum in range(maxsteps): # Add any layers specified layers = utils.getconfiglist("ADDLAYER", ourconfig, target, stepnum + 1) for layer in layers: bitbakecmd(builddir, "bitbake-layers add-layer %s" % layer) # Generate the configuration files needed for this step flush() subprocess.check_call([scriptsdir + "/setup-config", target, str(stepnum), builddir, branchname, reponame, sstate_release, buildappsrcrev]) # Execute the targets for this configuration targets = utils.getconfigvar("BBTARGETS", ourconfig, target, stepnum + 1) if targets: utils.printheader("Running bitbake %s" % targets) bitbakecmd(builddir, "bitbake %s" % targets) # Execute the sanity targets for this configuration sanitytargets = utils.getconfigvar("SANITYTARGETS", ourconfig, target, stepnum + 1) if sanitytargets: utils.printheader("Running bitbake %s" % sanitytargets) bitbakecmd(builddir, "checkvnc; DISPLAY=:1 bitbake %s" % sanitytargets) # Remove any layers we added for layer in layers: bitbakecmd(builddir, "bitbake-layers remove-layer %s" % layer) # Run any extra commands specified cmds = utils.getconfiglist("EXTRACMDS", ourconfig, target, stepnum + 1) for cmd in cmds: bitbakecmd(builddir, cmd) sys.exit(finalret)