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

Unified Diff: bin/cbuildbot.py

Issue 3146001: Adding cbuildbot to cros_utils. Leaving old version in repo until buildbot changes over. (Closed) Base URL: ssh://git@chromiumos-git//crosutils.git
Patch Set: patch from issue 1499002 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « bin/cbuildbot ('k') | bin/cbuildbot_config.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bin/cbuildbot.py
diff --git a/bin/cbuildbot.py b/bin/cbuildbot.py
new file mode 100755
index 0000000000000000000000000000000000000000..6eabcb954abd1fa45888ade12f7bb4deec524072
--- /dev/null
+++ b/bin/cbuildbot.py
@@ -0,0 +1,140 @@
+#!/usr/bin/python
+
+import errno
+import optparse
+import os
+import shutil
+import subprocess
+
+from cbuildbot_config import config
+
+# Utility functions
+
+def RunCommand(cmd, error_ok=False, error_message=None, exit_code=False,
+ redirect_stdout=False, redirect_stderr=False, cwd=None,
+ input=None):
+ # Useful for debugging:
+ # print >>sys.stderr, "RunCommand:", ' '.join(cmd)
+ if redirect_stdout:
+ stdout = subprocess.PIPE
+ else:
+ stdout = None
+ if redirect_stderr:
+ stderr = subprocess.PIPE
+ else:
+ stderr = None
+ if input:
+ stdin = subprocess.PIPE
+ else:
+ stdin = None
+ proc = subprocess.Popen(cmd, cwd=cwd, stdin=stdin,
+ stdout=stdout, stderr=stderr)
+ (output, error) = proc.communicate(input)
+ if exit_code:
+ return proc.returncode
+ if not error_ok and proc.returncode != 0:
+ raise Exception('Command "%s" failed.\n' % (' '.join(cmd)) +
+ (error_message or error or output or ''))
+ return output
+
+def MakeDir(path, parents=False):
+ try:
+ os.makedirs(path)
+ except OSError,e:
+ if e.errno == errno.EEXIST and parents:
+ pass
+ else:
+ raise
+
+# Main functions
+
+def _FullCheckout(buildroot):
+ MakeDir(buildroot, parents=True)
+ RunCommand(['repo', 'init', '-u', 'http://src.chromium.org/git/manifest'],
+ cwd=buildroot, input='\n\ny\n')
+ RunCommand(['repo', 'sync'], cwd=buildroot)
+ RunCommand(['repo', 'forall', '-c', 'git', 'config',
+ 'url.ssh://gitrw.chromium.org.pushinsteadof',
+ 'http://src.chromium.org/git'], cwd=buildroot)
+
+def _IncrementalCheckout(buildroot):
+ RunCommand(['repo', 'sync'], cwd=buildroot)
+
+def _MakeChroot(buildroot):
+ cwd = os.path.join(buildroot, 'src', 'scripts')
+ RunCommand(['./make_chroot', '--fast'], cwd=cwd)
+
+def _SetupBoard(buildroot, board='x86-generic'):
+ cwd = os.path.join(buildroot, 'src', 'scripts')
+ RunCommand(['./setup_board', '--fast', '--default', '--board=%s' % board],
+ cwd=cwd)
+
+def _Build(buildroot):
+ cwd = os.path.join(buildroot, 'src', 'scripts')
+ RunCommand(['./build_packages'], cwd=cwd)
+
+def _UprevPackages(buildroot):
+ cwd = os.path.join(buildroot, 'src', 'scripts')
+ RunCommand(['./enter_chroot.sh', '--', './cros_mark_all_as_stable',
+ '--tracking_branch="cros/master"'],
+ cwd=cwd)
+
+def _UprevCleanup(buildroot):
+ cwd = os.path.join(buildroot, 'src', 'scripts')
+ RunCommand(['./cros_mark_as_stable', '--srcroot=..',
+ '--tracking_branch="cros/master"', 'clean'],
+ cwd=cwd)
+
+def _UprevPush(buildroot):
+ cwd = os.path.join(buildroot, 'src', 'scripts')
+ RunCommand(['./cros_mark_as_stable', '--srcroot=..',
+ '--tracking_branch="cros/master"',
+ '--push_options', '--bypass-hooks -f', 'push'],
+ cwd=cwd)
+
+def _GetConfig(config_name):
+ default = config['default']
+ buildconfig = {}
+ if config.has_key(config_name):
+ buildconfig = config[config_name]
+ for key in default.iterkeys():
+ if not buildconfig.has_key(key):
+ buildconfig[key] = default[key]
+ return buildconfig
+
+def main():
+ # Parse options
+ parser = optparse.OptionParser()
+ parser.add_option('-r', '--buildroot',
+ help='root directory where build occurs', default=".")
+ parser.add_option('-n', '--buildnumber',
+ help='build number', type='int', default=0)
+ (options, args) = parser.parse_args()
+
+ buildroot = options.buildroot
+ buildconfig = _GetConfig(args[0])
+
+ try:
+ if not os.path.isdir(buildroot):
+ _FullCheckout(buildroot)
+ else:
+ _IncrementalCheckout(buildroot)
+ chroot_path = os.path.join(buildroot, 'chroot')
+ if not os.path.isdir(chroot_path):
+ _MakeChroot(buildroot)
+ boardpath = os.path.join(chroot_path, 'build', buildconfig['board'])
+ if not os.path.isdir(boardpath):
+ _SetupBoard(buildroot, board=buildconfig['board'])
+ if buildconfig['uprev']:
+ _UprevPackages(buildroot)
+ _Build(buildroot)
+ if buildconfig['uprev']:
+ _UprevPush(buildroot)
+ _UprevCleanup(buildroot)
+ except:
+ # something went wrong, cleanup (being paranoid) for next build
+ RunCommand(['sudo', 'rm', '-rf', buildroot])
+ raise
+
+if __name__ == '__main__':
+ main()
« no previous file with comments | « bin/cbuildbot ('k') | bin/cbuildbot_config.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698