github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/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 }