Exemple #1
0
    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()
Exemple #2
0
    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()
Exemple #3
0
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")
Exemple #5
0
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
Exemple #8
0
 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)
Exemple #9
0
 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)
Exemple #10
0
 def _download_repository():
     return repository.get_git_repository(git_source['src'], directory)