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
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, )
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
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, )