Exemple #1
0
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))
Exemple #2
0
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
Exemple #3
0
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()