Exemplo n.º 1
0
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
Exemplo n.º 2
0
    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')))
Exemplo n.º 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()
Exemplo n.º 4
0
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()