| 57 | } |
| 58 | |
| 59 | func getLatestGoSwaggerURL(client *http.Client, file string) string { |
| 60 | url := "https://api.github.com/repos/go-swagger/go-swagger/releases/latest" |
| 61 | |
| 62 | jsonRequest, err := http.NewRequest("GET", url, nil) |
| 63 | if err != nil { |
| 64 | log.Fatalf("%v", err) |
| 65 | } |
| 66 | if os.Getenv("GITHUB_TOKEN") != "" { |
| 67 | jsonRequest.Header.Add("authorization", "bearer "+os.Getenv("GITHUB_TOKEN")) |
| 68 | } |
| 69 | |
| 70 | jsonResponse, err := client.Do(jsonRequest) |
| 71 | if err != nil { |
| 72 | log.Fatalf("failed to download information about the latest go-swagger release (%v)", err) |
| 73 | } |
| 74 | defer func() { |
| 75 | _ = jsonResponse.Body.Close() |
| 76 | }() |
| 77 | |
| 78 | if jsonResponse.StatusCode != 200 { |
| 79 | log.Fatalf("invalid HTTP response code for release query (%s)", jsonResponse.Status) |
| 80 | } |
| 81 | |
| 82 | releaseResponse := &GitHubReleaseResponse{} |
| 83 | err = json.NewDecoder(jsonResponse.Body).Decode(releaseResponse) |
| 84 | if err != nil { |
| 85 | log.Fatalf("failed to decode github release data (%v)", err) |
| 86 | } |
| 87 | |
| 88 | url = "" |
| 89 | for _, asset := range releaseResponse.Assets { |
| 90 | log.Printf("Asset: %s | %s", asset.Name, asset.BrowserDownloadUrl) |
| 91 | if asset.Name == file { |
| 92 | url = asset.BrowserDownloadUrl |
| 93 | } |
| 94 | } |
| 95 | if url == "" { |
| 96 | log.Fatalf("failed to find URL for go-swagger executable") |
| 97 | } |
| 98 | return url |
| 99 | } |
| 100 | |
| 101 | func downloadGoSwaggerBinary(url string, client *http.Client) []byte { |
| 102 | binaryRequest, err := http.NewRequest("GET", url, nil) |