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  }