def main(sources, config): rootpath = os.path.abspath('build/tmp') if not config: config = yaml.safe_load(open(BAKERY_CONFIGURATION_DEFAULTS)) else: config = yaml.safe_load(open(config)) if 'process_files' not in config: config['process_files'] = [] for source in sources: if source[-4:] in ['.ufo', '.ttx', '.ttf', '.otf', '.sfd']: # create config bakery.yaml from defaults config['process_files'].append(source) else: continue if os.path.isdir(source): shutil.copytree(source, rootpath) else: shutil.copy(source, rootpath) l = open(os.path.join(rootpath, '.bakery.yaml'), 'w') l.write(yaml.safe_dump(config)) l.close() try: b = Bakery(os.path.join(rootpath, '.bakery.yaml'), stdout_pipe=systdout) b.interactive = True b.run(with_upstream=True) finally: shutil.rmtree(rootpath) pass
def result_tests(self): param = {'login': self.project.login, 'id': self.project.id, 'revision': self.revision, 'build': self.id} builddir = os.path.join(app.config['DATA_ROOT'], '%(login)s/%(id)s.out/%(build)s.%(revision)s/' % param) if not os.path.exists(os.path.join(builddir, '.tests.yaml')): config = os.path.join(app.config['DATA_ROOT'], '%(login)s/%(id)s.in/.bakery.yaml' % self.project) b = Bakery(config, builddir=builddir) return b.result_tests_process() return yaml.safe_load(open(os.path.join(builddir, '.tests.yaml')))
def process_project(project, build, force_sync=False): """ Runs bake the project. Args: project: :class:`~bakery.models.Project` instance build: :class:`~bakery.models.ProjectBuild` instance force_sync: means that project has to be checked out before baking """ from bakery.app import app from cli.bakery import Bakery config = project.config # lazy loading configuration file if force_sync: project_git_sync(project) param = {'login': project.login, 'id': project.id, 'revision': build.revision, 'build': build.id} _out_log = op.join(app.config['DATA_ROOT'], ('%(login)s/%(id)s.out/' '%(build)s.%(revision)s.process.log') % param) _user = joinroot('%(login)s/' % param) def hide_abspath(content): return content.replace(_user, '') log = RedisFd(_out_log, 'w', write_pipeline=[hide_abspath]) # setup is set after 'bake' button is first pressed if project.config['local'].get('setup', None): # this code change upstream repository param = {'login': project.login, 'id': project.id, 'revision': build.revision, 'build': build.id} builddir = joinroot('%(login)s/%(id)s.out/%(build)s.%(revision)s/' % param) config = os.path.join(app.config['DATA_ROOT'], '%(login)s/%(id)s.in/.bakery.yaml' % project) project_root = os.path.join(app.config['DATA_ROOT'], '%(login)s/%(id)s.in' % project) b = Bakery(config, project_root, builddir=builddir, stdout_pipe=log) try: log.write('Bake Begins!\n', prefix='### ') b.run() log.write('ZIP result for download\n', prefix='### ') archive_name = '%(build)s.%(revision)s' % param archive_root = joinroot('%(login)s/%(id)s.out' % param) log.write('$ zip -r {0}.zip {0}'.format(archive_name)) import zipfile zipf = zipfile.ZipFile(op.join(archive_root, archive_name + '.zip'), 'w') for root, dirs, files in os.walk(op.join(archive_root, archive_name)): root = root.replace(op.join(archive_root, archive_name), '').lstrip('/') for file in files: arcpath = op.join(archive_name, root, file) log.write('add %s\n' % arcpath) zipf.write(op.join(archive_root, archive_name, root, file), arcpath) zipf.close() # zip out folder with revision url = app.config['DATA_URL'] url += '%(login)s/%(id)s.out' % param _ = 'Link to archive [%s.zip](%s/%s.zip)\n' % (archive_name, url, archive_name) log.write(_, prefix="### ") except Exception: log.write('ERROR: BUILD FAILED\n', prefix="### ") build.failed = True for line in b.errors_in_footer: log.write(line + '\n') raise finally: # save that project is done set_done(build) log.write('Bake Succeeded! Now see [Build History](/project/%s/build)\n' % project.id, prefix='### ') log.close()
def process_project(project, build, revision, force_sync=False): """ Runs bake the project. Args: project: :class:`~bakery.models.Project` instance build: :class:`~bakery.models.ProjectBuild` instance force_sync: means that project has to be checked out before baking """ from bakery.app import app from cli.bakery import Bakery config = project.config # lazy loading configuration file if force_sync: project_git_sync(project) param = {'login': project.login, 'id': project.id, 'revision': build.revision, 'build': build.id} _in = joinroot('%(login)s/%(id)s.in/' % param) _out_log = op.join(app.config['DATA_ROOT'], ('%(login)s/%(id)s.out/' '%(build)s.%(revision)s.process.log') % param) _user = joinroot('%(login)s/' % param) def hide_abspath(content): return content.replace(_user, '') log = RedisFd(_out_log, 'w', write_pipeline=[hide_abspath]) # setup is set after 'bake' button is first pressed if project.config['local'].get('setup', None): log.write('Preparing build\n', prefix='### ') git_checkout(_in, revision, log) # this code change upstream repository param = {'login': project.login, 'id': project.id, 'revision': build.revision, 'build': build.id} builddir = joinroot('%(login)s/%(id)s.out/%(build)s.%(revision)s/' % param) config = os.path.join(app.config['DATA_ROOT'], '%(login)s/%(id)s.in/.bakery.yaml' % project) b = Bakery(config, builddir=builddir, stdout_pipe=log) try: log.write('Bake Begins!\n', prefix='### ') b.run() log.write('ZIP result for download\n', prefix='### ') # zip out folder with revision # TODO: move these variable definitions inside zipdir() so # they are the same as other bake methods _out_src = op.join(app.config['DATA_ROOT'], ('%(login)s/%(id)s.out/' '%(build)s.%(revision)s') % param) _out_url = app.config['DATA_URL'] + '%(login)s/%(id)s.out' % param zipdir(_out_src, _out_url, log) except Exception: log.write('ERROR: BUILD FAILED\n', prefix="### ") build.failed = True for line in b.errors_in_footer: log.write(line + '\n') raise finally: # save that project is done set_done(build) log.write('Bake Succeeded!\n', prefix='### ') log.close()