From abdf03d4c2d1b454e6d3dcc771d037a0abe8a7ab Mon Sep 17 00:00:00 2001 From: Philipp Kern Date: Fri, 25 Mar 2011 13:40:14 +0000 Subject: [PATCH] triggers: switch to a signal-based infrastructure --- bin/process-triggers | 46 ++++++++++++++++++++++++++++++++++ bin/trigger-wrapper | 26 ++++++++++--------- triggers/trigger.backports | 2 +- triggers/trigger.debian | 2 +- triggers/trigger.debian-buildd | 2 +- triggers/trigger.edu | 2 +- triggers/trigger.volatile | 2 +- 7 files changed, 65 insertions(+), 17 deletions(-) create mode 100755 bin/process-triggers diff --git a/bin/process-triggers b/bin/process-triggers new file mode 100755 index 0000000..7bae80e --- /dev/null +++ b/bin/process-triggers @@ -0,0 +1,46 @@ +#!/bin/bash +# vim:set et ts=4 sw=4: + +LOCKFILE=/org/wanna-build/triggers/lock + +set -eE + +cleanup() { + rm -rf "$LOCKFILE" +} + +if ! lockfile -0 -r0 "$LOCKFILE" 2>/dev/null +then + # Process already running. + exit 0 +fi + +# Got the lock. +trap cleanup ERR TERM HUP INT QUIT EXIT + +# Do at least one run. +work=1 +while [ $work -eq 1 ] +do + # No further runs unless at least one signal is found. + work=0 + find /org/wanna-build/signals -type f | while read signal + do + # Process it. + work=1 + if [ "$(stat -c '%s' $signal)" -eq 0 ] + then + /org/wanna-build/triggers/trigger.$(basename $signal) + else + cat $signal | \ + (while read args + do + /org/wanna-build/triggers/trigger.$(basename $signal) $args + done) + fi + rm $signal + done +done + +exit 0 + diff --git a/bin/trigger-wrapper b/bin/trigger-wrapper index 4c8a7b2..5208c22 100755 --- a/bin/trigger-wrapper +++ b/bin/trigger-wrapper @@ -2,21 +2,23 @@ [ -n "$SSH_ORIGINAL_COMMAND" ] || exit 1 +trigger_name=$(basename "$1") + set -- $SSH_ORIGINAL_COMMAND -bn=$(basename "$1") -if [ "$bn" = "trigger.daily" ]; then - bin=/org/wanna-build/trigger.daily -elif [ "$bn" = "trigger.often" ]; then - bin=/org/wanna-build/trigger.often -elif [ "$bn" = "trigger.security" ]; then - bin=/org/wanna-build/trigger.security +shift +args="$*" + +echo "$(date): $trigger_name | $args" >> /org/wanna-build/db/signal.log + +if [ ! -z "$args" ] +then + # Append because we might get triggered for multiple suites. + # (This is mainly for security currently.) + echo $args >> /org/wanna-build/signals/$trigger_name else - exit 1 + touch /org/wanna-build/signals/$trigger_name fi -shift - -[ -f "$bin" -a -x "$bin" ] || exit 1 +exit 0 -exec $bin diff --git a/triggers/trigger.backports b/triggers/trigger.backports index 58d20f5..a90627c 100755 --- a/triggers/trigger.backports +++ b/triggers/trigger.backports @@ -59,6 +59,6 @@ main() { cleanup } -main & +main exit 0 diff --git a/triggers/trigger.debian b/triggers/trigger.debian index 88c24fd..f8e1d44 100755 --- a/triggers/trigger.debian +++ b/triggers/trigger.debian @@ -86,6 +86,6 @@ main() { do_stats } -main & +main exit 0 diff --git a/triggers/trigger.debian-buildd b/triggers/trigger.debian-buildd index 0bee170..dacaad0 100755 --- a/triggers/trigger.debian-buildd +++ b/triggers/trigger.debian-buildd @@ -52,6 +52,6 @@ main() { cleanup } -main & +main exit 0 diff --git a/triggers/trigger.edu b/triggers/trigger.edu index 654b177..4ff8861 100755 --- a/triggers/trigger.edu +++ b/triggers/trigger.edu @@ -41,6 +41,6 @@ main() { cleanup } -main & +main exit 0 diff --git a/triggers/trigger.volatile b/triggers/trigger.volatile index a4e874e..2ee4928 100755 --- a/triggers/trigger.volatile +++ b/triggers/trigger.volatile @@ -46,6 +46,6 @@ main() { cleanup } -main & +main exit 0 -- 2.39.2