Documentation
¶
Index ¶
- Constants
- Variables
- func Evaluate(ctx context.Context, cCtx *cli.Command) error
- func GitLabStatusHandler(w http.ResponseWriter, r *http.Request)
- func GitLabWebhookHandler(ctx context.Context, webhookSecret string) http.HandlerFunc
- func Lint(ctx context.Context, cCtx *cli.Command) error
- func ProcessMR(ctx context.Context, client scm.Client, cfg *config.Config, event any) (err error)
- func Server(ctx context.Context, cCtx *cli.Command) error
- type EmbedLoader
- type GitlabWebhookPayload
- type GitlabWebhookPayloadCommit
- type GitlabWebhookPayloadMergeRequest
- type GitlabWebhookPayloadProject
- type HTTPURLLoader
Constants ¶
View Source
const ( FlagAPIToken = "api-token" FlagBackstageURL = "backstage-url" FlagBackstageToken = "backstage-token" FlagCommitSHA = "commit" FlagConfigFile = "config" FlagDryRun = "dry-run" FlagGlobalConfigFile = "global-config" FlagMergeRequestID = "id" FlagSCMBaseURL = "base-url" FlagSCMProject = "project" FlagServerListenHost = "listen-host" FlagServerListenPort = "listen-port" FlagServerTimeout = "timeout" FlagUpdatePipeline = "update-pipeline" FlagUpdatePipelineURL = "update-pipeline-url" FlagPeriodicEvaluationInterval = "periodic-evaluation-interval" FlagPeriodicEvaluationIgnoreMergeRequestsWithLabel = "periodic-evaluation-ignore-mr-labels" FlagPeriodicEvaluationRequireMergeRequestsWithLabel = "periodic-evaluation-require-mr-labels" FlagPeriodicEvaluationOnlyProjectsWithTopics = "periodic-evaluation-project-topics" FlagPeriodicEvaluationOnlyProjectsWithMembership = "periodic-evaluation-only-project-membership" FlagWebhookSecret = "webhook-secret" )
Variables ¶
View Source
var ( StringFlagBackstageURL = &cli.StringFlag{ Name: FlagBackstageURL, Usage: "The Backstage base URL", Sources: cli.EnvVars( "BACKSTAGE_URL", ), } StringFlagBackstageToken = &cli.StringFlag{ Name: FlagBackstageToken, Usage: "The Backstage static token with access to the catalog plugin", Sources: cli.EnvVars( "BACKSTAGE_TOKEN", ), } )
View Source
var GitHub = &cli.Command{ Name: "github", Usage: "GitHub related commands", Before: func(ctx context.Context, cCtx *cli.Command) (context.Context, error) { return state.WithProvider(ctx, "github"), nil }, Flags: []cli.Flag{ &cli.StringFlag{ Name: FlagAPIToken, Usage: "GitHub API token", Sources: cli.EnvVars( "SCM_ENGINE_TOKEN", ), }, &cli.StringFlag{ Name: FlagSCMBaseURL, Usage: "Base URL for the SCM instance", Value: "https://api.github.com/", Sources: cli.EnvVars( "SCM_ENGINE_BASE_URL", ), }, }, Commands: []*cli.Command{ { Name: "evaluate", Usage: "Evaluate a Pull Request", ArgsUsage: " [pr_id, pr_id, ...]", Action: Evaluate, Flags: []cli.Flag{ &cli.StringFlag{ Name: FlagSCMProject, Usage: "GitHub project (example: 'jippi/scm-engine')", Required: true, Sources: cli.EnvVars( "GITHUB_REPOSITORY", ), }, &cli.StringFlag{ Name: FlagMergeRequestID, Usage: "The Pull Request ID to process, if not provided as a CLI flag", Sources: cli.EnvVars( "SCM_ENGINE_PULL_REQUEST_ID", ), }, &cli.StringFlag{ Name: FlagCommitSHA, Usage: "The git commit sha", Sources: cli.EnvVars( "GITHUB_SHA", ), }, }, }, }, }
View Source
var GitLab = &cli.Command{ Name: "gitlab", Usage: "GitLab related commands", Before: func(ctx context.Context, cCtx *cli.Command) (context.Context, error) { ctx = state.WithBaseURL(ctx, cCtx.String(FlagSCMBaseURL)) ctx = state.WithProvider(ctx, "gitlab") ctx = state.WithToken(ctx, cCtx.String(FlagAPIToken)) ctx = state.WithGlobalConfigFilePath(ctx, cCtx.String(FlagGlobalConfigFile)) return ctx, nil }, Flags: []cli.Flag{ &cli.StringFlag{ Name: FlagAPIToken, Usage: "GitLab API token", Sources: cli.EnvVars( "SCM_ENGINE_TOKEN", ), }, &cli.StringFlag{ Name: FlagSCMBaseURL, Usage: "Base URL for the SCM instance", Value: "https://gitlab.com/", Sources: cli.EnvVars( "SCM_ENGINE_BASE_URL", "CI_SERVER_URL", ), }, &cli.StringFlag{ Name: FlagGlobalConfigFile, Usage: "Path to a global configuration file. Any repository specific configuration will be merged on top of the global configuration", Value: "", Sources: cli.EnvVars("SCM_ENGINE_GLOBAL_CONFIG_FILE"), }, }, Commands: []*cli.Command{ { Name: "lint", Usage: "lint a configuration file", Action: Lint, Flags: []cli.Flag{ &cli.StringFlag{ Name: "schema", Usage: "Where to find the JSON Schema file. Can load the file from either the embedded version (default), http://, https://, or a file:// URI", Value: "embed://", }, }, }, { Name: "evaluate", Usage: "Evaluate a Merge Request", ArgsUsage: " [mr_id, mr_id, ...]", Action: Evaluate, Flags: []cli.Flag{ &cli.BoolFlag{ Name: FlagUpdatePipeline, Usage: "Update the CI pipeline status with progress", Value: true, Sources: cli.EnvVars("SCM_ENGINE_UPDATE_PIPELINE"), }, &cli.StringFlag{ Name: FlagUpdatePipelineURL, Usage: "(Optional) URL to where logs can be found for the pipeline", Sources: cli.EnvVars("SCM_ENGINE_UPDATE_PIPELINE_URL"), }, &cli.StringFlag{ Name: FlagSCMProject, Usage: "GitLab project (example: 'gitlab-org/gitlab')", Sources: cli.EnvVars( "GITLAB_PROJECT", "CI_PROJECT_PATH", ), }, &cli.StringFlag{ Name: FlagMergeRequestID, Usage: "The Merge Request ID to process, if not provided as a CLI flag", Sources: cli.EnvVars( "CI_MERGE_REQUEST_IID", ), }, &cli.StringFlag{ Name: FlagCommitSHA, Usage: "The git commit sha", Sources: cli.EnvVars( "CI_COMMIT_SHA", ), }, StringFlagBackstageURL, StringFlagBackstageToken, }, }, { Name: "server", Usage: "Start HTTP server for webhook event driven usage", Hidden: true, Action: Server, Flags: []cli.Flag{ &cli.StringFlag{ Name: FlagWebhookSecret, Usage: "Used to validate received payloads. Sent with the request in the X-Gitlab-Token HTTP header", Sources: cli.EnvVars("SCM_ENGINE_WEBHOOK_SECRET"), }, &cli.StringFlag{ Name: FlagServerListenHost, Usage: "IP that the HTTP server should listen on", Value: "0.0.0.0", Sources: cli.EnvVars("SCM_ENGINE_LISTEN_ADDR"), }, &cli.IntFlag{ Name: FlagServerListenPort, Usage: "Port that the HTTP server should listen on", Value: 3000, Sources: cli.EnvVars( "SCM_ENGINE_LISTEN_PORT", "PORT", ), }, &cli.DurationFlag{ Name: FlagServerTimeout, Usage: "Timeout for webhook requests", Value: 5 * time.Second, Sources: cli.EnvVars("SCM_ENGINE_TIMEOUT"), }, &cli.BoolFlag{ Name: FlagUpdatePipeline, Usage: "Update the CI pipeline status with progress", Value: true, Sources: cli.EnvVars("SCM_ENGINE_UPDATE_PIPELINE"), }, &cli.StringFlag{ Name: FlagUpdatePipelineURL, Usage: "(Optional) URL to where logs can be found for the pipeline", Sources: cli.EnvVars("SCM_ENGINE_UPDATE_PIPELINE_URL"), }, &cli.DurationFlag{ Name: FlagPeriodicEvaluationInterval, Usage: "(Optional) Frequency of which to evaluate all Merge Requests regardless of user activity", Sources: cli.EnvVars("SCM_ENGINE_PERIODIC_EVALUATION_INTERVAL"), }, &cli.StringSliceFlag{ Name: FlagPeriodicEvaluationIgnoreMergeRequestsWithLabel, Usage: "(Optional) Ignore MR with these labels", Sources: cli.EnvVars("SCM_ENGINE_PERIODIC_EVALUATION_IGNORE_MR_WITH_LABELS"), }, &cli.StringSliceFlag{ Name: FlagPeriodicEvaluationRequireMergeRequestsWithLabel, Usage: "(Optional) Only process MR with these labels", Sources: cli.EnvVars("SCM_ENGINE_PERIODIC_EVALUATION_REQUIRE_MR_WITH_LABELS"), }, &cli.StringSliceFlag{ Name: FlagPeriodicEvaluationOnlyProjectsWithTopics, Usage: "(Optional) Only evaluate projects with these topics", Sources: cli.EnvVars("SCM_ENGINE_PERIODIC_EVALUATION_REQUIRE_PROJECT_TOPICS"), }, &cli.BoolFlag{ Name: FlagPeriodicEvaluationOnlyProjectsWithMembership, Usage: "(Optional) Only evaluate projects with membership", Value: true, Sources: cli.EnvVars("SCM_ENGINE_PERIODIC_EVALUATION_ONLY_PROJECTS_WITH_MEMBERSHIP"), }, StringFlagBackstageURL, StringFlagBackstageToken, }, }, }, }
Functions ¶
func GitLabStatusHandler ¶ added in v0.11.0
func GitLabStatusHandler(w http.ResponseWriter, r *http.Request)
func GitLabWebhookHandler ¶ added in v0.11.0
func GitLabWebhookHandler(ctx context.Context, webhookSecret string) http.HandlerFunc
Types ¶
type EmbedLoader ¶ added in v0.18.0
type EmbedLoader struct{}
type GitlabWebhookPayload ¶ added in v0.11.0
type GitlabWebhookPayload struct {
EventType string `json:"event_type"`
Project GitlabWebhookPayloadProject `json:"project"` // "project" is sent for all events
ObjectAttributes *GitlabWebhookPayloadMergeRequest `json:"object_attributes,omitempty"` // "object_attributes" is sent on "merge_request" events
MergeRequest *GitlabWebhookPayloadMergeRequest `json:"merge_request,omitempty"` // "merge_request" is sent on "note" activity
}
type GitlabWebhookPayloadCommit ¶ added in v0.11.0
type GitlabWebhookPayloadCommit struct {
ID string `json:"id"`
}
type GitlabWebhookPayloadMergeRequest ¶ added in v0.11.0
type GitlabWebhookPayloadMergeRequest struct {
IID int `json:"iid"`
LastCommit GitlabWebhookPayloadCommit `json:"last_commit"`
}
type GitlabWebhookPayloadProject ¶ added in v0.11.0
type GitlabWebhookPayloadProject struct {
PathWithNamespace string `json:"path_with_namespace"`
}
type HTTPURLLoader ¶ added in v0.18.0
Click to show internal directories.
Click to hide internal directories.