From: Jo-Philipp Wich Date: Sun, 30 Jun 2019 18:24:23 +0000 (+0200) Subject: phase1: move cleanup.sh to shared script directory X-Git-Tag: v1~97 X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=5b44d6a79963cbb1c665b345a405ade0dcf6c7a9;p=buildbot.git phase1: move cleanup.sh to shared script directory Signed-off-by: Jo-Philipp Wich --- diff --git a/phase1/cleanup.sh b/phase1/cleanup.sh deleted file mode 100755 index 4260958..0000000 --- a/phase1/cleanup.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash - -export LC_ALL=C - -master_url="$1" -current_slave="$2" -current_builder="$3" -current_mode="$4" - -running_builders="$(wget -qO- "${master_url%/}/json/slaves/$current_slave?as_text=1" | sed -ne 's,^.*"builderName": "\(.*\)".*$,\1,p')" - -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" - - if [ -d .git ]; then - echo " using git" - git reset --hard HEAD - git clean -f -d -x - else - find . -mindepth 1 -maxdepth 1 | while read entry; do - rm -vrf "$entry" | while read entry2; do - case "$entry2" in *directory:*) - printf "." - esac - done - done - fi - - 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/build_dir" ]; 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 [ -d build_dir ]; then - do_cleanup - else - echo "Skipping clean '$current_builder' work directory." - fi - ) - done - -) 200>../cleanup.lock - -# -# Clean up current build -# - -else - if [ -d build ]; then ( - cd build - do_cleanup - ); fi -fi - -exit 0 diff --git a/phase1/master.cfg b/phase1/master.cfg index 7898760..e4674b2 100644 --- a/phase1/master.cfg +++ b/phase1/master.cfg @@ -524,8 +524,8 @@ for target in targets: # cleanup.sh if needed factory.addStep(FileDownload( - name = "dlcleanupsh", - mastersrc = "cleanup.sh", + name = "dlcleanupsh", + mastersrc = scripts_dir + '/cleanup-phase1.sh', slavedest = "../cleanup.sh", mode = 0755, doStepIf = IsCleanupRequested)) diff --git a/scripts/cleanup-phase1.sh b/scripts/cleanup-phase1.sh new file mode 100755 index 0000000..4260958 --- /dev/null +++ b/scripts/cleanup-phase1.sh @@ -0,0 +1,102 @@ +#!/bin/bash + +export LC_ALL=C + +master_url="$1" +current_slave="$2" +current_builder="$3" +current_mode="$4" + +running_builders="$(wget -qO- "${master_url%/}/json/slaves/$current_slave?as_text=1" | sed -ne 's,^.*"builderName": "\(.*\)".*$,\1,p')" + +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" + + if [ -d .git ]; then + echo " using git" + git reset --hard HEAD + git clean -f -d -x + else + find . -mindepth 1 -maxdepth 1 | while read entry; do + rm -vrf "$entry" | while read entry2; do + case "$entry2" in *directory:*) + printf "." + esac + done + done + fi + + 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/build_dir" ]; 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 [ -d build_dir ]; then + do_cleanup + else + echo "Skipping clean '$current_builder' work directory." + fi + ) + done + +) 200>../cleanup.lock + +# +# Clean up current build +# + +else + if [ -d build ]; then ( + cd build + do_cleanup + ); fi +fi + +exit 0