Documentation
¶
Overview ¶
Package devlake provides a basic client for the DevLake Webhook API. It allows to register deployments and incidents.
This package is based on the DevLake Webhook API documentation available at: https://devlake.apache.org/docs/Plugins/webhook/
Index ¶
- type Client
- func (c *Client) HealthCheck(ctx context.Context) error
- func (c *Client) SendDeployment(ctx context.Context, request *DeploymentRequest) error
- func (c *Client) SendIncident(ctx context.Context, request *IncidentRequest) error
- func (c *Client) SendIncidentClose(ctx context.Context, request *IncidentRequestClose) error
- type DeploymentCommitsRequest
- type DeploymentRequest
- type HTTPClient
- type IncidentRequest
- type IncidentRequestClose
- type Option
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client represents the config options required by this client.
func New ¶
New creates a new client instance. Example for addr: "https://app.devlake.invalid"
func (*Client) HealthCheck ¶
HealthCheck performs a status check on this service.
func (*Client) SendDeployment ¶
func (c *Client) SendDeployment(ctx context.Context, request *DeploymentRequest) error
SendDeployment register a deployment with DevLake.
func (*Client) SendIncident ¶
func (c *Client) SendIncident(ctx context.Context, request *IncidentRequest) error
SendIncident register an incident with DevLake.
func (*Client) SendIncidentClose ¶
func (c *Client) SendIncidentClose(ctx context.Context, request *IncidentRequestClose) error
SendIncidentClose closes an incident with DevLake.
type DeploymentCommitsRequest ¶
type DeploymentCommitsRequest struct {
// DisplayTitle is a readable title for the deployment to this repo.
DisplayTitle string `json:"displayTitle,omitempty" validate:"omitempty,max=255"`
// RepoID is the repo ID.
RepoID string `json:"repoID,omitempty" validate:"omitempty,max=255"`
// RepoURL is the repo URL of the deployment commit.
// If there is a row in the domain layer table repos where repos.url equals repo_url,
// the repoId will be filled with repos.id.
RepoURL string `json:"repoUrl" validate:"required,url"`
// Name is the name of this commit.
Name string `json:"name,omitempty" validate:"omitempty,max=255"`
// RefName is the branch/tag to deploy.
RefName string `json:"refName,omitempty" validate:"omitempty,max=255"`
// CommitSha is the commit SHA that triggers the deploy in this repo.
CommitSha string `json:"commitSha" validate:"required,min=40,max=255"`
// CommitMsg is the commit SHA of the deployment commit message.
CommitMsg string `json:"commitMsg,omitempty" validate:"omitempty,max=65536"`
// Result is the result of the deploy to this repo. The default value is 'SUCCESS'.
Result string `json:"result,omitempty" validate:"omitempty,max=50"`
// Status is the commit status.
Status string `json:"status,omitempty" validate:"omitempty,max=50"`
// CreatedDate is the creation time of this commit.
// E.g. 2020-01-01T12:00:00+00:00.
CreatedDate *time.Time `json:"createdDate,omitempty" validate:"omitempty"`
// StartedDate is the start time of the deploy to this repo.
// E.g. 2020-01-01T12:00:00+00:00.
StartedDate *time.Time `json:"startedDate" validate:"required"`
// FinishedDate is the end time of the deploy to this repo.
// E.g. 2020-01-01T12:00:00+00:00.
FinishedDate *time.Time `json:"finishedDate" validate:"required"`
}
DeploymentCommitsRequest defines a deploymentCommits request item.
type DeploymentRequest ¶
type DeploymentRequest struct {
// ConnectionID is the ID of the DevLake connection where to send the deployment request.
ConnectionID uint64 `json:"-" validate:"required"`
// ID is the unique ID of table cicd_deployments.
ID string `json:"id" validate:"required,max=255"`
// DisplayTitle is a readable title for the deployment to this repo.
DisplayTitle string `json:"displayTitle,omitempty" validate:"omitempty,max=255"`
// Result is the deployment result, one of the values : SUCCESS, FAILURE, ABORT, MANUAL.
// The default value is SUCCESS.
Result string `json:"result,omitempty" validate:"omitempty,oneof=SUCCESS FAILURE ABORT MANUAL"`
// Environment is the environment this deployment happens.
// For example: PRODUCTION, STAGING, TESTING, DEVELOPMENT.
// The default value is PRODUCTION.
Environment string `json:"environment,omitempty" validate:"omitempty,oneof=PRODUCTION STAGING TESTING DEVELOPMENT"`
// Name is the name of this deployment.
Name string `json:"name,omitempty" validate:"omitempty,max=255"`
// URL is the deployment URL.
URL string `json:"url,omitempty" validate:"omitempty,url"`
// CreatedDate is the time this deploy pipeline starts.
// E.g. 2020-01-01T12:00:00+00:00.
CreatedDate *time.Time `json:"createdDate,omitempty" validate:"omitempty"`
// StartedDate is the time when the first deploy to a certain repo starts.
// E.g. 2020-01-01T12:00:00+00:00.
StartedDate *time.Time `json:"startedDate" validate:"required"`
// FinishedDate is the time when the last deploy to a certain repo ends.
// E.g. 2020-01-01T12:00:00+00:00.
FinishedDate *time.Time `json:"finishedDate" validate:"required"`
// DeploymentCommits is used for multiple commits in one deployment.
DeploymentCommits []DeploymentCommitsRequest `json:"deploymentCommits,omitempty" validate:"omitempty,dive"`
}
DeploymentRequest defines the request to register a Deployment.
type HTTPClient ¶
HTTPClient contains the function to perform the actual HTTP request.
type IncidentRequest ¶
type IncidentRequest struct {
// ConnectionID is the ID of the DevLake connection where to send the incident request.
ConnectionID uint64 `json:"-" validate:"required"`
// URL is the Issue URL.
URL string `json:"url,omitempty" validate:"omitempty,url"`
// IssueKey is the Issue key. It needs to be unique in a connection.
IssueKey string `json:"issueKey" validate:"required,max=255"`
// Title is the issue title.
Title string `json:"title" validate:"required,max=255"`
// Description is the issue description.
Description string `json:"description,omitempty" validate:"omitempty,max=65536"`
// EpicKey is the issue epic key.
EpicKey string `json:"epicKey,omitempty" validate:"omitempty,max=255"`
// Type is the issue type, such as INCIDENT, BUG, REQUIREMENT.
Type string `json:"type,omitempty" validate:"omitempty,max=50"`
// Status is the issue status. Must be one of: TODO, DONE, IN_PROGRESS.
Status string `json:"status" validate:"required,oneof=TODO DONE IN_PROGRESS"`
// OriginalStatus is the status in your tool, such as: created, open, closed, ...
OriginalStatus string `json:"originalStatus" validate:"required,max=255"`
// StoryPoint
StoryPoint float64 `json:"storyPoint,omitempty" validate:"omitempty"`
// ResolutionDate is the date when the issue was resolved.
// Format should be 2020-01-01T12:00:00+00:00.
ResolutionDate *time.Time `json:"resolutionDate,omitempty" validate:"omitempty"`
// CreatedDate is the date when the issue was created.
// Format should be 2020-01-01T12:00:00+00:00.
CreatedDate *time.Time `json:"createdDate" validate:"required"`
// UpdatedDate is the date when the issue was last updated.
// Format should be 2020-01-01T12:00:00+00:00.
UpdatedDate *time.Time `json:"updatedDate,omitempty" validate:"omitempty"`
// LeadTimeMinutes measures how long from this issue accepted to develop.
LeadTimeMinutes uint `json:"leadTimeMinutes,omitempty" validate:"omitempty"`
// ParentIssueKey is the key of the parent issue.
ParentIssueKey string `json:"parentIssueKey,omitempty" validate:"omitempty,max=255"`
// Priority is the issue priority.
Priority string `json:"priority,omitempty" validate:"omitempty,max=255"`
// OriginalEstimateMinutes is the original estimate in minutes.
OriginalEstimateMinutes int64 `json:"originalEstimateMinutes,omitempty" validate:"omitempty"`
// TimeSpentMinutes is the time spent on the issue in minutes.
TimeSpentMinutes int64 `json:"timeSpentMinutes,omitempty" validate:"omitempty"`
// TimeRemainingMinutes is the remaining time in minutes.
TimeRemainingMinutes int64 `json:"timeRemainingMinutes,omitempty" validate:"omitempty"`
// CreatorID is the user id of the issue creator.
CreatorID string `json:"creatorId,omitempty" validate:"omitempty,max=255"`
// CreatorName is the username of the creator.
CreatorName string `json:"creatorName,omitempty" validate:"omitempty,max=255"`
// AssigneeID is the ID of the assignee.
AssigneeID string `json:"assigneeId,omitempty" validate:"omitempty,max=255"`
// AssigneeName is the name of the assignee.
AssigneeName string `json:"assigneeName,omitempty" validate:"omitempty,max=255"`
// Severity is the severity of the issue.
Severity string `json:"severity,omitempty" validate:"omitempty,max=255"`
// Component is the affected component.
Component string `json:"component,omitempty" validate:"omitempty,max=255"`
}
IncidentRequest defines the request to register an incident (issue).
type IncidentRequestClose ¶
type IncidentRequestClose struct {
// ConnectionID is the ID of the DevLake connection where to send the incident request.
ConnectionID uint64 `json:"-" validate:"required"`
// IssueKey is the Issue key. It needs to be unique in a connection.
IssueKey string `json:"-" validate:"required,max=255"`
}
IncidentRequestClose defines the request to close an incident (issue).
type Option ¶
type Option func(c *Client)
Option is the interface that allows to set client options.
func WithHTTPClient ¶
func WithHTTPClient(hc HTTPClient) Option
WithHTTPClient overrides the default HTTP client.
func WithPingTimeout ¶
WithPingTimeout overrides the default ping timeout.
func WithPingURL ¶
WithPingURL overrides the default ping timeout.
func WithRetryAttempts ¶
WithRetryAttempts overrides the default HTTP client.
func WithRetryDelay ¶
WithRetryDelay sets the delay to apply after the first failed attempt.
func WithTimeout ¶
WithTimeout overrides the default request timeout.