示例#1
0
    def _rls_note_objs(
        self,
        repository_branch: str = None,
        commit_range: str = None,
    ) -> typing.List[ReleaseNote]:
        if not commit_range:
            commit_range = self.calculate_range(repository_branch, )
        info(f'Fetching release notes from revision range: {commit_range}')
        commits = self.commits_in_range(
            commit_range=commit_range,
            repository_branch=repository_branch,
        )
        pr_numbers = fetch_pr_numbers_from_commits(commits=commits)
        verbose(
            f'Merged pull request numbers in range {commit_range}: {pr_numbers}'
        )
        release_note_objs = self.fetch_release_notes_from_prs(
            pr_numbers_in_range=pr_numbers, )
        release_note_objs.extend(
            fetch_release_notes_from_commits(
                commits=commits,
                current_component=self.component,
            ))

        return release_note_objs
示例#2
0
    def _scan_repository_for_definitions(
        self,
        repository,
        github_cfg,
        org_name,
    ) -> RawPipelineDefinitionDescriptor:
        for branch_name, cfg_entry in self._determine_repository_branches(
                repository=repository):
            try:
                definitions = repository.file_contents(
                    path='.ci/pipeline_definitions', ref=branch_name)
            except NotFoundError:
                continue  # no pipeline definition for this branch

            repo_hostname = urlparse(github_cfg.http_url()).hostname
            override_definitions = cfg_entry.override_definitions(
            ) if cfg_entry else {}

            verbose('from repo: ' + repository.name + ':' + branch_name)
            try:
                decoded_definitions = definitions.decoded.decode('utf-8')
                info(
                    f'Linting pipeline_definitions for {repository} on branch {branch_name}'
                )
                lint_yaml(decoded_definitions)
                definitions = load_yaml(decoded_definitions)

            except BaseException as e:
                repo_path = f'{org_name}/{repository.name}'
                yield DefinitionDescriptor(
                    pipeline_name='<invalid YAML>',
                    pipeline_definition={},
                    main_repo={
                        'path': repo_path,
                        'branch': branch_name,
                        'hostname': repo_hostname
                    },
                    concourse_target_cfg=self.cfg_set.concourse(),
                    concourse_target_team=self.job_mapping.team_name(),
                    override_definitions=(),
                    exception=e,
                )
                return  # nothing else to yield in case parsing failed

            # handle inheritance
            definitions = merge_dicts(definitions, override_definitions)

            yield from self._wrap_into_descriptors(
                repo_path='/'.join([org_name, repository.name]),
                repo_hostname=repo_hostname,
                branch=branch_name,
                raw_definitions=definitions,
                override_definitions=override_definitions,
            )
示例#3
0
文件: util.py 项目: zkdev/cc-utils
def _rls_note_objs(github_helper: GitHubRepositoryHelper,
                   git_helper: GitHelper,
                   repository_branch: str = None,
                   commit_range: str = None) -> [ReleaseNote]:
    cn_current_repo = ComponentName.from_github_repo_url(
        github_helper.repository.html_url)

    if not commit_range:
        commit_range = calculate_range(repository_branch, git_helper,
                                       github_helper)
    info('Fetching release notes from revision range: {range}'.format(
        range=commit_range))
    commits = commits_in_range(git_helper.repo, commit_range,
                               repository_branch)
    pr_numbers = fetch_pr_numbers_from_commits(commits)
    verbose(
        'Merged pull request numbers in range {range}: {pr_numbers}'.format(
            range=commit_range, pr_numbers=pr_numbers))
    release_note_objs = fetch_release_notes_from_prs(github_helper, pr_numbers,
                                                     cn_current_repo)
    release_note_objs.extend(
        fetch_release_notes_from_commits(commits, cn_current_repo))

    return release_note_objs
示例#4
0
    def _scan_repository_for_definitions(
        self,
        repository,
        github_cfg,
        org_name,
        repository_filter: callable = None,
        target_team: str = None,
    ) -> RawPipelineDefinitionDescriptor:

        repo_hostname = urlparse(github_cfg.http_url()).hostname
        repo_path = f'{org_name}/{repository.name}'

        if not target_team:
            target_team = self.job_mapping.team_name()

        try:
            branches_and_cfg_entries = [
                i for i in self._determine_repository_branches(
                    repository=repository)
            ]
        except yaml.scanner.ScannerError as e:
            yield DefinitionDescriptor(
                pipeline_name='<invalid YAML>',
                pipeline_definition=None,
                main_repo={
                    'path': repo_path,
                    'branch': 'refs/meta/ci',
                    'hostname': repo_hostname
                },
                concourse_target_cfg=self.cfg_set.concourse(),
                concourse_target_team=target_team,
                override_definitions=(),
                exception=e,
            )
            return  # nothing else to yield in case parsing the branch cfg failed

        for branch_name, cfg_entry in branches_and_cfg_entries:
            try:
                definitions = repository.file_contents(
                    path='.ci/pipeline_definitions', ref=branch_name)
            except NotFoundError:
                continue  # no pipeline definition for this branch

            override_definitions = cfg_entry.override_definitions(
            ) if cfg_entry else {}

            verbose('from repo: ' + repository.name + ':' + branch_name)
            try:
                decoded_definitions = definitions.decoded.decode('utf-8')
                info(
                    f'Linting pipeline_definitions for {repository} on branch {branch_name}'
                )
                lint_yaml(decoded_definitions)
                definitions = load_yaml(decoded_definitions)

            except BaseException as e:
                yield DefinitionDescriptor(
                    pipeline_name='<invalid YAML>',
                    pipeline_definition={},
                    main_repo={
                        'path': repo_path,
                        'branch': branch_name,
                        'hostname': repo_hostname
                    },
                    concourse_target_cfg=self.cfg_set.concourse(),
                    concourse_target_team=target_team,
                    override_definitions=(),
                    exception=e,
                )
                return  # nothing else to yield in case parsing failed

            # handle inheritance
            definitions = merge_dicts(definitions, override_definitions)

            # hacky: only set from GithubRepositoryDefinitionEnumerator
            target_team = getattr(self, '_target_team', None)

            yield from self._wrap_into_descriptors(
                repo_path='/'.join([org_name, repository.name]),
                repo_hostname=repo_hostname,
                branch=branch_name,
                raw_definitions=definitions,
                override_definitions=override_definitions,
                target_team=target_team,
            )