Merge pull request #48 from blueboxgroup/parallel

Add parallel builds
This commit is contained in:
Paul Czarkowski 2015-10-09 22:33:39 -05:00
commit 2927ba7f6d
4 changed files with 21 additions and 4 deletions

View File

@ -22,7 +22,7 @@ from giftwrap.settings import Settings
class BuildSpec(object):
def __init__(self, manifest, version, build_type=None):
def __init__(self, manifest, version, build_type=None, parallel=True):
self._manifest = yaml.load(manifest)
self.version = version
self.build_type = build_type
@ -31,6 +31,7 @@ class BuildSpec(object):
manifest_settings['version'] = version
if build_type:
manifest_settings['build_type'] = build_type
manifest_settings['parallel_build'] = parallel
self.settings = Settings.factory(manifest_settings)
self.projects = self._render_projects()

View File

@ -16,6 +16,7 @@
import logging
import os
import threading
from giftwrap.gerrit import GerritReview
@ -84,8 +85,19 @@ class Builder(object):
self._temp_src_dir = os.path.join(self._temp_dir, 'src')
LOG.debug("Temporary working directory: %s", self._temp_dir)
threads = []
for project in spec.projects:
self._build_project(project)
if spec.settings.parallel_build:
t = threading.Thread(target=self._build_project,
args=(project,))
threads.append(t)
t.start()
else:
self._build_project(project)
if spec.settings.parallel_build:
for thread in threads:
thread.join()
self._finalize_build()

View File

@ -30,7 +30,8 @@ class Settings(object):
def __init__(self, build_type=DEFAULT_BUILD_TYPE,
package_name_format=None, version=None,
base_path=None, install_path=None, gerrit_dependencies=True,
force_overwrite=False, output_dir=None, include_config=True):
force_overwrite=False, output_dir=None, include_config=True,
parallel_build=True):
if not version:
raise Exception("'version' is a required settings")
self.build_type = build_type
@ -42,6 +43,7 @@ class Settings(object):
self.force_overwrite = force_overwrite
self._output_dir = output_dir
self.include_config = include_config
self.parallel_build = parallel_build
@property
def package_name_format(self):

View File

@ -46,7 +46,7 @@ def build(args):
with open(args.manifest, 'r') as fh:
manifest = fh.read()
buildspec = BuildSpec(manifest, args.version, args.type)
buildspec = BuildSpec(manifest, args.version, args.type, args.parallel)
builder = BuilderFactory.create_builder(args.type, buildspec)
def _signal_handler(*args):
@ -80,6 +80,8 @@ def main():
build_subcmd.add_argument('-v', '--version')
build_subcmd.add_argument('-t', '--type', choices=('docker', 'package'),
required=True)
build_subcmd.add_argument('-s', '--synchronous', dest='parallel',
action='store_false')
build_subcmd.set_defaults(func=build)
args = parser.parse_args()