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

Side by Side Diff: sync_build_test.sh

Issue 3148016: Make sync_build_test and build_autotest support workon. (Closed) Base URL: ssh://git@chromiumos-git//crosutils.git
Patch Set: Respond to review Created 10 years, 4 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 | « build_autotest.sh ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/bin/bash 1 #!/bin/bash
2 2
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 # Script to sync your checkout, build a Chromium OS image, and test it all 7 # Script to sync your checkout, build a Chromium OS image, and test it all
8 # with one command. Can also check out a new Chromium OS checkout and 8 # with one command. Can also check out a new Chromium OS checkout and
9 # perform a subset of the above operations. 9 # perform a subset of the above operations.
10 # 10 #
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 DEFINE_string remote "" \ 76 DEFINE_string remote "" \
77 "Use this hostname/IP for live updating and running tests" 77 "Use this hostname/IP for live updating and running tests"
78 DEFINE_string repo "${CHROMIUMOS_REPO}" "gclient repo for chromiumos" 78 DEFINE_string repo "${CHROMIUMOS_REPO}" "gclient repo for chromiumos"
79 DEFINE_boolean sync ${FLAGS_TRUE} "Sync the checkout" 79 DEFINE_boolean sync ${FLAGS_TRUE} "Sync the checkout"
80 DEFINE_string test "" \ 80 DEFINE_string test "" \
81 "Test the built image with the given params to run_remote_tests" 81 "Test the built image with the given params to run_remote_tests"
82 DEFINE_string top "" \ 82 DEFINE_string top "" \
83 "Root directory of your checkout (defaults to determining from your cwd)" 83 "Root directory of your checkout (defaults to determining from your cwd)"
84 DEFINE_boolean withdev ${FLAGS_TRUE} "Build development packages" 84 DEFINE_boolean withdev ${FLAGS_TRUE} "Build development packages"
85 DEFINE_boolean usepkg ${FLAGS_TRUE} "Use binary packages" 85 DEFINE_boolean usepkg ${FLAGS_TRUE} "Use binary packages"
86 DEFINE_boolean useworkon ${FLAGS_FALSE} "Use cros_workon/repo workflow"
86 DEFINE_boolean unittest ${FLAGS_TRUE} "Run unit tests" 87 DEFINE_boolean unittest ${FLAGS_TRUE} "Run unit tests"
87 88
88 # Returns a heuristic indicating if we believe this to be a google internal 89 # Returns a heuristic indicating if we believe this to be a google internal
89 # development environment. 90 # development environment.
90 # Returns: 91 # Returns:
91 # 0 if so, 1 otherwise 92 # 0 if so, 1 otherwise
92 function is_google_environment() { 93 function is_google_environment() {
93 hostname | egrep -q .google.com\$ 94 hostname | egrep -q .google.com\$
94 return $? 95 return $?
95 } 96 }
96 97
97 98
98 # Validates parameters and sets "intelligent" defaults based on other 99 # Validates parameters and sets "intelligent" defaults based on other
99 # parameters. 100 # parameters.
100 function validate_and_set_param_defaults() { 101 function validate_and_set_param_defaults() {
101 if [[ -z "${FLAGS_top}" ]]; then 102 if [[ -z "${FLAGS_top}" ]]; then
102 local test_dir=$(pwd) 103 local test_dir=$(pwd)
103 while [[ "${test_dir}" != "/" ]]; do 104 while [[ "${test_dir}" != "/" ]]; do
104 if [[ -d "${test_dir}/src/platform/pam_google" ]]; then 105 if [[ -d "${test_dir}/src/platform/dev" ]]; then
105 FLAGS_top="${test_dir}" 106 FLAGS_top="${test_dir}"
106 break 107 break
107 fi 108 fi
108 test_dir=$(dirname "${test_dir}") 109 test_dir=$(dirname "${test_dir}")
109 done 110 done
110 fi 111 fi
111 112
112 if [[ -z "${FLAGS_top}" ]]; then 113 if [[ -z "${FLAGS_top}" ]]; then
113 # Use the top directory based on where this script runs from 114 # Use the top directory based on where this script runs from
114 FLAGS_top=$(dirname $(dirname $(dirname $0))) 115 FLAGS_top=$(dirname $(dirname $(dirname $0)))
115 fi 116 fi
116 117
117 # Canonicalize any symlinks 118 # Canonicalize any symlinks
118 if [[ -d "${FLAGS_top}" ]]; then 119 if [[ -d "${FLAGS_top}" ]]; then
119 FLAGS_top=$(readlink -f "${FLAGS_top}") 120 FLAGS_top=$(readlink -f "${FLAGS_top}")
120 fi 121 fi
121 122
123 if [[ -d "${FLAGS_top}" ]]; then
124 # Auto detect the right workflow.
125 if [[ -d "${FLAGS_top}/.git" ]]; then
126 FLAGS_useworkon=${FLAGS_FALSE}
127 else
128 FLAGS_useworkon=${FLAGS_TRUE}
129 fi
130 fi
131
122 if [[ -z "${FLAGS_chroot}" ]]; then 132 if [[ -z "${FLAGS_chroot}" ]]; then
123 FLAGS_chroot="${FLAGS_top}/chroot" 133 FLAGS_chroot="${FLAGS_top}/chroot"
124 fi 134 fi
125 135
126 # If chroot does not exist, force making it 136 # If chroot does not exist, force making it
127 if [[ ! -d "${FLAGS_chroot}" ]]; then 137 if [[ ! -d "${FLAGS_chroot}" ]]; then
128 FLAGS_force_make_chroot=${FLAGS_TRUE} 138 FLAGS_force_make_chroot=${FLAGS_TRUE}
129 fi 139 fi
130
131 # If chrome_root option passed, set as option for ./enter_chroot 140 # If chrome_root option passed, set as option for ./enter_chroot
132 if [[ -n "${FLAGS_chrome_root}" ]]; then 141 if [[ -n "${FLAGS_chrome_root}" ]]; then
133 chroot_options="--chrome_root=${FLAGS_chrome_root}" 142 chroot_options="--chrome_root=${FLAGS_chrome_root}"
134 fi 143 fi
135 144
136 if [[ -z "${FLAGS_repo}" ]]; then 145 if [[ -z "${FLAGS_repo}" ]]; then
137 if is_google_environment; then 146 if is_google_environment; then
138 FLAGS_repo="ssh://git@chromiumos-git//chromeos" 147 FLAGS_repo="ssh://git@chromiumos-git//chromeos"
139 else 148 else
140 FLAGS_repo="http://src.chromium.org/git/chromiumos.git" 149 FLAGS_repo="http://src.chromium.org/git/chromiumos.git"
141 fi 150 fi
142 fi 151 fi
143 152
144 if [[ -n "${FLAGS_test}" ]]; then 153 if [[ -n "${FLAGS_test}" ]]; then
145 # If you specify that tests should be run, we assume the image 154 # If you specify that tests should be run, we assume the image
146 # is modified to run tests. 155 # is modified to run tests.
147 FLAGS_mod_image_for_test=${FLAGS_TRUE} 156 FLAGS_mod_image_for_test=${FLAGS_TRUE}
148 # If you specify that tests should be run, we assume you want 157 # If you specify that tests should be run, we assume you want
149 # to live update the image. 158 # to live update the image.
150 FLAGS_image_to_live=${FLAGS_TRUE} 159 FLAGS_image_to_live=${FLAGS_TRUE}
160 if [[ ${FLAGS_useworkon} -eq ${FLAGS_TRUE} ]]; then
161 # Currently the workon flow does not enable tests to be dynamically
162 # built during run_remote_tests, so we need to build them all
163 # beforehand.
164 FLAGS_build_autotest=${FLAGS_TRUE}
165 fi
151 fi 166 fi
152 167
153 # If they gave us a remote host, then we assume they want us to do a live 168 # If they gave us a remote host, then we assume they want us to do a live
154 # update. 169 # update.
155 if [[ -n "${FLAGS_remote}" ]]; then 170 if [[ -n "${FLAGS_remote}" ]]; then
156 FLAGS_image_to_live=${FLAGS_TRUE} 171 FLAGS_image_to_live=${FLAGS_TRUE}
157 fi 172 fi
158 173
159 # Grabbing a buildbot build is exclusive with syncing and building 174 # Grabbing a buildbot build is exclusive with syncing and building
160 if [[ -n "${FLAGS_grab_buildbot}" ]]; then 175 if [[ -n "${FLAGS_grab_buildbot}" ]]; then
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 echo "Could not verify that ${device} for image_to_usb is removable" 219 echo "Could not verify that ${device} for image_to_usb is removable"
205 exit 1 220 exit 1
206 fi 221 fi
207 fi 222 fi
208 } 223 }
209 224
210 225
211 # Prints a description of what we are doing or did 226 # Prints a description of what we are doing or did
212 function describe_steps() { 227 function describe_steps() {
213 if [[ ${FLAGS_sync} -eq ${FLAGS_TRUE} ]]; then 228 if [[ ${FLAGS_sync} -eq ${FLAGS_TRUE} ]]; then
214 echo " * Sync client (gclient sync)" 229 if [[ ${FLAGS_useworkon} -eq ${FLAGS_TRUE} ]]; then
230 echo " * Sync client (repo sync)"
231 else
232 echo " * Sync client (gclient sync)"
233 fi
215 if is_google_environment; then 234 if is_google_environment; then
216 echo " * Create proper src/scripts/.chromeos_dev" 235 echo " * Create proper src/scripts/.chromeos_dev"
217 fi 236 fi
218 fi 237 fi
219 if [[ ${FLAGS_force_make_chroot} -eq ${FLAGS_TRUE} ]]; then 238 if [[ ${FLAGS_force_make_chroot} -eq ${FLAGS_TRUE} ]]; then
220 echo " * Rebuild chroot (make_chroot) in ${FLAGS_chroot}" 239 echo " * Rebuild chroot (make_chroot) in ${FLAGS_chroot}"
221 fi 240 fi
222 local set_passwd=${FLAGS_FALSE} 241 local set_passwd=${FLAGS_FALSE}
223 if [[ ${FLAGS_build} -eq ${FLAGS_TRUE} ]]; then 242 if [[ ${FLAGS_build} -eq ${FLAGS_TRUE} ]]; then
224 local withdev="" 243 local withdev=""
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 echo "Planning these steps on ${FLAGS_top}:" 297 echo "Planning these steps on ${FLAGS_top}:"
279 describe_steps 298 describe_steps
280 read -p "Are you sure (y/N)? " SURE 299 read -p "Are you sure (y/N)? " SURE
281 # Get just the first character 300 # Get just the first character
282 if [[ "${SURE:0:1}" != "y" ]]; then 301 if [[ "${SURE:0:1}" != "y" ]]; then
283 echo "Ok, better safe than sorry." 302 echo "Ok, better safe than sorry."
284 exit 1 303 exit 1
285 fi 304 fi
286 } 305 }
287 306
288
289 # Runs gclient config on a new checkout directory.
290 function config_new_checkout() {
291 # We only know how to check out to a pattern like ~/foo/chromeos so
292 # make sure that's the pattern the user has given.
293 echo "Checking out ${FLAGS_top}"
294 if [[ $(basename "${FLAGS_top}") != "chromeos" ]]; then
295 echo "The --top directory does not exist and to check it out requires"
296 echo "the name to end in chromeos (try --top=${FLAGS_top}/chromeos)"
297 exit 1
298 fi
299 local top_parent=$(dirname "${FLAGS_top}")
300 mkdir -p "${top_parent}"
301 cd "${top_parent}"
302 gclient config "${FLAGS_repo}"
303 }
304
305
306 # Changes to a directory relative to the top/root directory of 307 # Changes to a directory relative to the top/root directory of
307 # the checkout. 308 # the checkout.
308 # Arguments: 309 # Arguments:
309 # $1 - relative path 310 # $1 - relative path
310 function chdir_relative() { 311 function chdir_relative() {
311 local dir=$1 312 local dir=$1
312 echo "+ cd ${dir}" 313 echo "+ cd ${dir}"
313 # Allow use of .. before the innermost directory of FLAGS_top exists 314 # Allow use of .. before the innermost directory of FLAGS_top exists
314 if [[ "${dir}" == ".." ]]; then 315 if [[ "${dir}" == ".." ]]; then
315 dir=$(dirname "${FLAGS_top}") 316 dir=$(dirname "${FLAGS_top}")
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 379
379 # Display duration 380 # Display duration
380 function show_duration() { 381 function show_duration() {
381 local current_time=$(date '+%s') 382 local current_time=$(date '+%s')
382 local duration=$((${current_time} - ${START_TIME})) 383 local duration=$((${current_time} - ${START_TIME}))
383 local minutes_duration=$((${duration} / 60)) 384 local minutes_duration=$((${duration} / 60))
384 local seconds_duration=$((${duration} % 60)) 385 local seconds_duration=$((${duration} % 60))
385 printf "Total time: %d:%02ds\n" "${minutes_duration}" "${seconds_duration}" 386 printf "Total time: %d:%02ds\n" "${minutes_duration}" "${seconds_duration}"
386 } 387 }
387 388
389 # Runs gclient config on a new checkout directory.
390 function config_new_gclient_checkout() {
391 # We only know how to check out to a pattern like ~/foo/chromeos so
392 # make sure that's the pattern the user has given.
393 if [[ $(basename "${FLAGS_top}") != "chromeos" ]]; then
394 echo "The --top directory does not exist and to check it out requires"
395 echo "the name to end in chromeos (try --top=${FLAGS_top}/chromeos)"
396 exit 1
397 fi
398 local top_parent=$(dirname "${FLAGS_top}")
399 mkdir -p "${top_parent}"
400 cd "${top_parent}"
401 gclient config "${FLAGS_repo}"
402 }
403
404 # Runs repo init on a new checkout directory.
405 function config_new_repo_checkout() {
406 mkdir -p "${FLAGS_top}"
407 cd "${FLAGS_top}"
408 repo init -u http://src.chromium.org/git/manifest -m minilayout.xml
409 }
410
411 # Configures/initializes a new checkout
412 function config_new_checkout() {
413 echo "Checking out ${FLAGS_top}"
414 if [[ ${FLAGS_useworkon} ]]; then
415 config_new_repo_checkout
416 else
417 config_new_gclient_checkout
418 fi
419 }
388 420
389 # Runs gclient sync, setting up .chromeos_dev and preparing for 421 # Runs gclient sync, setting up .chromeos_dev and preparing for
390 # local repo setup 422 # local repo setup
391 function sync() { 423 function sync() {
392 # cd to the directory below 424 # cd to the directory below
393 chdir_relative .. 425 if [[ ${FLAGS_useworkon} -eq ${FLAGS_TRUE} ]]; then
394 run_phase "Synchronizing client" gclient sync 426 chdir_relative .
427 run_phase "Synchronizing client" repo sync
428 # Change to a directory that is definitely a git repo
429 chdir_relative src/third_party/chromiumos-overlay
430 git cl config "file://$(pwd)/../../../codereview.settings"
431 else
432 chdir_relative ..
433 run_phase "Synchronizing client" gclient sync
434 chdir_relative .
435 git cl config "file://$(pwd)/codereview.settings"
436 fi
395 chdir_relative . 437 chdir_relative .
396 git cl config "file://$(pwd)/codereview.settings"
397 if is_google_environment; then 438 if is_google_environment; then
398 local base_dir=$(dirname $(dirname "${FLAGS_top}")) 439 local base_dir=$(dirname $(dirname "${FLAGS_top}"))
399 echo <<EOF > src/scripts/.chromeos_dev 440 echo <<EOF > src/scripts/.chromeos_dev
400 # Use internal chromeos-deb repository
401 CHROMEOS_EXT_MIRROR="http://chromeos-deb/ubuntu"
402 CHROMEOS_EXT_SUITE="karmic"
403
404 # Assume Chrome is checked out nearby 441 # Assume Chrome is checked out nearby
405 CHROMEOS_CHROME_DIR="${base_dir}/chrome" 442 CHROMEOS_CHROME_DIR="${base_dir}/chrome"
406 EOF 443 EOF
407 fi 444 fi
408 } 445 }
409 446
410 447
411 # Downloads a buildbot image 448 # Downloads a buildbot image
412 function grab_buildbot() { 449 function grab_buildbot() {
413 if [[ "${FLAGS_grab_buildbot}" == "LATEST" ]]; then 450 if [[ "${FLAGS_grab_buildbot}" == "LATEST" ]]; then
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 if [[ ${FLAGS_sync} -eq ${FLAGS_TRUE} ]]; then 538 if [[ ${FLAGS_sync} -eq ${FLAGS_TRUE} ]]; then
502 sync 539 sync
503 fi 540 fi
504 541
505 if [[ -n "${FLAGS_grab_buildbot}" ]]; then 542 if [[ -n "${FLAGS_grab_buildbot}" ]]; then
506 grab_buildbot 543 grab_buildbot
507 fi 544 fi
508 545
509 if [[ ${FLAGS_force_make_chroot} -eq ${FLAGS_TRUE} ]]; then 546 if [[ ${FLAGS_force_make_chroot} -eq ${FLAGS_TRUE} ]]; then
510 chdir_relative src/scripts 547 chdir_relative src/scripts
511 run_phase "Replacing chroot" ./make_chroot --replace \ 548 local extra_flags="--nouseworkon"
549 [[ ${FLAGS_useworkon} -eq ${FLAGS_TRUE} ]] && extra_flags="--useworkon"
550 run_phase "Replacing chroot" ./make_chroot ${extra_flags} --replace \
512 "--chroot=${FLAGS_chroot}" ${jobs_param} 551 "--chroot=${FLAGS_chroot}" ${jobs_param}
513 fi 552 fi
514 553
515 if [[ ${FLAGS_build} -eq ${FLAGS_TRUE} ]]; then 554 if [[ ${FLAGS_build} -eq ${FLAGS_TRUE} ]]; then
516 local pkg_param="" 555 local pkg_param=""
517 if [[ ${FLAGS_usepkg} -eq ${FLAGS_FALSE} ]]; then 556 if [[ ${FLAGS_usepkg} -eq ${FLAGS_FALSE} ]]; then
518 pkg_param="--nousepkg" 557 pkg_param="--nousepkg"
519 fi 558 fi
520 559
521 chdir_relative src/scripts 560 chdir_relative src/scripts
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 fi 626 fi
588 627
589 trap - EXIT 628 trap - EXIT
590 echo "Successfully used ${FLAGS_top} to:" 629 echo "Successfully used ${FLAGS_top} to:"
591 describe_steps 630 describe_steps
592 show_duration 631 show_duration
593 } 632 }
594 633
595 634
596 main $@ 635 main $@
OLDNEW
« no previous file with comments | « build_autotest.sh ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698