github.com/hawser/git-hawser@v2.5.2+incompatible/script/release.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "flag" 6 "fmt" 7 "log" 8 "net/url" 9 "os" 10 "os/exec" 11 "strings" 12 ) 13 14 var ( 15 ReleaseId = flag.Int("id", 0, "git-lfs/git-lfs Release ID") 16 uploadUrlFmt = "https://uploads.github.com/repos/git-lfs/git-lfs/releases/%d/assets?%s" 17 ) 18 19 func mainRelease() { 20 if *ReleaseId < 1 { 21 log.Println("Need a valid git-lfs/git-lfs release id.") 22 log.Fatalln("usage: script/release -id") 23 } 24 25 file, err := os.Open("bin/releases/build_matrix.json") 26 if err != nil { 27 log.Println("Error opening build_matrix.json:", err) 28 log.Fatalln("Ensure `make release` has completed successfully") 29 } 30 31 defer file.Close() 32 33 buildMatrix := make(map[string]Release) 34 if err := json.NewDecoder(file).Decode(&buildMatrix); err != nil { 35 log.Fatalln("Error reading build_matrix.json:", err) 36 } 37 38 for _, rel := range buildMatrix { 39 release(rel) 40 fmt.Println() 41 } 42 43 fmt.Println("SHA-256 hashes:") 44 for _, rel := range buildMatrix { 45 fmt.Printf("**%s**\n%s\n\n", rel.Filename, rel.SHA256) 46 } 47 } 48 49 func release(rel Release) { 50 query := url.Values{} 51 query.Add("name", rel.Filename) 52 query.Add("label", rel.Label) 53 54 args := []string{ 55 "-in", 56 "-H", "Content-Type: application/octet-stream", 57 "-X", "POST", 58 "--data-binary", "@bin/releases/" + rel.Filename, 59 fmt.Sprintf(uploadUrlFmt, *ReleaseId, query.Encode()), 60 } 61 62 fmt.Println("curl", strings.Join(args, " ")) 63 64 cmd := exec.Command("curl", args...) 65 66 by, err := cmd.Output() 67 if err != nil { 68 log.Fatalln("Error running curl:", err) 69 } 70 71 fmt.Println(string(by)) 72 }