Skip to content

Commit 57b1168

Browse files
committed
services/nomad/build/build-rsyncd,buildbot: improve sync/index of packages
* to prevent re-syncing packages between each package build, use --compare-dest * to prevent races with syncing and signing, update the repo as a pre-xfer script and collect the log to show in the builder output
1 parent 2eaf817 commit 57b1168

3 files changed

Lines changed: 63 additions & 8 deletions

File tree

services/nomad/build/build-rsyncd.nomad

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ job "build-rsyncd" {
6565
}
6666

6767
template {
68-
data = file("rsync-post-xfer")
69-
destination = "local/rsync-post-xfer"
68+
data = file("rsync-update-repo")
69+
destination = "local/rsync-update-repo"
7070
perms = "0755"
7171
}
7272

@@ -114,8 +114,13 @@ EOF
114114
[incoming-${template.value}]
115115
path = /incoming/${template.value}
116116
auth users = buildsync:rw
117-
filter = + */ + *.${template.value}.xbps - *.sig - *.sig2 - *-repodata* - .*
118-
post-xfer exec = /local/rsync-post-xfer
117+
filter = + */ + *.${template.value}.xbps - *.sig - *.sig2 - *-repodata* - .* - *.log
118+
119+
[updaterepo-${template.value}]
120+
path = /incoming/${template.value}
121+
auth users = buildsync:rw
122+
filter = + update-repo.log - * - .*
123+
pre-xfer exec = /local/rsync-update-repo
119124
EOF
120125
destination = "local/rsyncd.conf.d/${template.value}.conf.inc"
121126
}

services/nomad/build/buildbot.cfg

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,10 +218,17 @@ def make_xbps_bulk_cmd(props):
218218

219219
@util.renderer
220220
def make_rsync_cmd(props):
221+
target = props.getProperty('target')
222+
if target.startswith("aarch64"):
223+
final_dest = "/mirror/current/aarch64"
224+
elif target.endswith("musl"):
225+
final_dest = "/mirror/current/musl"
226+
else:
227+
final_dest = "/mirror/current"
221228
return ['bash', '-e', '-c',
222-
util.Interpolate("""
229+
util.Interpolate(f"""
223230
echo "=> Syncing packages to the shadow repository..."
224-
rsync -vurk --delete-after \
231+
rsync -vurk --delete-after --compare-dest={final_dest} \
225232
--filter='+ */' --filter='+ *.%(prop:target)s.xbps' \
226233
--filter='- .*' --filter='- *' \
227234
--password-file=/secrets/rsync/password /hostdir/binpkgs/ \
@@ -235,6 +242,30 @@ esac
235242
""")]
236243

237244

245+
@util.renderer
246+
def make_update_repo_cmd(props):
247+
return ['bash', '-e', '-c',
248+
util.Interpolate(f"""
249+
echo "=> Moving packages to the shadow repository..."
250+
rsync -vurk --delete-after \
251+
--filter='+ update-repo.log' --filter='- .*' --filter='- *' \
252+
--password-file=/secrets/rsync/password \
253+
{{ range nomadService 1 $allocID "build-rsyncd" -}}
254+
rsync://buildsync@{{ .Address }}:{{ .Port }}/updaterepo-%(prop:target)s ./update-repo.log
255+
{{ end -}}
256+
case "$?" in
257+
0|23|24)
258+
cat ./update-repo.log
259+
exit 0
260+
;;
261+
*)
262+
cat ./update-repo.log
263+
exit 1
264+
;;
265+
esac
266+
""")]
267+
268+
238269
@util.renderer
239270
def make_clean_cmd(props):
240271
return [
@@ -258,6 +289,11 @@ def build_packages(props):
258289
logname=f'sync:{p}',
259290
haltOnFailure=True,
260291
))
292+
cmds.append(util.ShellArg(
293+
command=make_update_repo_cmd,
294+
logname=f'update-repo:{p}',
295+
haltOnFailure=True,
296+
))
261297
if cmds:
262298
cmds.append(util.ShellArg(
263299
command=['make', 'clean'],
@@ -372,6 +408,18 @@ factory.addStep(steps.ShellCommand(
372408
timeout=14400,
373409
))
374410

411+
factory.addStep(steps.ShellCommand(
412+
command=make_update_repo_cmd,
413+
name='sync_packages',
414+
description='updating shadow repository with built packages',
415+
descriptionDone='updated shadow repository with built packages',
416+
alwaysRun=True,
417+
logEnviron=False,
418+
usePTY=True,
419+
workdir=builddir(),
420+
timeout=14400,
421+
))
422+
375423
factory.addStep(steps.ShellCommand(
376424
command=make_clean_cmd,
377425
name='clean_packages',
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#!/bin/sh
22

3-
set -e
3+
set -ex
4+
5+
exec >"$RSYNC_MODULE_PATH"/update-repo.log 2>&1
46

57
TGT_BASE="/mirror/current"
68

@@ -46,6 +48,6 @@ case "$ARCH" in
4648
esac
4749

4850
# clean up incoming
49-
rm -r "${RSYNC_MODULE_PATH:?}"/*
51+
rm -r "${RSYNC_MODULE_PATH:?}"/*.xbps
5052

5153
exit 0

0 commit comments

Comments
 (0)