github.com/wtfutil/wtf@v0.43.0/modules/travisci/client.go (about) 1 package travisci 2 3 import ( 4 "fmt" 5 "net/http" 6 "net/url" 7 8 "github.com/wtfutil/wtf/utils" 9 ) 10 11 var TRAVIS_HOSTS = map[bool]string{ 12 false: "travis-ci.org", 13 true: "travis-ci.com", 14 } 15 16 func BuildsFor(settings *Settings) (*Builds, error) { 17 builds := &Builds{} 18 19 travisAPIURL.Host = "api." + TRAVIS_HOSTS[settings.pro] 20 if settings.baseURL != "" { 21 travisAPIURL.Host = settings.baseURL 22 } 23 24 resp, err := travisBuildRequest(settings) 25 if err != nil { 26 return builds, err 27 } 28 29 err = utils.ParseJSON(&builds, resp.Body) 30 if err != nil { 31 return builds, err 32 } 33 34 return builds, nil 35 } 36 37 /* -------------------- Unexported Functions -------------------- */ 38 39 var ( 40 travisAPIURL = &url.URL{Scheme: "https", Path: "/"} 41 ) 42 43 func travisBuildRequest(settings *Settings) (*http.Response, error) { 44 var path string = "builds" 45 if settings.baseURL != "" { 46 travisAPIURL.Path = "/api/" 47 } 48 params := url.Values{} 49 params.Add("limit", settings.limit) 50 params.Add("sort_by", settings.sort_by) 51 52 requestUrl := travisAPIURL.ResolveReference(&url.URL{Path: path, RawQuery: params.Encode()}) 53 54 req, err := http.NewRequest("GET", requestUrl.String(), http.NoBody) 55 if err != nil { 56 return nil, err 57 } 58 req.Header.Add("Accept", "application/json") 59 req.Header.Add("Content-Type", "application/json") 60 req.Header.Add("Travis-API-Version", "3") 61 62 bearer := fmt.Sprintf("token %s", settings.apiKey) 63 req.Header.Add("Authorization", bearer) 64 65 httpClient := &http.Client{} 66 resp, err := httpClient.Do(req) 67 if err != nil { 68 return nil, err 69 } 70 defer func() { _ = resp.Body.Close() }() 71 72 if resp.StatusCode < 200 || resp.StatusCode > 299 { 73 return nil, fmt.Errorf(resp.Status) 74 } 75 76 return resp, nil 77 }