phase1: move cleanup.sh to shared script directory
[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 find /tmp/ -maxdepth 1 -mtime +1 '(' -name 'npm-*' -or -name 'jsmake-*' ')' -print0 | xargs -0 -r rm -vr
13
14 is_running() {
15 local running_builder
16 for running_builder in $running_builders; do
17 if [ "${running_builder//\//_}" = "${1//\//_}" ]; then
18 return 0
19 fi
20 done
21 return 1
22 }
23
24 do_cleanup() {
25 printf "Cleaning up '$current_builder' work directory"
26
27 rm -f cleanup.sh
28 rm -vrf sdk/ | while read entry; do
29 case "$entry" in *directory:*)
30 printf "."
31 esac
32 done
33
34 echo ""
35 }
36
37 #
38 # Sanity check, current builder should be in running builders list
39 #
40
41 if ! is_running "$current_builder"; then
42 echo "Current builder '$current_builder' not found in current builders list, aborting cleanup."
43 exit 1
44 fi
45
46
47 #
48 # Clean up leftovers
49 #
50
51 if [ "$current_mode" = full ]; then
52 (
53 if ! flock -x -w 2700 200; then
54 echo "Unable to obtain exclusive lock, aborting cleanup."
55 exit 1
56 fi
57
58 for build_dir in ../../*; do
59
60 build_dir="$(readlink -f "$build_dir")"
61
62 if [ -z "$build_dir" ] || [ ! -d "$build_dir/build/sdk" ]; then
63 continue
64 fi
65
66 current_builder="${build_dir##*/}"
67
68 if is_running "$current_builder"; then
69 echo "Skipping currently active '$current_builder' work directory."
70 continue
71 fi
72
73 (
74 cd "$build_dir/build"
75
76 #if [ -n "$(git status --porcelain | grep -v update_hostkey.sh | grep -v cleanup.sh)" ]; then
77 if [ -d sdk ]; then
78 do_cleanup
79 else
80 echo "Skipping clean '$current_builder' work directory."
81 fi
82 )
83 done
84
85 ) 200>../../cleanup.lock
86
87 #
88 # Clean up current build
89 #
90
91 else
92 do_cleanup
93 fi
94
95 exit 0