From: Jo-Philipp Wich Date: Sun, 30 Jun 2019 18:24:38 +0000 (+0200) Subject: phase2: move cleanup.sh to shared script directory X-Git-Tag: v1~96 X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=290971a51545803e9f5625d75c67f7f98bd05583;p=buildbot.git phase2: move cleanup.sh to shared script directory Signed-off-by: Jo-Philipp Wich --- diff --git a/phase2/cleanup.sh b/phase2/cleanup.sh deleted file mode 100755 index 2af7b9f..0000000 --- a/phase2/cleanup.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash - -export LC_ALL=C - -buildbot_url="$1" -current_slave="$2" -current_builder="$3" -current_mode="$4" - -running_builders="$(wget -qO- "${buildbot_url%/}/json/slaves/$current_slave?as_text=1" | sed -ne 's,^.*"builderName": "\(.*\)".*$,\1,p')" - -find /tmp/ -maxdepth 1 -mtime +1 '(' -name 'npm-*' -or -name 'jsmake-*' ')' -print0 | xargs -0 -r rm -vr - -is_running() { - local running_builder - for running_builder in $running_builders; do - if [ "${running_builder//\//_}" = "${1//\//_}" ]; then - return 0 - fi - done - return 1 -} - -do_cleanup() { - printf "Cleaning up '$current_builder' work directory" - - rm -f cleanup.sh - rm -vrf sdk/ | while read entry; do - case "$entry" in *directory:*) - printf "." - esac - done - - echo "" -} - -# -# Sanity check, current builder should be in running builders list -# - -if ! is_running "$current_builder"; then - echo "Current builder '$current_builder' not found in current builders list, aborting cleanup." - exit 1 -fi - - -# -# Clean up leftovers -# - -if [ "$current_mode" = full ]; then -( - if ! flock -x -w 2700 200; then - echo "Unable to obtain exclusive lock, aborting cleanup." - exit 1 - fi - - for build_dir in ../../*; do - - build_dir="$(readlink -f "$build_dir")" - - if [ -z "$build_dir" ] || [ ! -d "$build_dir/build/sdk" ]; then - continue - fi - - current_builder="${build_dir##*/}" - - if is_running "$current_builder"; then - echo "Skipping currently active '$current_builder' work directory." - continue - fi - - ( - cd "$build_dir/build" - - #if [ -n "$(git status --porcelain | grep -v update_hostkey.sh | grep -v cleanup.sh)" ]; then - if [ -d sdk ]; then - do_cleanup - else - echo "Skipping clean '$current_builder' work directory." - fi - ) - done - -) 200>../../cleanup.lock - -# -# Clean up current build -# - -else - do_cleanup -fi - -exit 0 diff --git a/phase2/master.cfg b/phase2/master.cfg index cfa7002..2c0f730 100644 --- a/phase2/master.cfg +++ b/phase2/master.cfg @@ -279,7 +279,10 @@ for arch in arches: command = ["nproc"])) # prepare workspace - factory.addStep(FileDownload(mastersrc="cleanup.sh", slavedest="cleanup.sh", mode=0755)) + factory.addStep(FileDownload( + mastersrc = scripts_dir + '/cleanup-phase2.sh', + slavedest = "cleanup.sh", + mode = 0755)) if not persistent: factory.addStep(ShellCommand( diff --git a/scripts/cleanup-phase2.sh b/scripts/cleanup-phase2.sh new file mode 100755 index 0000000..2af7b9f --- /dev/null +++ b/scripts/cleanup-phase2.sh @@ -0,0 +1,95 @@ +#!/bin/bash + +export LC_ALL=C + +buildbot_url="$1" +current_slave="$2" +current_builder="$3" +current_mode="$4" + +running_builders="$(wget -qO- "${buildbot_url%/}/json/slaves/$current_slave?as_text=1" | sed -ne 's,^.*"builderName": "\(.*\)".*$,\1,p')" + +find /tmp/ -maxdepth 1 -mtime +1 '(' -name 'npm-*' -or -name 'jsmake-*' ')' -print0 | xargs -0 -r rm -vr + +is_running() { + local running_builder + for running_builder in $running_builders; do + if [ "${running_builder//\//_}" = "${1//\//_}" ]; then + return 0 + fi + done + return 1 +} + +do_cleanup() { + printf "Cleaning up '$current_builder' work directory" + + rm -f cleanup.sh + rm -vrf sdk/ | while read entry; do + case "$entry" in *directory:*) + printf "." + esac + done + + echo "" +} + +# +# Sanity check, current builder should be in running builders list +# + +if ! is_running "$current_builder"; then + echo "Current builder '$current_builder' not found in current builders list, aborting cleanup." + exit 1 +fi + + +# +# Clean up leftovers +# + +if [ "$current_mode" = full ]; then +( + if ! flock -x -w 2700 200; then + echo "Unable to obtain exclusive lock, aborting cleanup." + exit 1 + fi + + for build_dir in ../../*; do + + build_dir="$(readlink -f "$build_dir")" + + if [ -z "$build_dir" ] || [ ! -d "$build_dir/build/sdk" ]; then + continue + fi + + current_builder="${build_dir##*/}" + + if is_running "$current_builder"; then + echo "Skipping currently active '$current_builder' work directory." + continue + fi + + ( + cd "$build_dir/build" + + #if [ -n "$(git status --porcelain | grep -v update_hostkey.sh | grep -v cleanup.sh)" ]; then + if [ -d sdk ]; then + do_cleanup + else + echo "Skipping clean '$current_builder' work directory." + fi + ) + done + +) 200>../../cleanup.lock + +# +# Clean up current build +# + +else + do_cleanup +fi + +exit 0