forked from progrium/gh-release
/
gh-release.go
114 lines (104 loc) · 2.17 KB
/
gh-release.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package main
import (
"crypto/md5"
"crypto/sha1"
"crypto/sha256"
"encoding/json"
"fmt"
"hash"
"io"
"io/ioutil"
"mime"
"os"
"path/filepath"
"strconv"
"strings"
"github.com/progrium/go-basher"
)
var Version string
func assert(err error) {
if err != nil {
println("!!", err.Error())
os.Exit(2)
}
}
func fatal(msg string) {
println("!!", msg)
os.Exit(2)
}
func UploadUrl(args []string) {
bytes, err := ioutil.ReadAll(os.Stdin)
assert(err)
var release map[string]interface{}
assert(json.Unmarshal(bytes, &release))
url, ok := release["upload_url"].(string)
if !ok {
os.Exit(2)
}
i := strings.Index(url, "{")
if i > -1 {
url = url[:i]
}
i = strings.Index(url, "?")
if i > -1 {
url = url[:i]
}
fmt.Println(url + "?name=")
}
func ReleaseIdFromTagname(args []string) {
tagname := args[0]
bytes, err := ioutil.ReadAll(os.Stdin)
assert(err)
var releases []map[string]interface{}
assert(json.Unmarshal(bytes, &releases))
for _, release := range releases {
if release["tag_name"].(string) == tagname {
fmt.Println(strconv.Itoa(int(release["id"].(float64))))
return
}
}
os.Exit(2)
}
func MimeType(args []string) {
filename := args[0]
ext := filepath.Ext(filename)
mime.AddExtensionType(".gz", "application/gzip")
mime.AddExtensionType(".tgz", "application/gzip")
mime.AddExtensionType(".tar", "application/tar")
mime.AddExtensionType(".zip", "application/zip")
mimetype := mime.TypeByExtension(ext)
if mimetype != "" {
fmt.Println(mimetype)
} else {
fmt.Println("application/octet-stream")
}
}
func Checksum(args []string) {
if len(args) < 1 {
fatal("No algorithm specified")
}
var h hash.Hash
switch args[0] {
case "md5":
h = md5.New()
case "sha1":
h = sha1.New()
case "sha256":
h = sha256.New()
default:
fatal("Algorithm '" + args[0] + "' is unsupported")
}
io.Copy(h, os.Stdin)
fmt.Printf("%x\n", h.Sum(nil))
}
func main() {
os.Setenv("VERSION", Version)
basher.Application(map[string]func([]string){
"upload-url": UploadUrl,
"release-id-from-tagname": ReleaseIdFromTagname,
"mimetype": MimeType,
"checksum": Checksum,
}, []string{
"bash/gh-release.bash",
}, Asset, true)
}