github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/release/github/statuses.go (about) 1 // Copyright 2015 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package github 5 6 import "fmt" 7 8 // Status defines a git commit on Github 9 type Status struct { 10 State string `json:"state"` 11 Context string `json:"context"` 12 } 13 14 // Statuses defines the overall status of a git commit on Github 15 type Statuses struct { 16 State string `json:"state"` 17 Statuses []Status `json:"statuses"` 18 } 19 20 const ( 21 statusesListPath = "/repos/%s/%s/statuses/%s" 22 statusListPath = "/repos/%s/%s/commits/%s/status" 23 ) 24 25 // Statuses lists statuses for a git commit 26 func getStatuses(token, user, repo, sha string) ([]Status, error) { 27 url, err := githubURL(githubAPIURL) 28 if err != nil { 29 return nil, err 30 } 31 url.Path = fmt.Sprintf(statusesListPath, user, repo, sha) 32 var statuses []Status 33 if err = Get(token, url.String()+"?per_page=100", &statuses); err != nil { 34 return nil, err 35 } 36 return statuses, nil 37 } 38 39 // OverallStatus lists the overall status for a git commit. 40 // Instead of all the statuses, it gives an overall status 41 // if all have passed, plus a list of the most recent results 42 // for each context. 43 func overallStatus(token, user, repo, sha string) (Statuses, error) { 44 url, err := githubURL(githubAPIURL) 45 if err != nil { 46 return Statuses{}, err 47 } 48 url.Path = fmt.Sprintf(statusListPath, user, repo, sha) 49 var statuses Statuses 50 if err = Get(token, url.String(), &statuses); err != nil { 51 return Statuses{}, err 52 } 53 return statuses, nil 54 }