Documentation
¶
Overview ¶
package scm provides the ability for Vela to integrate with different supported SCM providers.
Usage:
import "github.com/go-vela/server/scm"
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Flags = []cli.Flag{ &cli.StringFlag{ EnvVars: []string{"VELA_SCM_DRIVER", "SCM_DRIVER", "VELA_SOURCE_DRIVER", "SOURCE_DRIVER"}, FilePath: "/vela/scm/driver", Name: "scm.driver", Usage: "driver to be used for the version control system", Value: constants.DriverGithub, }, &cli.StringFlag{ EnvVars: []string{"VELA_SCM_ADDR", "SCM_ADDR", "VELA_SOURCE_ADDR", "SOURCE_ADDR"}, FilePath: "/vela/scm/addr", Name: "scm.addr", Usage: "fully qualified url (<scheme>://<host>) for the version control system", Value: "https://github.com", }, &cli.StringFlag{ EnvVars: []string{"VELA_SCM_CLIENT", "SCM_CLIENT", "VELA_SOURCE_CLIENT", "SOURCE_CLIENT"}, FilePath: "/vela/scm/client", Name: "scm.client", Usage: "OAuth client id from version control system", }, &cli.StringFlag{ EnvVars: []string{"VELA_SCM_SECRET", "SCM_SECRET", "VELA_SOURCE_SECRET", "SOURCE_SECRET"}, FilePath: "/vela/scm/secret", Name: "scm.secret", Usage: "OAuth client secret from version control system", }, &cli.StringFlag{ EnvVars: []string{"VELA_SCM_CONTEXT", "SCM_CONTEXT", "VELA_SOURCE_CONTEXT", "SOURCE_CONTEXT"}, FilePath: "/vela/scm/context", Name: "scm.context", Usage: "context for commit status in version control system", Value: "continuous-integration/vela", }, &cli.StringSliceFlag{ EnvVars: []string{"VELA_SCM_SCOPES", "SCM_SCOPES", "VELA_SOURCE_SCOPES", "SOURCE_SCOPES"}, FilePath: "/vela/scm/scopes", Name: "scm.scopes", Usage: "OAuth scopes to be used for the version control system", Value: cli.NewStringSlice("repo", "repo:status", "user:email", "read:user", "read:org"), }, &cli.StringFlag{ EnvVars: []string{"VELA_SCM_WEBHOOK_ADDR", "SCM_WEBHOOK_ADDR", "VELA_SOURCE_WEBHOOK_ADDR", "SOURCE_WEBHOOK_ADDR"}, FilePath: "/vela/scm/webhook_addr", Name: "scm.webhook.addr", Usage: "Alternative or proxy server address as a fully qualified url (<scheme>://<host>). " + "Use this when the Vela server address that the scm provider can send webhooks to " + "differs from the server address the UI and oauth flows use, such as when the server " + "is behind a Firewall or NAT, or when using something like ngrok to forward webhooks. " + "(defaults to VELA_ADDR).", }, &cli.Int64Flag{ EnvVars: []string{"VELA_SCM_APP_ID", "SCM_APP_ID"}, FilePath: "/vela/scm/app_id", Name: "scm.app.id", Usage: "set ID for the SCM App integration (GitHub App)", }, &cli.StringFlag{ EnvVars: []string{"VELA_SCM_APP_PRIVATE_KEY", "SCM_APP_PRIVATE_KEY"}, FilePath: "/vela/scm/app_private_key", Name: "scm.app.private-key", Usage: "set value of base64 encoded SCM App integration (GitHub App) private key", }, &cli.StringFlag{ EnvVars: []string{"VELA_SCM_APP_PRIVATE_KEY_PATH", "SCM_APP_PRIVATE_KEY_PATH"}, FilePath: "/vela/scm/app_private_key_path", Name: "scm.app.private-key.path", Usage: "set filepath to the SCM App integration (GitHub App) private key", }, &cli.StringSliceFlag{ EnvVars: []string{"VELA_SCM_APP_PERMISSIONS", "SCM_APP_PERMISSIONS", "VELA_SOURCE_APP_PERMISSIONS", "SOURCE_APP_PERMISSIONS"}, FilePath: "/vela/scm/app/permissions", Name: "scm.app.permissions", Usage: "SCM App integration (GitHub App) permissions to be used as the allowed set of possible installation token permissions", Value: cli.NewStringSlice("contents:read", "checks:write"), }, }
Flags represents all supported command line interface (CLI) flags for the scm.
https://pkg.go.dev/github.com/urfave/cli?tab=doc#Flag
TODO: in a future release remove the "source" vars in favor of the "scm" ones.
Functions ¶
Types ¶
type Service ¶
type Service interface {
// Driver defines a function that outputs
// the configured scm driver.
Driver() string
// Authorize defines a function that uses the
// given access token to authorize the user.
Authorize(context.Context, string) (string, error)
// Authenticate defines a function that completes
// the OAuth workflow for the session.
Authenticate(context.Context, http.ResponseWriter, *http.Request, string) (*api.User, error)
// AuthenticateToken defines a function that completes
// the OAuth workflow for the session using PAT Token
AuthenticateToken(context.Context, *http.Request) (*api.User, error)
// ValidateOAuthToken defines a function that validates
// an OAuth access token was created by Vela
ValidateOAuthToken(context.Context, string) (bool, error)
// Login defines a function that begins
// the OAuth workflow for the session.
Login(context.Context, http.ResponseWriter, *http.Request) (string, error)
// GetUserID defines a function that captures
// the scm user id attached to the username.
GetUserID(context.Context, string, string) (string, error)
// OrgAccess defines a function that captures
// the user's access level for an org.
OrgAccess(context.Context, *api.User, string) (string, error)
// RepoAccess defines a function that captures
// the user's access level for a repo.
RepoAccess(context.Context, string, string, string, string) (string, error)
// TeamAccess defines a function that captures
// the user's access level for a team.
TeamAccess(context.Context, *api.User, string, string) (string, error)
// RepoContributor defines a function that captures
// whether the user is a contributor for a repo.
RepoContributor(context.Context, *api.User, string, string, string) (bool, error)
// ListUsersTeamsForOrg defines a function that captures
// the user's teams for an org
ListUsersTeamsForOrg(context.Context, *api.User, string) ([]string, error)
// Changeset defines a function that captures the list
// of files changed for a commit.
//
// https://en.wikipedia.org/wiki/Changeset.
Changeset(context.Context, *api.Repo, string) ([]string, error)
// ChangesetPR defines a function that captures the list
// of files changed for a pull request.
//
// https://en.wikipedia.org/wiki/Changeset.
ChangesetPR(context.Context, *api.Repo, int) ([]string, error)
// GetDeployment defines a function that
// gets a deployment by number and repo.
GetDeployment(context.Context, *api.User, *api.Repo, int64) (*api.Deployment, error)
// GetDeploymentCount defines a function that
// counts a list of all deployment for a repo.
GetDeploymentCount(context.Context, *api.User, *api.Repo) (int64, error)
// GetDeploymentList defines a function that gets
// a list of all deployments for a repo.
GetDeploymentList(context.Context, *api.User, *api.Repo, int, int) ([]*api.Deployment, error)
// CreateDeployment defines a function that
// creates a new deployment.
CreateDeployment(context.Context, *api.User, *api.Repo, *api.Deployment) error
// Config defines a function that captures
// the pipeline configuration from a repo.
Config(context.Context, *api.User, *api.Repo, string) ([]byte, error)
// ConfigBackoff is a truncated constant backoff wrapper for Config.
// Retry again in five seconds if Config fails to retrieve yaml/yml file.
// Will return an error after five failed attempts.
ConfigBackoff(context.Context, *api.User, *api.Repo, string) ([]byte, error)
// Disable defines a function that deactivates
// a repo by destroying the webhook.
Disable(context.Context, *api.User, string, string) error
// Enable defines a function that activates
// a repo by creating the webhook.
Enable(context.Context, *api.User, *api.Repo, *api.Hook) (*api.Hook, string, error)
// Update defines a function that updates
// a webhook for a specified repo.
Update(context.Context, *api.User, *api.Repo, int64) (bool, error)
// Status defines a function that sends the
// commit status for the given SHA from a repo.
Status(context.Context, *api.User, *api.Build, string, string) error
// StepStatus defines a function that sends the
// commit status for the given SHA for a specified step context.
StepStatus(context.Context, *api.User, *api.Build, *api.Step, string, string) error
// ListUserRepos defines a function that retrieves
// all repos with admin rights for the user.
ListUserRepos(context.Context, *api.User) ([]*api.Repo, error)
// GetBranch defines a function that retrieves
// a branch for a repo.
GetBranch(context.Context, *api.Repo, string) (string, string, error)
// GetPullRequest defines a function that retrieves
// a pull request for a repo.
GetPullRequest(context.Context, *api.Repo, int) (string, string, string, string, error)
// GetRepo defines a function that retrieves
// details for a repo.
GetRepo(context.Context, *api.User, *api.Repo) (*api.Repo, int, error)
// GetOrgAndRepoName defines a function that retrieves
// the name of the org and repo in the SCM.
GetOrgAndRepoName(context.Context, *api.User, string, string) (string, string, error)
// GetOrg defines a function that retrieves
// the name for an org in the SCM.
GetOrgName(context.Context, *api.User, string) (string, error)
// GetHTMLURL defines a function that retrieves
// a repository file's html_url.
GetHTMLURL(context.Context, *api.User, string, string, string, string) (string, error)
// GetNetrcPassword defines a function that returns the netrc
// password injected into build steps.
GetNetrcPassword(context.Context, database.Interface, *api.Repo, *api.User, yaml.Git) (string, error)
// SyncRepoWithInstallation defines a function that syncs
// a repo with the installation, if it exists.
SyncRepoWithInstallation(context.Context, *api.Repo) (*api.Repo, error)
// ProcessWebhook defines a function that
// parses the webhook from a repo.
ProcessWebhook(context.Context, *http.Request) (*internal.Webhook, error)
// VerifyWebhook defines a function that
// verifies the webhook from a repo.
VerifyWebhook(context.Context, *http.Request, *api.Repo) error
// RedeliverWebhook defines a function that
// redelivers the webhook from the SCM.
RedeliverWebhook(context.Context, *api.User, *api.Hook) error
// ProcessInstallation defines a function that
// processes an installation event.
ProcessInstallation(context.Context, *http.Request, *internal.Webhook, database.Interface) error
// FinishInstallation defines a function that
// finishes an installation event and returns a web redirect.
FinishInstallation(context.Context, *http.Request, int64) (string, error)
}
Service represents the interface for Vela integrating with the different supported scm providers.
func FromContext ¶
FromContext returns the scm Service associated with this context.
type Setter ¶
type Setter interface {
Set(string, interface{})
}
Setter defines a context that enables setting values.
type Setup ¶
type Setup struct {
// specifies the driver to use for the scm client
Driver string
// specifies the address to use for the scm client
Address string
// specifies the OAuth client ID from the scm system to use for the scm client
ClientID string
// specifies the OAuth client secret from the scm system to use for the scm client
ClientSecret string
// specifies App integration id
AppID int64
// specifies App integration private key
AppPrivateKey string
// specifies App integration path to private key
AppPrivateKeyPath string
// specifies App integration permissions set
AppPermissions []string
// specifies the Vela server address to use for the scm client
ServerAddress string
// specifies the Vela server address that the scm provider should use to send Vela webhooks
ServerWebhookAddress string
// specifies the context for the commit status to use for the scm client
StatusContext string
// specifies the Vela web UI address to use for the scm client
WebUIAddress string
// specifies the OAuth scopes to use for the scm client
OAuthScopes []string
// specifies OTel tracing configurations
Tracing *tracing.Client
}
Setup represents the configuration necessary for creating a Vela service capable of integrating with a configured scm system.
func (*Setup) Github ¶
Github creates and returns a Vela service capable of integrating with a Github scm system.