def build_binarydeb(rosdistro_name, package_name, sourcedeb_dir): # ensure that one source subfolder exists debian_package_name = get_debian_package_name(rosdistro_name, package_name) subfolders = _get_package_subfolders(sourcedeb_dir, debian_package_name) assert len(subfolders) == 1, subfolders source_dir = subfolders[0] source, version = dpkg_parsechangelog(source_dir, ['Source', 'Version']) # output package version for job description print("Package '%s' version: %s" % (debian_package_name, version)) cmd = ['apt-src', 'import', source, '--here', '--version', version] subprocess.check_call(cmd, cwd=source_dir) cmd = ['apt-src', 'build', source] print("Invoking '%s' in '%s'" % (' '.join(cmd), source_dir)) try: subprocess.check_call(cmd, cwd=source_dir) except subprocess.CalledProcessError: traceback.print_exc() sys.exit(""" -------------------------------------------------------------------------------------------------- `{0}` failed. This is usually because of an error building the package. The traceback from this failure (just above) is printed for completeness, but you can ignore it. You should look above `E: Building failed` in the build log for the actual cause of the failure. -------------------------------------------------------------------------------------------------- """.format(' '.join(cmd)))
def append_build_timestamp(rosdistro_name, package_name, sourcedeb_dir): # ensure that one source subfolder exists debian_package_name = get_debian_package_name(rosdistro_name, package_name) subfolders = _get_package_subfolders(sourcedeb_dir, debian_package_name) assert len(subfolders) == 1, subfolders source_dir = subfolders[0] source, version, distribution, urgency = dpkg_parsechangelog( source_dir, ['Source', 'Version', 'Distribution', 'Urgency']) cmd = [ 'debchange', '-v', '%s.%s' % (version, strftime('%Y%m%d.%H%M%S', gmtime())) # Backwards compatibility for #460 if rosdistro_name not in ('indigo', 'jade', 'kinetic', 'lunar') else '%s-%s' % (version, strftime('%Y%m%d-%H%M%S%z')), '-p', # preserve directory name '-D', distribution, '-u', urgency, '-m', # keep maintainer details 'Append timestamp when binarydeb was built.', ] print("Invoking '%s' in '%s'" % (' '.join(cmd), source_dir)) subprocess.check_call(cmd, cwd=source_dir)
def append_build_timestamp(rosdistro_name, package_name, sourcedeb_dir): # ensure that one source subfolder exists debian_package_name = get_debian_package_name(rosdistro_name, package_name) subfolders = _get_package_subfolders(sourcedeb_dir, debian_package_name) assert len(subfolders) == 1, subfolders source_dir = subfolders[0] source, version, distribution, urgency = dpkg_parsechangelog( source_dir, ['Source', 'Version', 'Distribution', 'Urgency']) cmd = [ 'debchange', '-v', '%s.%s' % (version, strftime('%Y%m%d.%H%M%S', gmtime())) # Backwards compatibility for #460 if rosdistro_name not in ( 'indigo', 'jade', 'kinetic', 'lunar', 'ardent') else '%s-%s' % (version, strftime('%Y%m%d-%H%M%S%z')), '-p', # preserve directory name '-D', distribution, '-u', urgency, '-m', # keep maintainer details 'Append timestamp when binarydeb was built.', ] print("Invoking '%s' in '%s'" % (' '.join(cmd), source_dir)) subprocess.check_call(cmd, cwd=source_dir)
def build_binarydeb(rosdistro_name, package_name, sourcedeb_dir): # ensure that one source subfolder exists debian_package_name = get_debian_package_name(rosdistro_name, package_name) subfolders = _get_package_subfolders(sourcedeb_dir, debian_package_name) assert len(subfolders) == 1, subfolders source_dir = subfolders[0] source, version = dpkg_parsechangelog( source_dir, ['Source', 'Version']) # output package version for job description print("Package '%s' version: %s" % (debian_package_name, version)) cmd = ['apt-src', 'import', source, '--here', '--version', version] subprocess.check_call(cmd, cwd=source_dir) cmd = ['apt-src', 'build', source] print("Invoking '%s' in '%s'" % (' '.join(cmd), source_dir)) try: subprocess.check_call(cmd, cwd=source_dir) except subprocess.CalledProcessError: traceback.print_exc() sys.exit(""" -------------------------------------------------------------------------------------------------- `{0}` failed. This is usually because of an error building the package. The traceback from this failure (just above) is printed for completeness, but you can ignore it. You should look above `E: Building failed` in the build log for the actual cause of the failure. -------------------------------------------------------------------------------------------------- """.format(' '.join(cmd)))
def get_sources(rosdistro_index_url, rosdistro_name, pkg_name, os_name, os_code_name, sources_dir): from rosdistro import get_distribution_file from rosdistro import get_index index = get_index(rosdistro_index_url) dist_file = get_distribution_file(index, rosdistro_name) if pkg_name not in dist_file.release_packages: return "Not a released package name: %s" % pkg_name pkg = dist_file.release_packages[pkg_name] repo_name = pkg.repository_name repo = dist_file.repositories[repo_name] if not repo.release_repository.version: return "Repository '%s' has no release version" % repo_name pkg_version = repo.release_repository.version tag = _get_source_tag(rosdistro_name, pkg_name, pkg_version, os_name, os_code_name) cmd = [ "git", "clone", "--branch", tag, # fetch all branches and tags but no history "--depth", "1", "--no-single-branch", repo.release_repository.url, sources_dir, ] print("Invoking '%s'" % " ".join(cmd)) subprocess.check_call(cmd) # ensure that the package version is correct source_version = dpkg_parsechangelog(sources_dir, ["Version"])[0] if not source_version.startswith(pkg_version) or ( len(source_version) > len(pkg_version) and source_version[len(pkg_version)] in "0123456789" ): raise RuntimeError( ( "The cloned package version from the GBP (%s) does not match " + "the expected package version from the distribution file (%s)" ) % (source_version, pkg_version) ) # output package version for job description print("Package '%s' version: %s" % (pkg_name, source_version)) # output package maintainers for job notification from catkin_pkg.package import parse_package pkg = parse_package(sources_dir) maintainer_emails = set([]) for m in pkg.maintainers: maintainer_emails.add(m.email) if maintainer_emails: print("Package maintainer emails: %s" % " ".join(sorted(maintainer_emails)))
def get_sources(rosdistro_index_url, rosdistro_name, pkg_name, os_name, os_code_name, sources_dir): from rosdistro import get_cached_distribution from rosdistro import get_index index = get_index(rosdistro_index_url) dist_file = get_cached_distribution(index, rosdistro_name) if pkg_name not in dist_file.release_packages: return 'Not a released package name: %s' % pkg_name pkg = dist_file.release_packages[pkg_name] repo_name = pkg.repository_name repo = dist_file.repositories[repo_name] if not repo.release_repository.version: return "Repository '%s' has no release version" % repo_name pkg_version = repo.release_repository.version tag = _get_source_tag(rosdistro_name, pkg_name, pkg_version, os_name, os_code_name) cmd = [ 'git', 'clone', '--branch', tag, # fetch all branches and tags but no history '--depth', '1', '--no-single-branch', repo.release_repository.url, sources_dir ] print("Invoking '%s'" % ' '.join(cmd)) subprocess.check_call(cmd) # ensure that the package version is correct source_version = dpkg_parsechangelog(sources_dir, ['Version'])[0] if not source_version.startswith(pkg_version) or \ (len(source_version) > len(pkg_version) and source_version[len(pkg_version)] in '0123456789'): raise RuntimeError( ('The cloned package version from the GBP (%s) does not match ' + 'the expected package version from the distribution file (%s)') % (source_version, pkg_version)) # output package version for job description print("Package '%s' version: %s" % (pkg_name, source_version)) # output package maintainers for job notification from catkin_pkg.package import parse_package pkg = parse_package(sources_dir) maintainer_emails = set([]) for m in pkg.maintainers: maintainer_emails.add(m.email) if maintainer_emails: print('Package maintainer emails: %s' % ' '.join(sorted(maintainer_emails)))
def build_binarydeb(rosdistro_name, package_name, sourcedeb_dir): # ensure that one source subfolder exists debian_package_name = get_debian_package_name(rosdistro_name, package_name) subfolders = _get_package_subfolders(sourcedeb_dir, debian_package_name) assert len(subfolders) == 1, subfolders source_dir = subfolders[0] source, version = dpkg_parsechangelog( source_dir, ['Source', 'Version']) # output package version for job description print("Package '%s' version: %s" % (debian_package_name, version)) cmd = ['apt-src', 'import', source, '--here', '--version', version] subprocess.check_call(cmd, cwd=source_dir) cmd = ['apt-src', 'build', source] print("Invoking '%s' in '%s'" % (' '.join(cmd), source_dir)) subprocess.check_call(cmd, cwd=source_dir)
def get_sources(rosdistro_index_url, rosdistro_name, pkg_name, os_name, os_code_name, sources_dir, debian_repository_urls): from rosdistro import get_cached_distribution from rosdistro import get_index index = get_index(rosdistro_index_url) dist_file = get_cached_distribution(index, rosdistro_name) if pkg_name not in dist_file.release_packages: return 'Not a released package name: %s' % pkg_name pkg = dist_file.release_packages[pkg_name] repo_name = pkg.repository_name repo = dist_file.repositories[repo_name] if not repo.release_repository.version: return "Repository '%s' has no release version" % repo_name pkg_version = repo.release_repository.version tag = _get_source_tag(rosdistro_name, pkg_name, pkg_version, os_name, os_code_name) cmd = [ 'git', 'clone', '--branch', tag, # fetch all branches and tags but no history '--depth', '1', '--no-single-branch', repo.release_repository.url, sources_dir ] print("Invoking '%s'" % ' '.join(cmd)) subprocess.check_call(cmd) # ensure that the package version is correct source_version = dpkg_parsechangelog(sources_dir, ['Version'])[0] if not source_version.startswith(pkg_version) or \ (len(source_version) > len(pkg_version) and source_version[len(pkg_version)] in '0123456789'): raise RuntimeError( ('The cloned package version from the GBP (%s) does not match ' + 'the expected package version from the distribution file (%s)') % (source_version, pkg_version)) # If a tarball already exists reuse it origtgz_version = pkg_version.split('-')[0] debian_package_name = get_os_package_name(rosdistro_name, pkg_name) filename = '%s_%s.orig.tar.gz' % (debian_package_name, origtgz_version) URL_TEMPLATE = '%s/pool/main/%s/%s/%s' prefix = debian_package_name[0] for repo in debian_repository_urls: url = URL_TEMPLATE % (repo, prefix, debian_package_name, filename) output_file = os.path.join(sources_dir, '..', filename) try: urlretrieve(url, output_file) print("Downloaded original tarball '%s' to '%s'" % (url, output_file)) break except HTTPError: print("No tarball found at '%s'" % url) # output package version for job description print("Package '%s' version: %s" % (pkg_name, source_version)) # output package maintainers for job notification from catkin_pkg.package import parse_package pkg = parse_package(sources_dir) maintainer_emails = set([]) for m in pkg.maintainers: maintainer_emails.add(m.email) if maintainer_emails: print('Package maintainer emails: %s' % ' '.join(sorted(maintainer_emails)))