mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-18 08:26:45 +02:00
175 lines
5.5 KiB
Go
175 lines
5.5 KiB
Go
// Copyright 2014 The go-github AUTHORS. All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package github
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
// Deployment represents a deployment in a repo
|
|
type Deployment struct {
|
|
URL *string `json:"url,omitempty"`
|
|
ID *int `json:"id,omitempty"`
|
|
SHA *string `json:"sha,omitempty"`
|
|
Ref *string `json:"ref,omitempty"`
|
|
Task *string `json:"task,omitempty"`
|
|
Payload json.RawMessage `json:"payload,omitempty"`
|
|
Environment *string `json:"environment,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
Creator *User `json:"creator,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
UpdatedAt *Timestamp `json:"pushed_at,omitempty"`
|
|
}
|
|
|
|
// DeploymentRequest represents a deployment request
|
|
type DeploymentRequest struct {
|
|
Ref *string `json:"ref,omitempty"`
|
|
Task *string `json:"task,omitempty"`
|
|
AutoMerge *bool `json:"auto_merge,omitempty"`
|
|
RequiredContexts []string `json:"required_contexts,omitempty"`
|
|
Payload *string `json:"payload,omitempty"`
|
|
Environment *string `json:"environment,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
}
|
|
|
|
// DeploymentsListOptions specifies the optional parameters to the
|
|
// RepositoriesService.ListDeployments method.
|
|
type DeploymentsListOptions struct {
|
|
// SHA of the Deployment.
|
|
SHA string `url:"sha,omitempty"`
|
|
|
|
// List deployments for a given ref.
|
|
Ref string `url:"ref,omitempty"`
|
|
|
|
// List deployments for a given task.
|
|
Task string `url:"task,omitempty"`
|
|
|
|
// List deployments for a given environment.
|
|
Environment string `url:"environment,omitempty"`
|
|
|
|
ListOptions
|
|
}
|
|
|
|
// ListDeployments lists the deployments of a repository.
|
|
//
|
|
// GitHub API docs: https://developer.github.com/v3/repos/deployments/#list-deployments
|
|
func (s *RepositoriesService) ListDeployments(owner, repo string, opt *DeploymentsListOptions) ([]Deployment, *Response, error) {
|
|
u := fmt.Sprintf("repos/%v/%v/deployments", owner, repo)
|
|
u, err := addOptions(u, opt)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
req, err := s.client.NewRequest("GET", u, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
// TODO: remove custom Accept header when this API fully launches
|
|
req.Header.Set("Accept", mediaTypeDeploymentPreview)
|
|
|
|
deployments := new([]Deployment)
|
|
resp, err := s.client.Do(req, deployments)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return *deployments, resp, err
|
|
}
|
|
|
|
// CreateDeployment creates a new deployment for a repository.
|
|
//
|
|
// GitHub API docs: https://developer.github.com/v3/repos/deployments/#create-a-deployment
|
|
func (s *RepositoriesService) CreateDeployment(owner, repo string, request *DeploymentRequest) (*Deployment, *Response, error) {
|
|
u := fmt.Sprintf("repos/%v/%v/deployments", owner, repo)
|
|
|
|
req, err := s.client.NewRequest("POST", u, request)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
// TODO: remove custom Accept header when this API fully launches
|
|
req.Header.Set("Accept", mediaTypeDeploymentPreview)
|
|
|
|
d := new(Deployment)
|
|
resp, err := s.client.Do(req, d)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return d, resp, err
|
|
}
|
|
|
|
// DeploymentStatus represents the status of a
|
|
// particular deployment.
|
|
type DeploymentStatus struct {
|
|
ID *int `json:"id,omitempty"`
|
|
State *string `json:"state,omitempty"`
|
|
Creator *User `json:"creator,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
TargetURL *string `json:"target_url,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
UpdatedAt *Timestamp `json:"pushed_at,omitempty"`
|
|
}
|
|
|
|
// DeploymentStatusRequest represents a deployment request
|
|
type DeploymentStatusRequest struct {
|
|
State *string `json:"state,omitempty"`
|
|
TargetURL *string `json:"target_url,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
}
|
|
|
|
// ListDeploymentStatuses lists the statuses of a given deployment of a repository.
|
|
//
|
|
// GitHub API docs: https://developer.github.com/v3/repos/deployments/#list-deployment-statuses
|
|
func (s *RepositoriesService) ListDeploymentStatuses(owner, repo string, deployment int, opt *ListOptions) ([]DeploymentStatus, *Response, error) {
|
|
u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses", owner, repo, deployment)
|
|
u, err := addOptions(u, opt)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
req, err := s.client.NewRequest("GET", u, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
// TODO: remove custom Accept header when this API fully launches
|
|
req.Header.Set("Accept", mediaTypeDeploymentPreview)
|
|
|
|
statuses := new([]DeploymentStatus)
|
|
resp, err := s.client.Do(req, statuses)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return *statuses, resp, err
|
|
}
|
|
|
|
// CreateDeploymentStatus creates a new status for a deployment.
|
|
//
|
|
// GitHub API docs: https://developer.github.com/v3/repos/deployments/#create-a-deployment-status
|
|
func (s *RepositoriesService) CreateDeploymentStatus(owner, repo string, deployment int, request *DeploymentStatusRequest) (*DeploymentStatus, *Response, error) {
|
|
u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses", owner, repo, deployment)
|
|
|
|
req, err := s.client.NewRequest("POST", u, request)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
// TODO: remove custom Accept header when this API fully launches
|
|
req.Header.Set("Accept", mediaTypeDeploymentPreview)
|
|
|
|
d := new(DeploymentStatus)
|
|
resp, err := s.client.Do(req, d)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return d, resp, err
|
|
}
|