approvers

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 3, 2023 License: Apache-2.0 Imports: 13 Imported by: 0

README

DOCUMENTATION DEPRECATION NOTICE: This file is deprecated. Please refer to the new migrated location. Please do not edit this file; instead, make changes to the new location!

The new location is served on the web at https://docs.prow.k8s.io/docs/.

This file will be deleted on 2023-02-28.

Documentation

Index

Constants

View Source
const (
	// ApprovalNotificationName defines the name used in the title for the approval notifications.
	ApprovalNotificationName = "ApprovalNotifier"
)

Variables

This section is empty.

Functions

func CaseInsensitiveIntersection

func CaseInsensitiveIntersection(one, other sets.String) sets.String

CaseInsensitiveIntersection runs the intersection between to sets.String in a case-insensitive way. It returns the lowercased intersection.

func GenerateTemplate

func GenerateTemplate(templ, name string, data interface{}) (string, error)

GenerateTemplate takes a template, name and data, and generates the corresponding string.

func GetMessage

func GetMessage(ap Approvers, linkURL *url.URL, commandHelpLink, prProcessLink, org, repo, branch string) *string

GetMessage returns the comment body that we want the approve plugin to display on PRs The comment shows:

  • a list of approvers files (and links) needed to get the PR approved
  • a list of approvers files with strikethroughs that already have an approver's approval
  • a suggested list of people from each OWNERS files that can fully approve the PR
  • how an approver can indicate their approval
  • how an approver can cancel their approval

Types

type Approval

type Approval struct {
	Login     string // Login of the approver (can include uppercase)
	How       string // How did the approver approved
	Reference string // Where did the approver approved
	NoIssue   bool   // Approval also accepts missing associated issue
}

Approval has the information about each approval on a PR

func (Approval) String

func (a Approval) String() string

String creates a link for the approval. Use `Login` if you just want the name.

type ApprovedFile

type ApprovedFile struct {
	// contains filtered or unexported fields
}

ApprovedFile contains the information of a an approved file.

func (ApprovedFile) String

func (a ApprovedFile) String() string

type Approvers

type Approvers struct {
	AssociatedIssue int
	RequireIssue    bool

	ManuallyApproved func() bool
	// contains filtered or unexported fields
}

Approvers is struct that provide functionality with regard to approvals of a specific code change.

func NewApprovers

func NewApprovers(owners Owners) Approvers

NewApprovers create a new "Approvers" with no approval.

func (*Approvers) AddApprover

func (ap *Approvers) AddApprover(login, reference string, noIssue bool)

AddApprover adds a new Approver

func (*Approvers) AddAssignees

func (ap *Approvers) AddAssignees(logins ...string)

AddAssignees adds assignees to the list

func (*Approvers) AddAuthorSelfApprover

func (ap *Approvers) AddAuthorSelfApprover(login, reference string, noIssue bool)

AddAuthorSelfApprover adds the author self approval

func (*Approvers) AddLGTMer

func (ap *Approvers) AddLGTMer(login, reference string, noIssue bool)

AddLGTMer adds a new LGTM Approver

func (Approvers) AreFilesApproved

func (ap Approvers) AreFilesApproved() bool

AreFilesApproved returns a bool indicating whether or not OWNERS files associated with the PR are approved. A PR with no OWNERS files is not considered approved. If this returns true, the PR may still not be fully approved depending on the associated issue requirement

func (Approvers) AssignedCCs

func (ap Approvers) AssignedCCs() []string

AssignedCCs returns potential approvers that are already assigned

func (Approvers) GetCCs

func (ap Approvers) GetCCs() []string

GetCCs gets the list of suggested approvers for a pull-request. It now considers current assignees as potential approvers. Here is how it works: - We find suggested approvers from all potential approvers, but remove those that are not useful considering current approvers and assignees. This only uses leaf approvers to find the closest approvers to the changes. - We find a subset of suggested approvers from current approvers, suggested approvers and assignees, but we remove those that are not useful considering suggested approvers and current approvers. This uses the full approvers list, and will result in root approvers to be suggested when they are assigned. We return the union of the two sets: suggested and suggested assignees. The goal of this second step is to only keep the assignees that are the most useful.

func (Approvers) GetCurrentApproversSet

func (ap Approvers) GetCurrentApproversSet() sets.String

GetCurrentApproversSet returns the set of approvers (login only, normalized to lower case)

func (Approvers) GetCurrentApproversSetCased

func (ap Approvers) GetCurrentApproversSetCased() sets.String

GetCurrentApproversSetCased returns the set of approvers logins with the original cases.

func (Approvers) GetFiles

func (ap Approvers) GetFiles(baseURL *url.URL, branch string) []File

GetFiles returns owners files that still need approval.

func (Approvers) GetFilesApprovers

func (ap Approvers) GetFilesApprovers() map[string]sets.String

GetFilesApprovers returns a map from files -> list of current approvers.

func (Approvers) GetNoIssueApproversSet

func (ap Approvers) GetNoIssueApproversSet() sets.String

GetNoIssueApproversSet returns the set of "no-issue" approvers (login only)

func (Approvers) IsApproved

func (ap Approvers) IsApproved() bool

IsApproved returns a bool indicating whether the PR is fully approved. If a human manually added the approved label, this returns true, ignoring normal approval rules.

func (Approvers) ListApprovals

func (ap Approvers) ListApprovals() []Approval

ListApprovals returns the list of approvals

func (Approvers) ListNoIssueApprovals

func (ap Approvers) ListNoIssueApprovals() []Approval

ListNoIssueApprovals returns the list of "no-issue" approvals

func (Approvers) NoIssueApprovers

func (ap Approvers) NoIssueApprovers() map[string]Approval

NoIssueApprovers returns the list of people who have "no-issue" approved the pull-request. They are included in the list if they can approve one of the files.

func (*Approvers) RemoveApprover

func (ap *Approvers) RemoveApprover(login string)

RemoveApprover removes an approver from the list.

func (Approvers) RequirementsMet

func (ap Approvers) RequirementsMet() bool

RequirementsMet returns a bool indicating whether the PR has met all approval requirements: - all OWNERS files associated with the PR have been approved AND EITHER

  • the munger config is such that an issue is not required to be associated with the PR
  • that there is an associated issue with the PR
  • an OWNER has indicated that the PR is trivial enough that an issue need not be associated with the PR

func (Approvers) SuggestedCCs

func (ap Approvers) SuggestedCCs() []string

SuggestedCCs returns potential approvers that are not already assigned

func (Approvers) UnapprovedFiles

func (ap Approvers) UnapprovedFiles() sets.String

UnapprovedFiles returns owners files that still need approval

type File

type File interface {
	String() string
}

File in an interface for files

type Owners

type Owners struct {
	// contains filtered or unexported fields
}

Owners provides functionality related to owners of a specific code change.

func NewOwners

func NewOwners(log *logrus.Entry, filenames []string, r Repo, s int64) Owners

NewOwners consturcts a new Owners instance. filenames is the slice of files changed.

func (Owners) GetAllPotentialApprovers

func (o Owners) GetAllPotentialApprovers() []string

GetAllPotentialApprovers returns the people from relevant owners files needed to get the PR approved

func (Owners) GetApprovers

func (o Owners) GetApprovers() map[string]sets.String

GetApprovers returns a map from ownersFiles -> people that are approvers in them

func (Owners) GetLeafApprovers

func (o Owners) GetLeafApprovers() map[string]sets.String

GetLeafApprovers returns a map from ownersFiles -> people that are approvers in them (only the leaf)

func (Owners) GetOwnersSet

func (o Owners) GetOwnersSet() sets.String

GetOwnersSet returns a set containing all the Owners files necessary to get the PR approved

func (Owners) GetReverseMap

func (o Owners) GetReverseMap(approvers map[string]sets.String) map[string]sets.String

GetReverseMap returns a map from people -> OWNERS files for which they are an approver

func (Owners) GetShuffledApprovers

func (o Owners) GetShuffledApprovers() []string

GetShuffledApprovers shuffles the potential approvers so that we don't always suggest the same people.

func (Owners) GetSuggestedApprovers

func (o Owners) GetSuggestedApprovers(reverseMap map[string]sets.String, potentialApprovers []string) sets.String

GetSuggestedApprovers solves the exact cover problem, finding an approver capable of approving every OWNERS file in the PR

func (Owners) KeepCoveringApprovers

func (o Owners) KeepCoveringApprovers(reverseMap map[string]sets.String, knownApprovers sets.String, potentialApprovers []string) sets.String

KeepCoveringApprovers finds who we should keep as suggested approvers given a pre-selection knownApprovers must be a subset of potentialApprovers.

type Repo

type Repo interface {
	Approvers(path string) layeredsets.String
	LeafApprovers(path string) sets.String
	FindApproverOwnersForFile(file string) string
	IsNoParentOwners(path string) bool
	IsAutoApproveUnownedSubfolders(directory string) bool
	Filenames() ownersconfig.Filenames
}

Repo allows querying and interacting with OWNERS information in a repo.

type UnapprovedFile

type UnapprovedFile struct {
	// contains filtered or unexported fields
}

UnapprovedFile contains the information of a an unapproved file.

func (UnapprovedFile) String

func (ua UnapprovedFile) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL