OLD | NEW |
1 #!/bin/bash | 1 #!/bin/bash |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 # | 5 # |
6 # Bash functions used by buildbot annotator scripts for the android | 6 # Bash functions used by buildbot annotator scripts for the android |
7 # build of chromium. Executing this script should not perform actions | 7 # build of chromium. Executing this script should not perform actions |
8 # other than setting variables and defining of functions. | 8 # other than setting variables and defining of functions. |
9 | 9 |
10 # Number of jobs on the compile line; e.g. make -j"${JOBS}" | 10 # Number of jobs on the compile line; e.g. make -j"${JOBS}" |
11 JOBS="${JOBS:-4}" | 11 JOBS="${JOBS:-4}" |
12 | 12 |
13 # Parse named arguments passed into the annotator script | 13 # Parse named arguments passed into the annotator script |
14 # and assign them global variable names. | 14 # and assign them global variable names. |
15 function bb_parse_args { | 15 function bb_parse_args { |
16 while [[ $1 ]]; do | 16 while [[ $1 ]]; do |
17 case "$1" in | 17 case "$1" in |
18 --factory-properties=*) | 18 --factory-properties=*) |
19 FACTORY_PROPERTIES="$(echo "$1" | sed 's/^[^=]*=//')" | 19 FACTORY_PROPERTIES="$(echo "$1" | sed 's/^[^=]*=//')" |
20 BUILDTYPE=$(bb_get_json_prop "$FACTORY_PROPERTIES" target) | 20 BUILDTYPE=$(bb_get_json_prop "$FACTORY_PROPERTIES" target) |
| 21 BUILDTOOL=$(bb_get_json_prop "$FACTORY_PROPERTIES" buildtool) |
21 ;; | 22 ;; |
22 --build-properties=*) | 23 --build-properties=*) |
23 BUILD_PROPERTIES="$(echo "$1" | sed 's/^[^=]*=//')" | 24 BUILD_PROPERTIES="$(echo "$1" | sed 's/^[^=]*=//')" |
24 ;; | 25 ;; |
25 *) | 26 *) |
26 echo "@@@STEP_WARNINGS@@@" | 27 echo "@@@STEP_WARNINGS@@@" |
27 echo "Warning, unparsed input argument: '$1'" | 28 echo "Warning, unparsed input argument: '$1'" |
28 ;; | 29 ;; |
29 esac | 30 esac |
30 shift | 31 shift |
31 done | 32 done |
32 } | 33 } |
33 | 34 |
34 # Function to force-green a bot. | 35 # Function to force-green a bot. |
35 function bb_force_bot_green_and_exit { | 36 function bb_force_bot_green_and_exit { |
36 echo "@@@BUILD_STEP Bot forced green.@@@" | 37 echo "@@@BUILD_STEP Bot forced green.@@@" |
37 exit 0 | 38 exit 0 |
38 } | 39 } |
39 | 40 |
| 41 # Check for landmines which might clobber the build. Will create a new annotator |
| 42 # step for the clobber if one is required. |
| 43 # |
| 44 # As a side effect, creates "$2/.landmines" |
| 45 # |
| 46 # Args: |
| 47 # $1: source root |
| 48 # $2: output root |
| 49 # Retval: |
| 50 # 0 if landmines are tripped for this build and we need clobber OR |
| 51 # clobber was requested via $BUILDBOT_CLOBBER |
| 52 # 1 if landmines are dormant |
| 53 function bb_check_clobber { |
| 54 local src_root="$1" |
| 55 local out_dir="$2" |
| 56 |
| 57 local ret=1 |
| 58 |
| 59 if [[ $BUILDBOT_CLOBBER ]] |
| 60 then |
| 61 echo "@@@BUILD_STEP Clobber@@@" |
| 62 echo "Clobber explicitly requested" |
| 63 ret=0 |
| 64 else |
| 65 local landmines_path="$out_dir/.landmines" |
| 66 local landmines_script="$src_root/build/landmines.py" |
| 67 [[ ! -x "$landmines_script" ]] || return 1 |
| 68 |
| 69 local new_landmines=$(mktemp) |
| 70 |
| 71 python "$landmines_script" >> "$new_landmines" <<EOF |
| 72 { |
| 73 "target": "$BUILDTYPE", |
| 74 "distributor": "goma", |
| 75 "platform": "android", |
| 76 "builder": "$BUILDTOOL" |
| 77 } |
| 78 EOF |
| 79 |
| 80 if [[ ! -f "$landmines_path" ]] |
| 81 then |
| 82 mkdir -p "$(dirname "$landmines_path")" |
| 83 mv "$new_landmines" "$landmines_path" |
| 84 else |
| 85 local diff_output=$(mktemp) |
| 86 diff -U 0 --label "old_landmines $(stat -c "%z" "$landmines_path")" \ |
| 87 "$landmines_path" \ |
| 88 --label "new_landmines $(stat -c "%z" "$new_landmines")" \ |
| 89 "$new_landmines" > "$diff_output" |
| 90 if [[ $? != 0 ]] |
| 91 then |
| 92 echo "@@@BUILD_STEP Clobber@@@" |
| 93 echo "Landmines tripped! Clobbering the build! Reasons for clobber:" |
| 94 cat "$diff_output" |
| 95 ret=0 |
| 96 fi |
| 97 rm -f "$diff_output" |
| 98 fi |
| 99 |
| 100 rm -f "$new_landmines" |
| 101 fi |
| 102 |
| 103 return $ret |
| 104 } |
| 105 |
40 # Basic setup for all bots to run after a source tree checkout. | 106 # Basic setup for all bots to run after a source tree checkout. |
41 # Args: | 107 # Args: |
42 # $1: source root. | 108 # $1: source root. |
43 # $2 and beyond: key value pairs which are parsed by bb_parse_args. | 109 # $2 and beyond: key value pairs which are parsed by bb_parse_args. |
44 function bb_baseline_setup { | 110 function bb_baseline_setup { |
45 SRC_ROOT="$1" | 111 SRC_ROOT="$1" |
46 # Remove SRC_ROOT param | 112 # Remove SRC_ROOT param |
47 shift | 113 shift |
48 cd $SRC_ROOT | 114 cd $SRC_ROOT |
49 | 115 |
50 if [[ $BUILDBOT_CLOBBER ]]; then | 116 echo "@@@BUILD_STEP Parse args@@@" |
51 echo "@@@BUILD_STEP Clobber@@@" | 117 bb_parse_args "$@" |
| 118 |
| 119 if bb_check_clobber "$SRC_ROOT" "$SRC_ROOT/out/$BUILDTYPE" |
| 120 then |
52 # Sdk key expires, delete android folder. | 121 # Sdk key expires, delete android folder. |
53 # crbug.com/145860 | 122 # crbug.com/145860 |
54 rm -rf ~/.android | 123 rm -rf ~/.android |
55 rm -rf "${SRC_ROOT}"/out | 124 rm -rf "${SRC_ROOT}"/out |
56 if [ -e "${SRC_ROOT}"/out ] ; then | 125 if [ -e "${SRC_ROOT}"/out ] ; then |
57 echo "Clobber appeared to fail? ${SRC_ROOT}/out still exists." | 126 echo "Clobber appeared to fail? ${SRC_ROOT}/out still exists." |
58 echo "@@@STEP_WARNINGS@@@" | 127 echo "@@@STEP_WARNINGS@@@" |
59 fi | 128 fi |
60 fi | 129 fi |
61 | 130 |
62 echo "@@@BUILD_STEP Environment setup@@@" | 131 echo "@@@BUILD_STEP Environment setup@@@" |
63 bb_parse_args "$@" | |
64 | |
65 local BUILDTOOL=$(bb_get_json_prop "$FACTORY_PROPERTIES" buildtool) | |
66 if [[ $BUILDTOOL = ninja ]]; then | 132 if [[ $BUILDTOOL = ninja ]]; then |
67 export GYP_GENERATORS=ninja | 133 export GYP_GENERATORS=ninja |
68 fi | 134 fi |
69 export GOMA_DIR=/b/build/goma | 135 export GOMA_DIR=/b/build/goma |
70 . build/android/envsetup.sh | 136 . build/android/envsetup.sh |
71 adb kill-server | 137 adb kill-server |
72 } | 138 } |
73 | 139 |
74 function bb_compile_setup { | 140 function bb_compile_setup { |
75 local extra_gyp_defines="$(bb_get_json_prop "$FACTORY_PROPERTIES" \ | 141 local extra_gyp_defines="$(bb_get_json_prop "$FACTORY_PROPERTIES" \ |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 ninja -C out/$BUILDTYPE -j120 -l20 $TARGET | 214 ninja -C out/$BUILDTYPE -j120 -l20 $TARGET |
149 } | 215 } |
150 | 216 |
151 # Compile step | 217 # Compile step |
152 function bb_compile { | 218 function bb_compile { |
153 bb_compile_setup | 219 bb_compile_setup |
154 # This must be named 'compile', not 'Compile', for CQ interaction. | 220 # This must be named 'compile', not 'Compile', for CQ interaction. |
155 # Talk to maruel for details. | 221 # Talk to maruel for details. |
156 echo "@@@BUILD_STEP compile@@@" | 222 echo "@@@BUILD_STEP compile@@@" |
157 | 223 |
158 BUILDTOOL=$(bb_get_json_prop "$FACTORY_PROPERTIES" buildtool) | |
159 if [[ $BUILDTOOL = ninja ]]; then | 224 if [[ $BUILDTOOL = ninja ]]; then |
160 bb_goma_ninja All | 225 bb_goma_ninja All |
161 else | 226 else |
162 bb_goma_make | 227 bb_goma_make |
163 fi | 228 fi |
164 | 229 |
165 bb_stop_goma_internal | 230 bb_stop_goma_internal |
166 } | 231 } |
167 | 232 |
168 # Experimental compile step; does not turn the tree red if it fails. | 233 # Experimental compile step; does not turn the tree red if it fails. |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 ) | 364 ) |
300 } | 365 } |
301 | 366 |
302 # Retrieve a packed json property using python | 367 # Retrieve a packed json property using python |
303 function bb_get_json_prop { | 368 function bb_get_json_prop { |
304 local JSON="$1" | 369 local JSON="$1" |
305 local PROP="$2" | 370 local PROP="$2" |
306 | 371 |
307 python -c "import json; print json.loads('$JSON').get('$PROP', '')" | 372 python -c "import json; print json.loads('$JSON').get('$PROP', '')" |
308 } | 373 } |
OLD | NEW |