phase1: move shared dl to same folder as shared-workdir
[buildbot.git] / scripts / cleanup.sh
1 #!/bin/bash
2
3 export LC_ALL=C
4
5 master_url="$1"
6 current_worker="$2"
7 current_builder="$3"
8 current_mode="$4"
9
10 worker_id="$(wget -qO- "${master_url%/}/api/v2/workers/$current_worker" | sed -rne 's#^ +"workerid": ([0-9]+),?$#\1#p')"
11 active_builder_ids="$(wget -qO- "${master_url%/}/api/v2/workers/$worker_id/builds" | sed -rne '/"builderid"/ { s/^.+: ([0-9]+),$/\1/; h }; /"state_string"/ { s/^.+: "([^"]*)".*$/\1/; H; x; s/\n/ /; p }' | sed -ne 's/ building$//p')"
12
13 find /tmp/ -maxdepth 1 -mtime +1 '(' -name 'npm-*' -or -name 'jsmake-*' ')' -print0 | xargs -0 -r rm -vr
14
15 is_running() {
16 local id="$(wget -qO- "${master_url%/}/api/v2/builders/${1//\//_}" | sed -rne 's#^ +"builderid": ([0-9]+),$#\1#p')"
17 local running_builder_id
18 for running_builder_id in $active_builder_ids; do
19 if [ "$running_builder_id" = "$id" ]; then
20 return 0
21 fi
22 done
23 return 1
24 }
25
26 do_cleanup() {
27 printf "Cleaning up '$current_builder' work directory"
28
29 if [ -d .git ]; then
30 echo " using git"
31 git reset --hard HEAD
32 git clean -f -d -x
33 else
34 find . -mindepth 1 -maxdepth 1 | while read entry; do
35 rm -vrf "$entry" | while read entry2; do
36 case "$entry2" in *directory[:\ ]*)
37 printf "."
38 esac
39 done
40 done
41 fi
42
43 echo ""
44 }
45
46 #
47 # Sanity check, current builder should be in running builders list
48 #
49
50 if ! is_running "$current_builder"; then
51 echo "Current builder '$current_builder' not found in current builders list, aborting cleanup."
52 exit 1
53 fi
54
55
56 #
57 # Clean up leftovers
58 #
59
60 if [ "$current_mode" = full ]; then
61 (
62 if ! flock -x -w 2700 200; then
63 echo "Unable to obtain exclusive lock, aborting cleanup."
64 exit 1
65 fi
66
67 for build_dir in ../*; do
68
69 current_builder="${build_dir##*/}"
70 build_dir="$(readlink -f "$build_dir")"
71
72 if [ -z "$build_dir" ] || [ -L "$build_dir" ] || [ ! -d "$build_dir/build" ]; then
73 continue
74 fi
75
76 if is_running "$current_builder"; then
77 echo "Skipping currently active '$current_builder' work directory."
78 continue
79 fi
80
81 (
82 cd "$build_dir/build"
83 do_cleanup
84 )
85 done
86
87 ) 200>../cleanup.lock
88
89 #
90 # Clean up current build
91 #
92
93 else
94 if [ -d build ]; then (
95 cd build
96 do_cleanup
97 ); fi
98 fi
99
100 exit 0