[buildbot] phase1: documentation update
LEDE Commits
lede-commits at lists.infradead.org
Mon May 15 08:39:47 PDT 2023
ynezz pushed a commit to buildbot.git, branch master:
https://git.openwrt.org/11286e4718e7e2f30705c60fe09c09c5979d7c9b
commit 11286e4718e7e2f30705c60fe09c09c5979d7c9b
Author: Thibaut VARÈNE <hacks at slashdirt.org>
AuthorDate: Thu Oct 27 20:31:19 2022 +0200
phase1: documentation update
Signed-off-by: Thibaut VARÈNE <hacks at slashdirt.org>
---
phase1/master.cfg | 28 ++++++++++++++++++++++------
1 file changed, 22 insertions(+), 6 deletions(-)
diff --git a/phase1/master.cfg b/phase1/master.cfg
index 21da1a2..0c72ebd 100644
--- a/phase1/master.cfg
+++ b/phase1/master.cfg
@@ -154,6 +154,7 @@ def ini_parse_workers(section):
NetLocks[lockname] = locks.MasterLock(lockname)
log.msg("Configured worker: {}".format(name))
+ # NB: phase1 build factory requires workers to be single-build only
c['workers'].append(Worker(name, password, max_builds = 1, properties = sl_props))
@@ -164,6 +165,7 @@ for section in ini.sections():
if section.startswith("worker "):
ini_parse_workers(ini[section])
+# list of branches in build-priority order
branchNames = [branches[b]["name"] for b in branches]
c['protocols'] = {'pb': {'port': pb_port}}
@@ -272,6 +274,11 @@ c['prioritizeBuilders'] = prioritizeBuilders
targets = set()
def populateTargets():
+ """ fetch a shallow clone of each configured branch in turn:
+ execute dump-target-info.pl and collate the results to ensure
+ targets that only exist in specific branches get built.
+ This takes a while during master startup but is executed only once.
+ """
log.msg("Populating targets, this will take time")
sourcegit = work_dir + '/source.git'
for branch in branchNames:
@@ -296,7 +303,7 @@ def populateTargets():
populateTargets()
# the 'change_source' setting tells the buildmaster how it should find out
-# about source code changes. Here we point to the buildbot clone of pyflakes.
+# about source code changes.
c['change_source'] = []
c['change_source'].append(GitPoller(
@@ -306,9 +313,9 @@ c['change_source'].append(GitPoller(
####### SCHEDULERS
-# Configure the Schedulers, which decide how to react to incoming changes. In this
-# case, just kick off a 'basebuild' build
+# Configure the Schedulers, which decide how to react to incoming changes.
+# Selector for known valid tags
class TagChoiceParameter(BaseParameter):
spec_attributes = ["strict", "choices"]
type = "list"
@@ -322,11 +329,13 @@ class TagChoiceParameter(BaseParameter):
taglist = []
branchvers = []
+ # we will filter out tags that do no match the configured branches
for b in branchNames:
basever = re.search(r'-([0-9]+\.[0-9]+)$', b)
if basever:
branchvers.append(basever[1])
+ # grab tags from remote repository
alltags = subprocess.Popen(
['git', 'ls-remote', '--tags', repo_url],
stdout = subprocess.PIPE)
@@ -339,10 +348,12 @@ class TagChoiceParameter(BaseParameter):
(rev, tag) = line.split()
+ # does it match known format? ('vNN.NN.NN(-rcN)')
tagver = re.search(r'\brefs/tags/(v[0-9]+\.[0-9]+\.[0-9]+(?:-rc[0-9]+)?)$', tag.decode().strip())
- # only list tags matching configured branches
+ # only list valid tags matching configured branches
if tagver and any(tagver[1][1:].startswith(b) for b in branchvers):
+ # if we want a specific tag, ignore all that don't match
if findtag and findtag != tagver[1]:
continue
taglist.append({'rev': rev.decode().strip(), 'tag': tagver[1]})
@@ -454,6 +465,7 @@ c['schedulers'].append(ForceScheduler(
),
properties = [
+ # NB: avoid nesting to simplify processing of properties
util.ChoiceStringParameter(
name = "target",
label = "Build target",
@@ -629,6 +641,8 @@ c['builders'].append(BuilderConfig(
workername = "__local_force_build",
factory = force_factory))
+
+# NB the phase1 build factory assumes workers are single-build only
for target in targets:
ts = target.split('/')
@@ -708,6 +722,7 @@ for target in targets:
factory.addStep(ShellCommand(
name = "fetchrefs",
description = "Fetching Git remote refs",
+ descriptionDone = "Git remote refs fetched",
command = ["git", "fetch", "origin", Interpolate("+refs/heads/%(prop:branch)s:refs/remotes/origin/%(prop:branch)s")],
haltOnFailure = True,
))
@@ -716,7 +731,8 @@ for target in targets:
# Ref: https://web.archive.org/web/20190729224316/http://lists.infradead.org/pipermail/openwrt-devel/2019-June/017809.html
factory.addStep(ShellCommand(
name = "gitverify",
- description = "Ensure that Git HEAD is pointing to a branch or tag",
+ description = "Ensuring that Git HEAD is pointing to a branch or tag",
+ descriptionDone = "Git HEAD is sane",
command = 'git rev-parse --abbrev-ref HEAD | grep -vxqF HEAD || git show-ref --tags --dereference 2>/dev/null | sed -ne "/^$(git rev-parse HEAD) / { s|^.*/||; s|\\^.*||; p }" | grep -qE "^v[0-9][0-9]\\."',
haltOnFailure = True,
))
@@ -805,7 +821,7 @@ for target in targets:
want_stdout = False,
want_stderr = False,
haltOnFailure = True,
- flunkOnFailure = False, # this is not a build FAILURE
+ flunkOnFailure = False, # this is not a build FAILURE - TODO mark build as SKIPPED
))
# find libc suffix
More information about the lede-commits
mailing list