def download_files(self, recurse=True): """ Download package source code and build files. Optionally, do the same for its dependencies, recursively. """ update_packages_repos = CONF.get('build_packages').get( 'update_packages_repos_before_build') for source in self.sources: source_type = source.keys()[0] if source_type == 'url' or update_packages_repos: package_source.download(source, directory=PACKAGES_REPOS_TARGET_PATH, local_copy_subdir_name=self.name) else: # in git, git repo object must always be created for later git archive if source_type == 'git': source['git']['repo'] = repository.get_git_repository( source['git']['src'], PACKAGES_REPOS_TARGET_PATH) package_source.set_dest_dir(source, directory=PACKAGES_REPOS_TARGET_PATH, local_copy_subdir_name=self.name) # This is kept for backwards compatibility with older # 'versions' repositories. if self.clone_url: self._download_source_code() self._download_build_files() if recurse: for dep in (self.install_dependencies + self.build_dependencies): dep.download_files()
def download_files(self, recurse=True): """ Download package source code and build files. Optionally, do the same for its dependencies, recursively. """ update_packages_repos = CONF.get('update_packages_repos_before_build') for source in self.sources: source_type = source.keys()[0] if source_type == 'url' or update_packages_repos: package_source.download(source, directory=PACKAGES_REPOS_TARGET_PATH, local_copy_subdir_name=self.name) else: # in git, git repo object must always be created for later git archive if source_type == 'git': source['git']['repo'] = repository.get_git_repository( source['git']['src'], PACKAGES_REPOS_TARGET_PATH) package_source.set_dest_dir(source, directory=PACKAGES_REPOS_TARGET_PATH, local_copy_subdir_name=self.name) # This is kept for backwards compatibility with older # 'versions' repositories. if self.clone_url: self._download_source_code() self._download_build_files() if recurse: for dep in (self.install_dependencies + self.build_dependencies): dep.download_files()
def run(CONF): versions_repo = setup_versions_repository(CONF) version_milestone = read_version_and_milestone(versions_repo) packages_names = packages_manager.discover_packages() distro = distro_utils.get_distro( CONF.get('common').get('distro_name'), CONF.get('common').get('distro_version'), CONF.get('common').get('arch_and_endianness')) release_notes_repo_url = CONF.get('build_release_notes').get( 'release_notes_repo_url') release_notes_repo_branch = CONF.get('build_release_notes').get( 'release_notes_repo_branch') commit_updates = CONF.get('common').get('commit_updates') push_updates = CONF.get('common').get('push_updates') push_repo_url = CONF.get('build_release_notes').get('push_repo_url') push_repo_branch = CONF.get('build_release_notes').get('push_repo_branch') updater_name = CONF.get('common').get('updater_name') updater_email = CONF.get('common').get('updater_email') REQUIRED_PARAMETERS = [("common", "updater_name"), ("common", "updater_email")] if push_updates: REQUIRED_PARAMETERS += [("build_release_notes", "push_repo_url"), ("build_release_notes", "push_repo_branch")] for section, parameter in REQUIRED_PARAMETERS: if CONF.get(section).get(parameter) is None: raise exception.RequiredParameterMissing(parameter=parameter) LOG.info("Creating release notes with packages: {}".format( ", ".join(packages_names))) package_manager = packages_manager.PackagesManager(packages_names) package_manager.prepare_packages(packages_class=rpm_package.RPM_Package, download_source_code=False, distro=distro) repositories_dir_path = os.path.join( CONF.get('common').get('work_dir'), REPOSITORIES_DIR) website_repo = repository.get_git_repository(release_notes_repo_url, repositories_dir_path) website_repo.checkout(release_notes_repo_branch) WEBSITE_POSTS_DIR = "_posts" release_date = datetime.today().date().isoformat() release_tag = "{version}-{date}".format(version=version_milestone, date=release_date) release_file_name = RELEASE_FILE_NAME_TEMPLATE.format(date=release_date) release_file_path = os.path.join(website_repo.working_tree_dir, WEBSITE_POSTS_DIR, release_file_name) write_version_info(release_tag, release_file_path, versions_repo, package_manager.packages) if commit_updates: commit_release_notes(website_repo, release_date, updater_name, updater_email) if push_updates: push_website_head_commit(website_repo, push_repo_url, push_repo_branch)
def run(CONF): release_notes_repo_url = CONF.get('release_notes_repo_url') release_notes_repo_branch = CONF.get('release_notes_repo_branch') commit_updates = CONF.get('commit_updates') push_updates = CONF.get('push_updates') push_repo_url = CONF.get('push_repo_url') push_repo_branch = CONF.get('push_repo_branch') updater_name = CONF.get('updater_name') updater_email = CONF.get('updater_email') info_files_dir = CONF.get('info_files_dir') release_category = CONF.get('release_category') required_parameters = [] if commit_updates: required_parameters += ["updater_name", "updater_email"] if push_updates: required_parameters += ["push_repo_url", "push_repo_branch"] for parameter in required_parameters: if not CONF.get(parameter): raise exception.RequiredParameterMissing(parameter=parameter) LOG.info( "Creating release notes based on files at: {}".format(info_files_dir)) repositories_dir_path = os.path.join(CONF.get('work_dir'), REPOSITORIES_DIR) website_repo = repository.get_git_repository(release_notes_repo_url, repositories_dir_path) website_repo.checkout(release_notes_repo_branch) WEBSITE_POSTS_DIR = "_posts" build_info_file = os.path.join(info_files_dir, BUILD_INFO_FILE_NAME) build_info = json.load(open(build_info_file)) packages_info_file = os.path.join(info_files_dir, PACKAGES_INFO_FILE_NAME) packages_info = json.load(open(packages_info_file)) # timestamp format is YYYY-MM-DDThh:mm:ss.xxx release_date = build_info['timestamp'].split('T')[0] release_file_name = RELEASE_FILE_NAME_TEMPLATE.format( date=release_date, suffix=release_category) release_file_path = os.path.join(website_repo.working_tree_dir, WEBSITE_POSTS_DIR, release_file_name) write_version_info(release_file_path, release_category, release_date, build_info, packages_info) if commit_updates: commit_message = ( CONF.get('commit_message') or "Host OS release of {date}".format(date=release_date)) website_repo.commit_changes(commit_message, updater_name, updater_email) if push_updates: website_repo.push_head_commits(push_repo_url, push_repo_branch) LOG.info("Release notes built succesfully")
def setup_versions_repository(config): """ Clone and checkout the packages metadata git repository and halt execution if anything fails. """ path = os.path.join(config.get('common').get('work_dir'), REPOSITORIES_DIR) url = config.get('common').get('packages_metadata_repo_url') branch = config.get('common').get('packages_metadata_repo_branch') try: versions_repo = repository.get_git_repository(url, path) versions_repo.checkout(branch) except exception.RepositoryError: LOG.error("Failed to checkout versions repository") raise return versions_repo
def get_versions_repository(config): """ Get the packages metadata Git repository, cloning it if does not yet exist. Args: config (dict): configuration dictionary Raises: exception.RepositoryError: if the clone is unsuccessful """ path = os.path.join(config.get('work_dir'), REPOSITORIES_DIR) url = config.get('packages_metadata_repo_url') name = "versions_{subcommand}".format(subcommand=config.get('subcommand')) try: versions_repo = repository.get_git_repository(url, path, name) except exception.RepositoryError: LOG.error("Failed to clone versions repository") raise return versions_repo
def get_versions_repository(config): """ Get the packages metadata Git repository, cloning it if does not yet exist. Args: config (dict): configuration dictionary Raises: exception.RepositoryError: if the clone is unsuccessful """ path = os.path.join(config.get('work_dir'), REPOSITORIES_DIR) url = config.get('packages_metadata_repo_url') name = "versions_{subcommand}".format( subcommand=config.get('subcommand')) try: versions_repo = repository.get_git_repository(url, path, name) except exception.RepositoryError: LOG.error("Failed to clone versions repository") raise return versions_repo
def _setup_repository(self, dest=None, branch=None): self.repository = repository.get_git_repository( self.clone_url, dest) self.repository.checkout(self.commit_id or self.branch or branch)
def _setup_repository(self, dest=None, branch=None): self.repository = repository.get_git_repository(self.clone_url, dest) self.repository.checkout(self.commit_id or self.branch or branch)
def _download_repository(): return repository.get_git_repository(git_source['src'], directory)