From: Jo-Philipp Wich Date: Thu, 18 Jul 2019 12:29:43 +0000 (+0200) Subject: treewide: merge phase1 and phase2 cleanup procedures X-Git-Tag: v1~77 X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=0dd07d2fe8dc4e98d0f9eddbdb88f2d144c8fd51;p=buildbot.git treewide: merge phase1 and phase2 cleanup procedures Signed-off-by: Jo-Philipp Wich --- diff --git a/phase1/master.cfg b/phase1/master.cfg index 46e1a72..d9ca8d8 100644 --- a/phase1/master.cfg +++ b/phase1/master.cfg @@ -543,7 +543,7 @@ for target in targets: # cleanup.sh if needed factory.addStep(FileDownload( name = "dlcleanupsh", - mastersrc = scripts_dir + '/cleanup-phase1.sh', + mastersrc = scripts_dir + '/cleanup.sh', slavedest = "../cleanup.sh", mode = 0755, doStepIf = IsCleanupRequested)) diff --git a/phase2/master.cfg b/phase2/master.cfg index 2cfd557..ed09c8b 100644 --- a/phase2/master.cfg +++ b/phase2/master.cfg @@ -268,8 +268,8 @@ for arch in arches: # prepare workspace factory.addStep(FileDownload( - mastersrc = scripts_dir + '/cleanup-phase2.sh', - slavedest = "cleanup.sh", + mastersrc = scripts_dir + '/cleanup.sh', + slavedest = "../cleanup.sh", mode = 0755)) if not persistent: @@ -277,6 +277,7 @@ for arch in arches: name = "cleanold", description = "Cleaning previous builds", command = ["./cleanup.sh", buildbot_url, WithProperties("%(slavename)s"), WithProperties("%(buildername)s"), "full"], + workdir = ".", haltOnFailure = True, timeout = 2400)) @@ -284,6 +285,7 @@ for arch in arches: name = "cleanup", description = "Cleaning work area", command = ["./cleanup.sh", buildbot_url, WithProperties("%(slavename)s"), WithProperties("%(buildername)s"), "single"], + workdir = ".", haltOnFailure = True, timeout = 2400)) diff --git a/scripts/cleanup-phase1.sh b/scripts/cleanup-phase1.sh deleted file mode 100755 index 4260958..0000000 --- a/scripts/cleanup-phase1.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/scripts/cleanup-phase2.sh b/scripts/cleanup-phase2.sh deleted file mode 100755 index 2af7b9f..0000000 --- a/scripts/cleanup-phase2.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/scripts/cleanup.sh b/scripts/cleanup.sh new file mode 100755 index 0000000..dc47529 --- /dev/null +++ b/scripts/cleanup.sh @@ -0,0 +1,99 @@ +#!/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')" + +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" + + 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" ]; 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" + do_cleanup + ) + done + +) 200>../cleanup.lock + +# +# Clean up current build +# + +else + if [ -d build ]; then ( + cd build + do_cleanup + ); fi +fi + +exit 0