github.com/SAP/jenkins-library@v1.362.0/cmd/githubSetCommitStatus.go (about)

     1  package cmd
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"strings"
     7  
     8  	"github.com/SAP/jenkins-library/pkg/log"
     9  	"github.com/SAP/jenkins-library/pkg/telemetry"
    10  	"github.com/google/go-github/v45/github"
    11  
    12  	"github.com/pkg/errors"
    13  
    14  	piperGithub "github.com/SAP/jenkins-library/pkg/github"
    15  )
    16  
    17  type gitHubCommitStatusRepositoriesService interface {
    18  	CreateStatus(ctx context.Context, owner, repo, ref string, status *github.RepoStatus) (*github.RepoStatus, *github.Response, error)
    19  }
    20  
    21  func githubSetCommitStatus(config githubSetCommitStatusOptions, telemetryData *telemetry.CustomData) {
    22  	// TODO provide parameter for trusted certs
    23  	ctx, client, err := piperGithub.NewClientBuilder(config.Token, config.APIURL).Build()
    24  	if err != nil {
    25  		log.Entry().WithError(err).Fatal("Failed to get GitHub client")
    26  	}
    27  
    28  	err = runGithubSetCommitStatus(ctx, &config, telemetryData, client.Repositories)
    29  	if err != nil {
    30  		log.Entry().WithError(err).Fatal("GitHub status update failed")
    31  	}
    32  }
    33  
    34  func runGithubSetCommitStatus(ctx context.Context, config *githubSetCommitStatusOptions, telemetryData *telemetry.CustomData, ghRepositoriesService gitHubCommitStatusRepositoriesService) error {
    35  	status := github.RepoStatus{Context: &config.Context, Description: &config.Description, State: &config.Status, TargetURL: &config.TargetURL}
    36  	_, _, err := ghRepositoriesService.CreateStatus(ctx, config.Owner, config.Repository, config.CommitID, &status)
    37  	if err != nil {
    38  		if strings.Contains(fmt.Sprint(err), "No commit found for SHA") {
    39  			log.SetErrorCategory(log.ErrorCustom)
    40  		}
    41  		return errors.Wrapf(err, "failed to set status '%v' on commitId '%v'", config.Status, config.CommitID)
    42  	}
    43  	return nil
    44  }