]> git.wh0rd.org - home.git/blob - .bin/cros-cbuildbot
handle initial runs better (missing dirs)
[home.git] / .bin / cros-cbuildbot
1 #!/bin/bash
2
3 set -ex
4
5 vexec() {
6 local i fmt
7 for (( i = 1; i <= $#; ++i )) ; do
8 case ${!i} in
9 *" "*) fmt="'%s'";;
10 *) fmt="%s";;
11 esac
12 printf "${fmt}" "${!i}"
13 if [[ $i -lt $# ]] ; then
14 printf ' '
15 else
16 echo
17 fi
18 done
19 exec "$@"
20 }
21
22 cd ~/chromiumos
23
24 # cache the sudo timestamp
25 sudo echo "" >/dev/null
26
27 d=/usr/local/google/home/vapier
28 if [[ ! -d ${d} ]] ; then
29 exit 1
30 fi
31
32 d+="/trybot"
33 mkdir -p "${d}"
34 if mount | grep -qs $d ; then
35 echo "mounts found in $d"
36 exit 1
37 fi
38 if [[ -L $d ]] ; then
39 rd=$(readlink $d)
40 if mount | grep -qs $rd ; then
41 echo "mounts found in $rd"
42 exit 1
43 fi
44 fi
45
46 if [[ $1 == "--noclean" ]] ; then
47 shift
48 elif [[ " $* " != *" --remote "* ]] ; then
49 echo "Cleaning ${d}"
50 pushd "${d}" >/dev/null
51 clean=(
52 built-sdk.tbz2
53 chroot
54 new-sdk-chroot
55 #sdks
56 src/build
57 test_results.tgz
58 trybot_archive
59 )
60 sudo rm -rf "${clean[@]}"
61 if [[ -d ${d}/sdks ]] ; then
62 sudo find "${d}"/sdks -mtime +3 -delete
63 fi
64 popd >/dev/null
65 fi
66
67 # find all the buildbot branches
68 echo "Looking up repo branches"
69 repos=$(r b | cut -b4- | awk '$1 == "bb" {
70 # Single repo output:
71 # bb | in src/third_party/portage-stable
72 # Multi repo output:
73 # bb | in:
74 # src/third_party/portage-stable
75 # src/third_party/chromiumos-overlay
76 if ($3 == "in")
77 print $NF
78 while (getline) {
79 if ($2 == "|")
80 break;
81 print $NF;
82 }
83 }')
84 if [[ -n ${repos} ]] ; then
85 echo "Auto pulling patches from 'bb' branch in repos:"
86 printf '\t%s\n' ${repos}
87
88 p_flag=""
89 for r in ${repos} ; do
90 r=$(r list | awk -v r="${r}" '$1 == r { print $NF }')
91 p_flag+="${r}:bb "
92 done
93
94 set -- -p "${p_flag}" "$@"
95 fi
96
97 vexec cbuildbot --buildroot=${d} "$@"