def zipdir(path, url, log): import zipfile basename = op.basename(path) zipfile_path = op.join(path, '..', '%s.zip' % basename) zipf = zipfile.ZipFile(zipfile_path, 'w') for root, dirs, files in os.walk(path): root = root.replace(path, '').lstrip('/') for file in files: arcpath = op.join(basename, root, file) zipf.write(op.join(root, file), arcpath) log.write('add %s\n' % arcpath) zipf.close() log.write('### Link to archive [%s.zip](%s/%s.zip)\n' % (basename, url, basename))
def get_sources_lists(rootpath): """ Return list of lists of UFO, TTX and METADATA.json """ ufo_dirs = [] ttx_files = [] metadata_files = [] l = len(rootpath) for root, dirs, files in os.walk(rootpath): for f in files: fullpath = op.join(root, f) if op.splitext(fullpath[l:])[1].lower() in ['.ttx', ]: ttx_files.append(fullpath[l:]) if f.lower() == 'metadata.json': metadata_files.append(fullpath[:l]) for d in dirs: fullpath = op.join(root, d) if op.splitext(fullpath)[1].lower() == '.ufo': ufo_dirs.append(fullpath[l:]) return ufo_dirs, ttx_files, metadata_files
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()