github.com/argoproj/argo-cd/v2@v2.10.9/applicationset/services/pull_request/gitea.go (about)

     1  package pull_request
     2  
     3  import (
     4  	"context"
     5  	"crypto/tls"
     6  	"net/http"
     7  	"net/http/cookiejar"
     8  	"os"
     9  
    10  	"code.gitea.io/sdk/gitea"
    11  )
    12  
    13  type GiteaService struct {
    14  	client *gitea.Client
    15  	owner  string
    16  	repo   string
    17  }
    18  
    19  var _ PullRequestService = (*GiteaService)(nil)
    20  
    21  func NewGiteaService(ctx context.Context, token, url, owner, repo string, insecure bool) (PullRequestService, error) {
    22  	if token == "" {
    23  		token = os.Getenv("GITEA_TOKEN")
    24  	}
    25  	httpClient := &http.Client{}
    26  	if insecure {
    27  		cookieJar, _ := cookiejar.New(nil)
    28  
    29  		tr := http.DefaultTransport.(*http.Transport).Clone()
    30  		tr.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
    31  
    32  		httpClient = &http.Client{
    33  			Jar:       cookieJar,
    34  			Transport: tr,
    35  		}
    36  	}
    37  	client, err := gitea.NewClient(url, gitea.SetToken(token), gitea.SetHTTPClient(httpClient))
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  	return &GiteaService{
    42  		client: client,
    43  		owner:  owner,
    44  		repo:   repo,
    45  	}, nil
    46  }
    47  
    48  func (g *GiteaService) List(ctx context.Context) ([]*PullRequest, error) {
    49  	opts := gitea.ListPullRequestsOptions{
    50  		State: gitea.StateOpen,
    51  	}
    52  	prs, _, err := g.client.ListRepoPullRequests(g.owner, g.repo, opts)
    53  	if err != nil {
    54  		return nil, err
    55  	}
    56  	list := []*PullRequest{}
    57  	for _, pr := range prs {
    58  		list = append(list, &PullRequest{
    59  			Number:       int(pr.Index),
    60  			Branch:       pr.Head.Ref,
    61  			TargetBranch: pr.Base.Ref,
    62  			HeadSHA:      pr.Head.Sha,
    63  			Labels:       getGiteaPRLabelNames(pr.Labels),
    64  		})
    65  	}
    66  	return list, nil
    67  }
    68  
    69  // Get the Gitea pull request label names.
    70  func getGiteaPRLabelNames(giteaLabels []*gitea.Label) []string {
    71  	var labelNames []string
    72  	for _, giteaLabel := range giteaLabels {
    73  		labelNames = append(labelNames, giteaLabel.Name)
    74  	}
    75  	return labelNames
    76  }