Ejemplo n.º 1
0
def resolve_recipients_by_component(components, github_cfg_name):
    component_recipients = mailutil.determine_mail_recipients(
        github_cfg_name=
        github_cfg_name,  # todo: actually this is not required here
        components=components,
    )
    return component_recipients
Ejemplo n.º 2
0
    def resolve_recipients(self):
        if not self._recipients_component:
            return self._recipients

        # XXX it should not be necessary to pass github_cfg
        return mailutil.determine_mail_recipients(
            github_cfg_name=self._cfg_set.github().name(),
            component_names=(self._recipients_component.name(), ),
        )
Ejemplo n.º 3
0
def send_mail(
    notification_config_path: str,
    source_dirs: [str] = [],
    codeowners_files: [str] = [],
    component_names: [str] = [],
):
    if not ci.util._running_on_ci():
        raise RuntimeError(
            'This command can only be used from within our CI-infrastructure.')

    if component_names:
        # todo: resolve components using product.v2
        raise NotImplementedError

    pipeline_metadata = concourse.util.get_pipeline_metadata()
    cfg_factory = ci.util.ctx().cfg_factory()
    current_cfg_set = cfg_factory.cfg_set(
        pipeline_metadata.current_cfg_setname)

    notification_config = ci.util.parse_yaml_file(notification_config_path)

    recipients = set(notification_config['recipients'])

    if any([source_dirs, codeowners_files, component_names]):
        recipients |= {
            r
            for r in mailutil.determine_mail_recipients(
                github_cfg_name=current_cfg_set.github().name(),
                src_dirs=source_dirs,
                component_names=component_names,
                codeowners_files=codeowners_files,
            )
        }

    mailutil.notify(
        subject=notification_config['subject'],
        body=notification_config['mail_body'],
        email_cfg_name=current_cfg_set.email().name(),
        recipients=recipients,
    )