Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1235)

Side by Side Diff: build/android/buildbot/buildbot_functions.sh

Issue 11175016: Selective build clobbering feature (landmines.py and android build scripts). (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | build/landmines.py » ('j') | build/landmines.py » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | build/landmines.py » ('j') | build/landmines.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698