####### CHANGESOURCES
home_dir = os.path.abspath(ini.get("general", "homedir"))
+tree_expire = 0
+
+if ini.has_option("general", "expire"):
+ tree_expire = ini.getint("general", "expire")
repo_url = ini.get("repo", "url")
rsync_src_url = ini.get("rsync", "source_url")
rsync_src_key = ini.get("rsync", "source_password")
+gpg_keyid = None
+gpg_comment = "Unattended build signature"
+gpg_passfile = "/dev/null"
+
+if ini.has_option("gpg", "keyid"):
+ gpg_keyid = ini.get("gpg", "keyid")
+
+if ini.has_option("gpg", "comment"):
+ gpg_comment = ini.get("gpg", "comment")
+
+if ini.has_option("gpg", "passfile"):
+ gpg_passfile = ini.get("gpg", "passfile")
+
+
# find targets
targets = [ ]
+if not os.path.isdir(home_dir+'/source.git'):
+ subprocess.call(["git", "clone", "--depth=1", repo_url, home_dir+'/source.git'])
+
findtargets = subprocess.Popen([home_dir+'/dumpinfo.pl', 'targets'],
stdout = subprocess.PIPE, cwd = home_dir+'/source.git')
from buildbot.steps.source import Git
from buildbot.steps.shell import ShellCommand
from buildbot.steps.shell import SetProperty
+from buildbot.steps.transfer import FileUpload
from buildbot.steps.transfer import FileDownload
+from buildbot.steps.master import MasterShellCommand
from buildbot.process.properties import WithProperties
description = "Finding number of CPUs",
command = ["nproc"]))
+ # expire tree if needed
+ if tree_expire > 0:
+ factory.addStep(FileDownload(
+ mastersrc = "expire.sh",
+ slavedest = "../expire.sh",
+ mode = 0755))
+
+ factory.addStep(ShellCommand(
+ name = "expire",
+ description = "Checking for build tree expiry",
+ command = ["./expire.sh", str(tree_expire)],
+ workdir = ".",
+ haltOnFailure = True,
+ timeout = 2400))
+
# check out the source
factory.addStep(Git(repourl=repo_url, mode='update'))
# description = "Copy the feeds.conf",
# command='''cp ~/feeds.conf ./feeds.conf''' ))
+ # feed
+ factory.addStep(ShellCommand(
+ name = "rmfeedlinks",
+ description = "Remove feed symlinks",
+ command=["rm", "-rf", "package/feeds/"]))
+
# feed
factory.addStep(ShellCommand(
name = "updatefeeds",
# CONFIG_PER_FEED_REPO_ADD_COMMENTED is not set
CONFIG_KERNEL_KALLSYMS=y
CONFIG_COLLECT_KERNEL_DEBUG=y
+CONFIG_TARGET_ALL_PROFILES=y
+CONFIG_TARGET_MULTI_PROFILE=y
+CONFIG_TARGET_PER_DEVICE_ROOTFS=y
EOT''' %(ts[0], ts[0], ts[1]) ))
factory.addStep(ShellCommand(
command = ["make", "defconfig"]
))
- # check arch / libc
+ # check arch
factory.addStep(ShellCommand(
name = "checkarch",
description = "Checking architecture",
haltOnFailure = True
))
- factory.addStep(ShellCommand(
- name = "checklibc",
- description = "Checking libc flavor",
- command = ["grep", "-sq", 'CONFIG_LIBC="musl"', ".config"],
- logEnviron = False,
- want_stdout = False,
- want_stderr = False,
- haltOnFailure = True
- ))
+ # find libc suffix
+ factory.addStep(SetProperty(
+ name = "libc",
+ property = "libc",
+ description = "Finding libc suffix",
+ command = ["sed", "-ne", '/^CONFIG_LIBC=/ { s!^CONFIG_LIBC="\\(.*\\)"!\\1!; s!^musl$!!; s!.\\+!-&!p }', ".config"]))
# install build key
factory.addStep(FileDownload(mastersrc=home_dir+'/key-build', slavedest="key-build", mode=0600))
factory.addStep(ShellCommand(
name = "images",
description = "Building images",
- command=["make", "-j1", "target/install", "V=s"],
+ command=["make", WithProperties("-j%(nproc:~4)s"), "target/install", "V=s"],
+ doStepIf = isChangeBuiltin,
+ haltOnFailure = True
+ ))
+
+ factory.addStep(ShellCommand(
+ name = "checksums",
+ description = "Calculating checksums",
+ command=["make", "-j1", "checksum", "V=s"],
doStepIf = isChangeBuiltin,
haltOnFailure = True
))
+ # sign
+ if gpg_keyid is not None:
+ factory.addStep(MasterShellCommand(
+ name = "signprepare",
+ description = "Preparing temporary signing directory",
+ command = ["mkdir", "-p", "%s/signing" %(home_dir)],
+ haltOnFailure = True
+ ))
+
+ factory.addStep(ShellCommand(
+ name = "signpack",
+ description = "Packing files to sign",
+ command = WithProperties("find bin/targets/%s/%s%%(libc)s/ -mindepth 1 -maxdepth 2 -type f -name sha256sums -print0 -or -name Packages -print0 | xargs -0 tar -czf sign.tar.gz" %(ts[0], ts[1])),
+ haltOnFailure = True
+ ))
+
+ factory.addStep(FileUpload(
+ slavesrc = "sign.tar.gz",
+ masterdest = "%s/signing/%s.%s.tar.gz" %(home_dir, ts[0], ts[1]),
+ haltOnFailure = True
+ ))
+
+ factory.addStep(MasterShellCommand(
+ name = "signfiles",
+ description = "Signing files",
+ command = ["%s/signall.sh" %(home_dir), "%s/signing/%s.%s.tar.gz" %(home_dir, ts[0], ts[1]), gpg_keyid, gpg_passfile, gpg_comment],
+ haltOnFailure = True
+ ))
+
+ factory.addStep(FileDownload(
+ mastersrc = "%s/signing/%s.%s.tar.gz" %(home_dir, ts[0], ts[1]),
+ slavedest = "sign.tar.gz",
+ haltOnFailure = True
+ ))
+
+ factory.addStep(ShellCommand(
+ name = "signunpack",
+ description = "Unpacking signed files",
+ command = ["tar", "-xzf", "sign.tar.gz"],
+ haltOnFailure = True
+ ))
+
# upload
factory.addStep(ShellCommand(
name = "uploadprepare",
factory.addStep(ShellCommand(
name = "targetupload",
description = "Uploading target files",
- command=["rsync", "--delete", "--delay-updates", WithProperties("--partial-dir=.~tmp~%(buildername)s"), "-avz", "bin/targets/%s/%s/" %(ts[0], ts[1]), "%s/targets/%s/%s/" %(rsync_bin_url, ts[0], ts[1])],
+ command=["rsync", "--delete", "--checksum", "--delay-updates", "--partial-dir=.~tmp~%s~%s" %(ts[0], ts[1]), "-avz", WithProperties("bin/targets/%s/%s%%(libc)s/" %(ts[0], ts[1])), "%s/targets/%s/%s/" %(rsync_bin_url, ts[0], ts[1])],
env={'RSYNC_PASSWORD': rsync_bin_key},
haltOnFailure = True,
logEnviron = False
factory.addStep(ShellCommand(
name = "sourceupload",
description = "Uploading source archives",
- command=["rsync", "--delay-updates", WithProperties("--partial-dir=.~tmp~%(buildername)s"), "-avz", "dl/", "%s/" %(rsync_src_url)],
+ command=["rsync", "--checksum", "--delay-updates", "--partial-dir=.~tmp~%s~%s" %(ts[0], ts[1]), "-avz", "dl/", "%s/" %(rsync_src_url)],
env={'RSYNC_PASSWORD': rsync_src_key},
haltOnFailure = True,
logEnviron = False
factory.addStep(ShellCommand(
name = "packageupload",
description = "Uploading package files",
- command=["rsync", "--delete", "--delay-updates", WithProperties("--partial-dir=.~tmp~%(buildername)s"), "-avz", "bin/packages/", "%s/packages/" %(rsync_bin_url)],
+ command=["rsync", "--delete", "--delay-updates", "--partial-dir=.~tmp~%s~%s" %(ts[0], ts[1]), "-avz", "bin/packages/", "%s/packages/" %(rsync_bin_url)],
env={'RSYNC_PASSWORD': rsync_bin_key},
haltOnFailure = False,
logEnviron = False
factory.addStep(ShellCommand(
name = "upload",
description = "Uploading logs",
- command=["rsync", "--delete", "--delay-updates", WithProperties("--partial-dir=.~tmp~%(buildername)s"), "-avz", "logs/", "%s/logs/%s/%s/" %(rsync_bin_url, ts[0], ts[1])],
+ command=["rsync", "--delete", "--delay-updates", "--partial-dir=.~tmp~%s~%s" %(ts[0], ts[1]), "-avz", "logs/", "%s/logs/%s/%s/" %(rsync_bin_url, ts[0], ts[1])],
env={'RSYNC_PASSWORD': rsync_bin_key},
haltOnFailure = False,
alwaysRun = True,
# change any of these to True to enable; see the manual for more
# options
auth=auth.BasicAuth([(ini.get("status", "user"), ini.get("status", "password"))]),
- gracefulShutdown = False,
+ gracefulShutdown = 'auth',
forceBuild = 'auth', # use this to test your slave once it is set up
forceAllBuilds = 'auth',
pingBuilder = False,
irc_pass = ini.get("irc", "password")
irc = words.IRC(irc_host, irc_nick, port = irc_port, password = irc_pass,
- channels = [{ "channel": irc_chan }],
- notify_events = {
- 'exception': 1,
- 'successToFailure': 1,
- 'failureToSuccess': 1
- }
+ channels = [{ "channel": irc_chan }],
+ notify_events = {
+ 'exception': 1,
+ 'successToFailure': 1,
+ 'failureToSuccess': 1
+ }
)
c['status'].append(irc)