scm

package
v0.9.0 Latest Latest
Warning

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

Go to latest
Published: May 13, 2024 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FindModifiedFiles added in v0.8.0

func FindModifiedFiles(files []string, patterns ...string) []string

Partially lifted from https://github.com/hmarr/codeowners/blob/main/match.go

func Ptr added in v0.8.0

func Ptr[T any](v T) *T

Ptr is a helper that returns a pointer to v.

Types

type Client

type Client interface {
	Labels() LabelClient
	MergeRequests() MergeRequestClient
	EvalContext(ctx context.Context) (EvalContext, error)
	ApplyStep(ctx context.Context, update *UpdateMergeRequestOptions, step EvaluationActionStep) error
	Start(ctx context.Context) error
	Stop(ctx context.Context, err error) error
}

type CreateLabelOptions

type CreateLabelOptions struct {
	Name        *string          `json:"name,omitempty"        url:"name,omitempty"`
	Color       *string          `json:"color,omitempty"       url:"color,omitempty"`
	Description *string          `json:"description,omitempty" url:"description,omitempty"`
	Priority    types.Value[int] `json:"priority"              url:"priority,omitempty"`
}

CreateLabelOptions represents the available CreateLabel() options.

GitLab API docs: https://docs.gitlab.com/ee/api/labels.html#create-a-new-label

type EvalContext

type EvalContext interface {
	IsValid() bool
	SetWebhookEvent(in any)
}

type EvalContextualizer

type EvalContextualizer struct{}

type EvaluationActionResult added in v0.3.0

type EvaluationActionResult struct {
	Name string `yaml:"name"`
	If   string `yaml:"if"`
	Then []EvaluationActionStep
}

type EvaluationActionStep added in v0.3.0

type EvaluationActionStep map[string]any

type EvaluationResult

type EvaluationResult struct {
	// Name of the label being generated.
	//
	// May only be used with [conditional] labelling type
	Name string

	// Description for the label being generated.
	//
	// Optional; will be an empty string if omitted
	Description string

	// The HEX color code to use for the label.
	//
	// May use the color variables (e.g., $purple-300) defined in Twitter Bootstrap
	// https://getbootstrap.com/docs/5.3/customize/color/#all-colors
	Color string

	// Priority controls wether the label should be a priority label or regular one.
	//
	// This controls if the label is prioritized (sorted first) in the list.
	Priority types.Value[int]

	// Wether the evaluation rule matched positive (add label) or negative (remove label)
	Matched bool
}

func (EvaluationResult) IsEqual added in v0.3.0

func (local EvaluationResult) IsEqual(ctx context.Context, remote *Label) bool

type Label

type Label struct {
	ID                     int              `json:"id"`
	Name                   string           `json:"name"`
	Color                  string           `json:"color"`
	TextColor              string           `json:"text_color"`
	Description            string           `json:"description"`
	OpenIssuesCount        int              `json:"open_issues_count"`
	ClosedIssuesCount      int              `json:"closed_issues_count"`
	OpenMergeRequestsCount int              `json:"open_merge_requests_count"`
	Subscribed             bool             `json:"subscribed"`
	Priority               types.Value[int] `json:"priority"`
	IsProjectLabel         bool             `json:"is_project_label"`
}

Label represents a GitLab label.

GitLab API docs: https://docs.gitlab.com/ee/api/labels.html

type LabelClient

type LabelClient interface {
	List(ctx context.Context) ([]*Label, error)
	Create(ctx context.Context, opt *CreateLabelOptions) (*Label, *Response, error)
	Update(ctx context.Context, opt *UpdateLabelOptions) (*Label, *Response, error)
}

type LabelOptions

type LabelOptions []string

LabelOptions is a custom type with specific marshaling characteristics.

type ListLabelsOptions

type ListLabelsOptions struct {
	ListOptions

	WithCounts            *bool   `json:"with_counts,omitempty"             url:"with_counts,omitempty"`
	IncludeAncestorGroups *bool   `json:"include_ancestor_groups,omitempty" url:"include_ancestor_groups,omitempty"`
	Search                *string `json:"search,omitempty"                  url:"search,omitempty"`
}

ListLabelsOptions represents the available ListLabels() options.

GitLab API docs: https://docs.gitlab.com/ee/api/labels.html#list-labels

type ListMergeRequest added in v0.3.0

type ListMergeRequest struct {
	ID  string `expr:"id"  graphql:"id"`
	SHA string `expr:"sha" graphql:"sha"`
}

type ListMergeRequestsOptions added in v0.3.0

type ListMergeRequestsOptions struct {
	ListOptions
	State string
	First int
}

type ListOptions

type ListOptions struct {
	// For offset-based paginated result sets, page of results to retrieve.
	Page int `json:"page,omitempty" url:"page,omitempty"`
	// For offset-based and keyset-based paginated result sets, the number of results to include per page.
	PerPage int `json:"per_page,omitempty" url:"per_page,omitempty"`

	// For keyset-based paginated result sets, name of the column by which to order
	OrderBy string `json:"order_by,omitempty" url:"order_by,omitempty"`
	// For keyset-based paginated result sets, the value must be `"keyset"`
	Pagination string `json:"pagination,omitempty" url:"pagination,omitempty"`
	// For keyset-based paginated result sets, sort order (`"asc"“ or `"desc"`)
	Sort string `json:"sort,omitempty" url:"sort,omitempty"`
}

ListOptions specifies the optional parameters to various List methods that support pagination.

type MergeRequestClient

type MergeRequestClient interface {
	Update(ctx context.Context, opt *UpdateMergeRequestOptions) (*Response, error)
	List(ctx context.Context, options *ListMergeRequestsOptions) ([]ListMergeRequest, error)
	GetRemoteConfig(ctx context.Context, name string, ref string) (io.Reader, error)
}

type Response

type Response struct {
	*http.Response

	// Fields used for offset-based pagination.
	// TotalItems   int
	// TotalPages   int
	// ItemsPerPage int
	// CurrentPage  int
	NextPage int
}

Response is a GitLab API response. This wraps the standard http.Response returned from GitLab and provides convenient access to things like pagination links.

type UpdateLabelOptions

type UpdateLabelOptions struct {
	Name        *string          `json:"name,omitempty"        url:"name,omitempty"`
	NewName     *string          `json:"new_name,omitempty"    url:"new_name,omitempty"`
	Color       *string          `json:"color,omitempty"       url:"color,omitempty"`
	Description *string          `json:"description,omitempty" url:"description,omitempty"`
	Priority    types.Value[int] `json:"priority"              url:"priority,omitempty"`
}

type UpdateMergeRequestOptions

type UpdateMergeRequestOptions struct {
	Title              *string       `json:"title,omitempty"                url:"title,omitempty"`
	Description        *string       `json:"description,omitempty"          url:"description,omitempty"`
	TargetBranch       *string       `json:"target_branch,omitempty"        url:"target_branch,omitempty"`
	AssigneeID         *int          `json:"assignee_id,omitempty"          url:"assignee_id,omitempty"`
	AssigneeIDs        *[]int        `json:"assignee_ids,omitempty"         url:"assignee_ids,omitempty"`
	ReviewerIDs        *[]int        `json:"reviewer_ids,omitempty"         url:"reviewer_ids,omitempty"`
	Labels             *LabelOptions `json:"labels,omitempty"               url:"labels,comma,omitempty"`
	AddLabels          *LabelOptions `json:"add_labels,omitempty"           url:"add_labels,comma,omitempty"`
	RemoveLabels       *LabelOptions `json:"remove_labels,omitempty"        url:"remove_labels,comma,omitempty"`
	MilestoneID        *int          `json:"milestone_id,omitempty"         url:"milestone_id,omitempty"`
	StateEvent         *string       `json:"state_event,omitempty"          url:"state_event,omitempty"`
	RemoveSourceBranch *bool         `json:"remove_source_branch,omitempty" url:"remove_source_branch,omitempty"`
	Squash             *bool         `json:"squash,omitempty"               url:"squash,omitempty"`
	DiscussionLocked   *bool         `json:"discussion_locked,omitempty"    url:"discussion_locked,omitempty"`
	AllowCollaboration *bool         `json:"allow_collaboration,omitempty"  url:"allow_collaboration,omitempty"`
}

UpdateMergeRequestOptions represents the available UpdateMergeRequest() options.

GitLab API docs: https://docs.gitlab.com/ee/api/merge_requests.html#update-mr

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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