def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Run the 'sourcedeb' job") add_argument_rosdistro_index_url(parser, required=True) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) parser.add_argument( '--source-dir', required=True, help='The directory where the package sources will be stored') add_argument_dockerfile_dir(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) data.update({ 'arch': get_system_architecture(), 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'uid': get_user_id(), }) create_dockerfile( 'release/sourcedeb_task.Dockerfile.em', data, args.dockerfile_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser(description="Run the 'sourcedeb' job") add_argument_rosdistro_index_url(parser, required=True) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) parser.add_argument( '--source-dir', required=True, help='The directory where the package sources will be stored') add_argument_dockerfile_dir(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) data.update({ 'arch': get_system_architecture(), 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'uid': get_user_id(), }) create_dockerfile('release/deb/sourcepkg_task.Dockerfile.em', data, args.dockerfile_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser(description="Run the 'sourcerpm' job") add_argument_rosdistro_index_url(parser, required=True) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_dockerfile_dir(parser) add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) add_argument_sourcepkg_dir(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) data.update({ 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'target_repository': None, 'uid': get_user_id(), }) create_dockerfile('release/rpm/sourcepkg_task.Dockerfile.em', data, args.dockerfile_dir) with open(os.path.join(args.dockerfile_dir, 'mock_config.cfg'), 'w') as mock_cfg: mock_cfg.write(expand_template('release/rpm/mock_config.cfg.em', data))
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Run the 'sourcedeb' job") add_argument_rosdistro_index_url(parser, required=True) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) parser.add_argument( '--source-dir', required=True, help='The directory where the package sources will be stored') add_argument_dockerfile_dir(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) data.update({ 'maintainer_email': '*****@*****.**', 'maintainer_name': 'Dirk Thomas', 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'uid': os.getuid(), }) create_dockerfile( 'release/sourcedeb_task.Dockerfile.em', data, args.dockerfile_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser(description="Run the 'binarydeb' job") add_argument_rosdistro_index_url(parser, required=True) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) add_argument_binarydeb_dir(parser) add_argument_dockerfile_dir(parser) add_argument_skip_download_sourcedeb(parser) add_argument_append_timestamp(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) data.update({ 'uid': get_user_id(), 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'skip_download_sourcedeb': args.skip_download_sourcedeb, 'binarydeb_dir': '/tmp/binarydeb', 'dockerfile_dir': '/tmp/docker_build_binarydeb', }) create_dockerfile('release/binarydeb_create_task.Dockerfile.em', data, args.dockerfile_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Run the 'binarydeb' job") add_argument_rosdistro_index_url(parser, required=True) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) add_argument_binarydeb_dir(parser) add_argument_dockerfile_dir(parser) add_argument_skip_download_sourcedeb(parser) add_argument_append_timestamp(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) data.update({ 'uid': get_user_id(), 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'skip_download_sourcedeb': args.skip_download_sourcedeb, 'binarydeb_dir': '/tmp/binarydeb', 'dockerfile_dir': '/tmp/docker_build_binarydeb', }) create_dockerfile( 'release/binarydeb_create_task.Dockerfile.em', data, args.dockerfile_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate a 'Dockerfile' for building the binarydeb") add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) add_argument_binarydeb_dir(parser) add_argument_dockerfile_dir(parser) args = parser.parse_args(argv) debian_package_name = get_debian_package_name( args.rosdistro_name, args.package_name) # get expected package version from rosdistro index = get_index(args.rosdistro_index_url) dist_file = get_distribution_file(index, args.rosdistro_name) assert args.package_name in dist_file.release_packages pkg = dist_file.release_packages[args.package_name] repo = dist_file.repositories[pkg.repository_name] package_version = repo.release_repository.version debian_package_version = package_version # find PKGBUILD dependencies pkgbuild_proc = subprocess.Popen(["/bin/bash","-c","source PKGBUILD ; echo $(printf \"'%s' \" \"${makedepends[@]}\") $(printf \"'%s' \" \"${depends[@]}\")"], stdout=subprocess.PIPE) pkgbuild_out,_ = pkgbuild_proc.communicate() archlinux_pkg_names = pkgbuild_proc.decode('ascii').split(" ") # generate Dockerfile data = { 'os_name': args.os_name, 'os_code_name': args.os_code_name, 'arch': args.arch, 'uid': get_user_id(), 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'dependencies': archlinux_pkg_names, 'rosdistro_name': args.rosdistro_name, 'package_name': args.package_name, 'binarydeb_dir': args.binarydeb_dir, } create_dockerfile( 'release/binary_archlinux_task.Dockerfile.em', data, args.dockerfile_dir) # output hints about necessary volumes to mount ros_buildfarm_basepath = os.path.normpath( os.path.join(os.path.dirname(__file__), '..', '..')) print('Mount the following volumes when running the container:') print(' -v %s:/tmp/ros_buildfarm:ro' % ros_buildfarm_basepath) print(' -v %s:/tmp/binary_archlinux' % args.binarydeb_dir)
def main(argv=sys.argv[1:]): with Scope('SUBSECTION', 'build binarydeb'): parser = argparse.ArgumentParser(description='Build package binarydeb') add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_sourcepkg_dir(parser) args = parser.parse_args(argv) return build_binarydeb(args.rosdistro_name, args.package_name, args.sourcepkg_dir)
def main(argv=sys.argv[1:]): with Scope('SUBSECTION', 'append build timestamp'): parser = argparse.ArgumentParser( description='Append current timestamp to package version') add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_sourcedeb_dir(parser) args = parser.parse_args(argv) return append_build_timestamp( args.rosdistro_name, args.package_name, args.sourcedeb_dir)
def main(argv=sys.argv[1:]): with Scope('SUBSECTION', 'append build timestamp'): parser = argparse.ArgumentParser( description='Append current timestamp to package version') add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_sourcedeb_dir(parser) args = parser.parse_args(argv) return append_build_timestamp(args.rosdistro_name, args.package_name, args.sourcedeb_dir)
def main(argv=sys.argv[1:]): with Scope('SUBSECTION', 'build binarydeb'): parser = argparse.ArgumentParser( description='Build package binarydeb') add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_sourcedeb_dir(parser) args = parser.parse_args(argv) return build_binarydeb( args.rosdistro_name, args.package_name, args.sourcedeb_dir)
def main(argv=sys.argv[1:]): with Scope('SUBSECTION', 'get sourcedeb'): parser = argparse.ArgumentParser( description='Get released package sourcedeb') add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_sourcedeb_dir(parser) add_argument_skip_download_sourcedeb(parser) args = parser.parse_args(argv) return get_sourcedeb( args.rosdistro_name, args.package_name, args.sourcedeb_dir, args.skip_download_sourcedeb)
def main(argv=sys.argv[1:]): with Scope('SUBSECTION', 'get sourcedeb'): parser = argparse.ArgumentParser( description='Get released package sourcedeb') add_argument_rosdistro_index_url(parser) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_sourcedeb_dir(parser) add_argument_skip_download_sourcedeb(parser) args = parser.parse_args(argv) return get_sourcedeb( args.rosdistro_index_url, args.rosdistro_name, args.package_name, args.sourcedeb_dir, args.skip_download_sourcedeb)
def main(argv=sys.argv[1:]): with Scope('SUBSECTION', 'get sources'): parser = argparse.ArgumentParser( description="Get released package sources") add_argument_rosdistro_index_url(parser) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_source_dir(parser) args = parser.parse_args(argv) return get_sources( args.rosdistro_index_url, args.rosdistro_name, args.package_name, args.os_name, args.os_code_name, args.source_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate a 'release' job on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) args = parser.parse_args(argv) return configure_release_job( args.config_url, args.rosdistro_name, args.release_build_name, args.package_name, args.os_name, args.os_code_name)
def main(argv=sys.argv[1:]): with Scope('SUBSECTION', 'build sourcerpm'): parser = argparse.ArgumentParser( description='Build package sourcerpm') add_argument_rosdistro_index_url(parser) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_source_dir(parser) args = parser.parse_args(argv) return build_sourcerpm( args.rosdistro_index_url, args.rosdistro_name, args.package_name, args.os_name, args.os_code_name, args.source_dir)
def main(argv=sys.argv[1:]): with Scope('SUBSECTION', 'get sources'): parser = argparse.ArgumentParser( description="Get released package sources") add_argument_rosdistro_index_url(parser) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_source_dir(parser) args = parser.parse_args(argv) return get_sources( args.rosdistro_index_url, args.rosdistro_name, args.package_name, args.os_name, args.os_code_name, args.source_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate a 'release' job on Jenkins") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) args = parser.parse_args(argv) return configure_release_job(args.config_url, args.rosdistro_name, args.release_build_name, args.package_name, args.os_name, args.os_code_name)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser(description="Run the 'binarypkg' job") add_argument_rosdistro_index_url(parser, required=True) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) add_argument_target_repository(parser) add_argument_dockerfile_dir(parser) add_argument_skip_download_sourcepkg(parser) add_argument_append_timestamp(parser) add_argument_env_vars(parser) add_argument_binarypkg_dir(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) data.update({ 'uid': get_user_id(), 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'target_repository': os.path.join(args.target_repository, args.os_code_name, 'SRPMS'), 'skip_download_sourcepkg': args.skip_download_sourcepkg, 'sourcepkg_dir': os.path.join(args.binarypkg_dir, 'source'), 'build_environment_variables': args.env_vars, }) create_dockerfile('release/rpm/binarypkg_task.Dockerfile.em', data, args.dockerfile_dir) with open(os.path.join(args.dockerfile_dir, 'mock_config.cfg'), 'w') as mock_cfg: mock_cfg.write(expand_template('release/rpm/mock_config.cfg.em', data))
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Run the 'binarydeb' job") add_argument_rosdistro_index_url(parser, required=True) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) add_argument_target_repository(parser) add_argument_binarypkg_dir(parser) add_argument_dockerfile_dir(parser) add_argument_skip_download_sourcepkg(parser) add_argument_append_timestamp(parser) add_argument_env_vars(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) data.update({ 'uid': get_user_id(), 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'target_repository': args.target_repository, 'skip_download_sourcepkg': args.skip_download_sourcepkg, 'binarypkg_dir': '/tmp/binarydeb', 'build_environment_variables': ['%s=%s' % key_value for key_value in args.env_vars.items()], 'dockerfile_dir': '/tmp/docker_build_binarydeb', }) create_dockerfile( 'release/deb/binarypkg_create_task.Dockerfile.em', data, args.dockerfile_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate a 'Dockerfile' for building the binarydeb") add_argument_rosdistro_index_url(parser) add_argument_rosdistro_name(parser) add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) add_argument_distribution_repository_urls(parser) add_argument_distribution_repository_key_files(parser) add_argument_binarydeb_dir(parser) add_argument_dockerfile_dir(parser) add_argument_env_vars(parser) args = parser.parse_args(argv) debian_package_name = get_debian_package_name( args.rosdistro_name, args.package_name) # get expected package version from rosdistro index = get_index(args.rosdistro_index_url) dist_file = get_distribution_file(index, args.rosdistro_name) assert args.package_name in dist_file.release_packages pkg = dist_file.release_packages[args.package_name] repo = dist_file.repositories[pkg.repository_name] package_version = repo.release_repository.version debian_package_version = package_version # build_binarydeb dependencies debian_pkg_names = ['apt-src'] # add build dependencies from .dsc file dsc_file = get_dsc_file( args.binarydeb_dir, debian_package_name, debian_package_version) debian_pkg_names += sorted(get_build_depends(dsc_file)) # get versions for build dependencies apt_cache = Cache() debian_pkg_versions = get_binary_package_versions( apt_cache, debian_pkg_names) # generate Dockerfile data = { 'os_name': args.os_name, 'os_code_name': args.os_code_name, 'arch': args.arch, 'uid': get_user_id(), 'distribution_repository_urls': args.distribution_repository_urls, 'distribution_repository_keys': get_distribution_repository_keys( args.distribution_repository_urls, args.distribution_repository_key_files), 'build_environment_variables': args.env_vars, 'dependencies': debian_pkg_names, 'dependency_versions': debian_pkg_versions, 'install_lists': [], 'rosdistro_name': args.rosdistro_name, 'package_name': args.package_name, 'binarydeb_dir': args.binarydeb_dir, } create_dockerfile( 'release/binarydeb_task.Dockerfile.em', data, args.dockerfile_dir) # output hints about necessary volumes to mount ros_buildfarm_basepath = os.path.normpath( os.path.join(os.path.dirname(__file__), '..', '..')) print('Mount the following volumes when running the container:') print(' -v %s:/tmp/ros_buildfarm:ro' % ros_buildfarm_basepath) print(' -v %s:/tmp/binarydeb' % args.binarydeb_dir)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser(description="Generate a 'release' script") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) parser.add_argument('--skip-install', action='store_true', help='Skip trying to install binarydeb') args = parser.parse_args(argv) # collect all template snippets of specific types class IncludeHook(Hook): def __init__(self): Hook.__init__(self) self.scripts = [] def beforeFile(self, *args, **kwargs): template_path = kwargs['file'].name if template_path.endswith('/release/binarydeb_job.xml.em'): self.scripts.append('--') if template_path.endswith('/snippet/builder_shell.xml.em'): self.scripts.append(kwargs['locals']['script']) hook = IncludeHook() from ros_buildfarm import templates templates.template_hooks = [hook] configure_release_job(args.config_url, args.rosdistro_name, args.release_build_name, args.package_name, args.os_name, args.os_code_name, jenkins=False, views=[], generate_import_package_job=False, generate_sync_packages_jobs=False, filter_arches=args.arch) templates.template_hooks = None source_job_name = get_sourcedeb_job_name(args.rosdistro_name, args.release_build_name, args.package_name, args.os_name, args.os_code_name) binary_job_name = get_binarydeb_job_name(args.rosdistro_name, args.release_build_name, args.package_name, args.os_name, args.os_code_name, args.arch) separator_index = hook.scripts.index('--') source_scripts = hook.scripts[:separator_index] binary_scripts = hook.scripts[separator_index + 1:] # inject additional argument to skip fetching sourcedeb from repo script_name = '/run_binarydeb_job.py ' additional_argument = '--skip-download-sourcedeb ' for i, script in enumerate(binary_scripts): offset = script.find(script_name) if offset != -1: offset += len(script_name) script = script[:offset] + additional_argument + script[offset:] binary_scripts[i] = script break # remove rm command for sourcedeb location rm_command = 'rm -fr $WORKSPACE/binarydeb' for i, script in enumerate(binary_scripts): offset = script.find(rm_command) if offset != -1: script = script[:offset] + script[offset + len(rm_command):] binary_scripts[i] = script break if args.skip_install: # remove install step script_name = '/create_binarydeb_install_task_generator.py ' for i, script in enumerate(binary_scripts): offset = script.find(script_name) if offset != -1: del binary_scripts[i] break value = expand_template('release/release_script.sh.em', { 'source_job_name': source_job_name, 'binary_job_name': binary_job_name, 'source_scripts': source_scripts, 'binary_scripts': binary_scripts }, options={BANGPATH_OPT: False}) value = value.replace('python3', sys.executable) print(value)
def main(argv=sys.argv[1:]): parser = argparse.ArgumentParser( description="Generate a 'release' script") add_argument_config_url(parser) add_argument_rosdistro_name(parser) add_argument_build_name(parser, 'release') add_argument_package_name(parser) add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) parser.add_argument( '--skip-install', action='store_true', help='Skip trying to install binarydeb') args = parser.parse_args(argv) # collect all template snippets of specific types class IncludeHook(Hook): def __init__(self): Hook.__init__(self) self.scripts = [] def beforeFile(self, *args, **kwargs): template_path = kwargs['file'].name if template_path.endswith('/release/binarydeb_job.xml.em'): self.scripts.append('--') if template_path.endswith('/snippet/builder_shell.xml.em'): self.scripts.append(kwargs['locals']['script']) hook = IncludeHook() from ros_buildfarm import templates templates.template_hooks = [hook] configure_release_job( args.config_url, args.rosdistro_name, args.release_build_name, args.package_name, args.os_name, args.os_code_name, jenkins=False, views=[], generate_import_package_job=False, generate_sync_packages_jobs=False, filter_arches=args.arch) templates.template_hooks = None source_job_name = get_sourcedeb_job_name( args.rosdistro_name, args.release_build_name, args.package_name, args.os_name, args.os_code_name) binary_job_name = get_binarydeb_job_name( args.rosdistro_name, args.release_build_name, args.package_name, args.os_name, args.os_code_name, args.arch) separator_index = hook.scripts.index('--') source_scripts = hook.scripts[:separator_index] binary_scripts = hook.scripts[separator_index + 1:] # inject additional argument to skip fetching sourcedeb from repo script_name = '/run_binarydeb_job.py ' additional_argument = '--skip-download-sourcedeb ' for i, script in enumerate(binary_scripts): offset = script.find(script_name) if offset != -1: offset += len(script_name) script = script[:offset] + additional_argument + script[offset:] binary_scripts[i] = script break # remove rm command for sourcedeb location rm_command = 'rm -fr $WORKSPACE/binarydeb' for i, script in enumerate(binary_scripts): offset = script.find(rm_command) if offset != -1: script = script[:offset] + script[offset + len(rm_command):] binary_scripts[i] = script break if args.skip_install: # remove install step script_name = '/create_binarydeb_install_task_generator.py ' for i, script in enumerate(binary_scripts): offset = script.find(script_name) if offset != -1: del binary_scripts[i] break value = expand_template( 'release/release_script.sh.em', { 'source_job_name': source_job_name, 'binary_job_name': binary_job_name, 'source_scripts': source_scripts, 'binary_scripts': binary_scripts}, options={BANGPATH_OPT: False}) value = value.replace('python3', sys.executable) print(value)