github.com/jamescostian/go-swagger@v0.30.4-0.20221130163922-68364d6b567b/hack/download-stats.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "flag" 6 "fmt" 7 "io" 8 "log" 9 "net/http" 10 "os" 11 ) 12 13 var ( 14 allVersions bool 15 version string = "latest" 16 ) 17 18 func init() { 19 flag.BoolVar(&allVersions, "all", allVersions, "when specified it will download stats for all versions") 20 flag.StringVar(&version, "version", version, "the version to download stats for") 21 } 22 23 func main() { 24 flag.Parse() 25 26 req, err := http.NewRequest("GET", "https://api.github.com/repos/go-swagger/go-swagger/releases", nil) 27 if err != nil { 28 log.Fatalln(err) 29 } 30 31 req.Header.Add("Authorization", "token "+os.Getenv("GITHUB_TOKEN")) 32 33 resp, err := http.DefaultClient.Do(req) 34 if err != nil { 35 log.Fatalln(err) 36 } 37 defer resp.Body.Close() 38 39 if resp.StatusCode/100 != 2 { 40 b, err := io.ReadAll(resp.Body) 41 if err != nil { 42 log.Fatalln(err) //nolint: gocritic 43 } 44 log.Fatalf("%s: %s", resp.Status, b) //nolint: gocritic 45 } 46 47 var results []struct { 48 TagName string `json:"tag_name"` 49 Assets []struct { 50 Name string `json:"name"` 51 Downloads int64 `json:"download_count"` 52 } `json:"assets"` 53 } 54 55 dec := json.NewDecoder(resp.Body) 56 if err := dec.Decode(&results); err != nil { 57 log.Fatalln(err) 58 } 59 60 for i, result := range results { 61 if !allVersions { 62 if (version == "latest" || version == "") && i > 0 { 63 break 64 } 65 } 66 if allVersions && i > 0 { 67 fmt.Println() 68 } 69 70 if !allVersions && (version != "latest" && version != "") && result.TagName != version { 71 continue 72 } 73 74 fmt.Println("Stats for release:", result.TagName) 75 for _, asset := range result.Assets { 76 fmt.Printf("%25s: %d\n", asset.Name, asset.Downloads) 77 } 78 79 if !allVersions && (version != "latest" && version != "") && result.TagName != version { 80 break 81 } 82 } 83 }