phase2: pass buildbot url to cleanup.sh
[buildbot.git] / phase2 / cleanup.sh
1 #!/bin/bash
2
3 export LC_ALL=C
4
5 buildbot_url="$1"
6 current_slave="$2"
7 current_builder="$3"
8 current_mode="$4"
9
10 running_builders="$(wget -qO- "${buildbot_url%/}/json/slaves/$current_slave?as_text=1" | sed -ne 's,^.*"builderName": "\(.*\)".*$,\1,p')"
11
12 is_running() {
13 local running_builder
14 for running_builder in $running_builders; do
15 if [ "${running_builder//\//_}" = "${1//\//_}" ]; then
16 return 0
17 fi
18 done
19 return 1
20 }
21
22 do_cleanup() {
23 printf "Cleaning up '$current_builder' work directory"
24
25 rm -f cleanup.sh
26 rm -vrf sdk/ | while read entry; do
27 case "$entry" in *directory:*)
28 printf "."
29 esac
30 done
31
32 echo ""
33 }
34
35 #
36 # Sanity check, current builder should be in running builders list
37 #
38
39 if ! is_running "$current_builder"; then
40 echo "Current builder '$current_builder' not found in current builders list, aborting cleanup."
41 exit 1
42 fi
43
44
45 #
46 # Clean up leftovers
47 #
48
49 if [ "$current_mode" = full ]; then
50 (
51 if ! flock -x -w 2700 200; then
52 echo "Unable to obtain exclusive lock, aborting cleanup."
53 exit 1
54 fi
55
56 for build_dir in ../../*; do
57
58 build_dir="$(readlink -f "$build_dir")"
59
60 if [ -z "$build_dir" ] || [ ! -d "$build_dir/build/sdk" ]; then
61 continue
62 fi
63
64 current_builder="${build_dir##*/}"
65
66 if is_running "$current_builder"; then
67 echo "Skipping currently active '$current_builder' work directory."
68 continue
69 fi
70
71 (
72 cd "$build_dir/build"
73
74 #if [ -n "$(git status --porcelain | grep -v update_hostkey.sh | grep -v cleanup.sh)" ]; then
75 if [ -d sdk ]; then
76 do_cleanup
77 else
78 echo "Skipping clean '$current_builder' work directory."
79 fi
80 )
81 done
82
83 ) 200>../../cleanup.lock
84
85 #
86 # Clean up current build
87 #
88
89 else
90 do_cleanup
91 fi
92
93 exit 0