Exemplo n.º 1
0
    def build(self, src_name, src_dir, env=None):
        # copy files into shared volume
        shared_dir = os.path.join(self.settings['build-dir'], src_name)
        host.execute('mkdir -p %s' % shared_dir)
        src_dir = os.path.abspath(src_dir)
        parent_dir, src = os.path.dirname(src_dir), os.path.basename(src_dir)
        args = [
            "rsync --delete-excluded --recursive",
            "--include='%s'" % src,
            "--include='%s/*'" % src,
            "--include='%s/**/*'" % src,
            "--include='%s_*.orig.*'" % src_name,
            "--include='%s.orig.*'" % src_name,
            "--exclude='*'",
            "%s/" % parent_dir,
            "%s/" % shared_dir,
        ]
        host.execute(' '.join(args))

        # build packages

        client = connect()

        work_dir = os.path.join('/meuh/build', src_name, src)
        env = ctx.inline(env or {})

        for cmd in self.settings['publish-commands']:
            formatted = ['/bin/sh', '-c', '%s' % cmd]
            logger.info('execute %s', cmd)
            for res in client.execute(self.container_id,
                                      cmd=formatted,
                                      stream=True):
                print(res, end='')

        for cmd in self.settings['build-commands']:
            formatted = ['/bin/sh',
                         '-c',
                         'cd %s && %s %s' % (work_dir, env, cmd)]
            logger.info('execute %s', 'cd %s && %s %s' % (work_dir, env, cmd))
            for res in client.execute(self.container_id,
                                      cmd=formatted,
                                      stream=True):
                print(res, end='')

        # publish results
        args = [
            "rsync --recursive",
            "--include='*.deb'",
            "--include='*.udeb'",
            "--include='*.dsc'",
            "--include='*.changes'",
            "--exclude='*'",
            "%s/" % os.path.join('/meuh/build', src_name),
            '/meuh/publish'
        ]
        self.execute(' '.join(args))
        logger.info('artifacts are published into /meuh/publish')
Exemplo n.º 2
0
    def build2(self, src, env=None):
        client = connect()
        src_dir = os.path.join('/meuh/build', src)
        env = ctx.inline(env or {})

        for cmd in self.settings['publish-commands']:
            formatted = ['/bin/sh', '-c', '%s' % cmd]
            logger.info('execute %s', cmd)
            for res in client.execute(self.container_id,
                                      cmd=formatted,
                                      stream=True):
                print(res, end='')

        for cmd in self.settings['build-commands']:
            formatted = ['/bin/sh',
                         '-c',
                         'cd %s && %s %s' % (src_dir, env, cmd)]
            logger.info('execute %s', 'cd %s && %s %s' % (src_dir, env, cmd))
            for res in client.execute(self.container_id,
                                      cmd=formatted,
                                      stream=True):
                print(res, end='')