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  }