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