forked from eclipse-efx/efxclipse-drift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
GithubAPI.groovy
150 lines (124 loc) · 4.46 KB
/
GithubAPI.groovy
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import groovy.json.JsonSlurper
import okhttp3.*
class GithubAPI {
OkHttpClient client = new OkHttpClient()
JsonSlurper slurper = new JsonSlurper()
String orga
String repo
String token
GithubAPI(orga, repo, token) {
this.orga = orga
this.repo = repo
this.token = token
}
def getReleases() {
def req = new Request.Builder()
.header("Authorization", "token $token")
.header("Content-Type", "application/json")
.url("https://api.github.com/repos/$orga/$repo/releases")
.build()
def res = client.newCall(req).execute()
assert res.code == 200
slurper.parseText(res.body.string())
}
def createRelease(tag, commitish, name, body, prerelease) {
def JSON = MediaType.get("application/json; charset=utf-8")
def msg = [
tag_name: tag,
target_commitish: commitish,
name: name,
body: body,
draft: true,
prerelease: prerelease
]
def msgj = groovy.json.JsonOutput.toJson(msg);
println new groovy.json.JsonBuilder(msgj).toPrettyString()
def requestBody = RequestBody.create(groovy.json.JsonOutput.toJson(msg), JSON)
def req = new Request.Builder()
.header("Authorization", "token $token")
.header("Content-Type", "application/json")
.url("https://api.github.com/repos/$orga/$repo/releases")
.post(requestBody)
.build()
def res = client.newCall(req).execute()
assert res.code == 201
slurper.parseText(res.body.string())
}
def uploadAsset(uploadUrl, mime, file, name, label) {
// need to remove the {?name, label} stuff
uploadUrl = uploadUrl.replaceAll('[{].*[}]', '')
def mediaType = MediaType.get(mime)
def reqBody = RequestBody.create(mediaType, file)
def httpBuilder = HttpUrl.parse(uploadUrl).newBuilder()
if (name != null) {
httpBuilder.addQueryParameter('name', name)
}
if (label != null) {
httpBuilder.addQueryParameter('label', label)
}
def url = httpBuilder.build()
def req = new Request.Builder()
.header("Authorization", "token $token")
.url(url)
.post(reqBody)
.build()
def res = client.newCall(req).execute()
assert res.code == 201
slurper.parseText(res.body.string())
}
def modifyRelease(releaseId, draft) {
def JSON = MediaType.get("application/json; charset=utf-8")
def msg = [
draft: draft
]
def msgj = groovy.json.JsonOutput.toJson(msg);
println new groovy.json.JsonBuilder(msgj).toPrettyString()
def reqBody = RequestBody.create(msgj, JSON)
def req = new Request.Builder()
.header("Authorization", "token $token")
.header("Content-Type", "application/json")
.url("https://api.github.com/repos/$orga/$repo/releases/$releaseId")
.patch(reqBody)
.build()
def res = client.newCall(req).execute()
assert res.code == 200
slurper.parseText(res.body.string())
}
def getReleaseByTagName(tagName) {
def req = new Request.Builder()
.header("Authorization", "token $token")
.header("Content-Type", "application/json")
.url("https://api.github.com/repos/$orga/$repo/releases/tags/$tagName")
.build()
def res = client.newCall(req).execute()
if (res.code == 404) {
return null
}
assert res.code == 200
slurper.parseText(res.body.string())
}
def getArtifacts(runId) {
def req = new Request.Builder()
.header("Authorization", "token $token")
.header("Content-Type", "application/json")
.url("https://api.github.com/repos/$orga/$repo/actions/runs/$runId/artifacts")
.build()
def res = client.newCall(req).execute()
assert res.code == 200
slurper.parseText(res.body.string())
}
def downloadArtifact(artifact_url, filename) {
def req = new Request.Builder()
.header("Authorization", "token $token")
.url(artifact_url)
.build()
def res = client.newCall(req).execute()
def target = new File(filename)
target.withOutputStream { out ->
res.body.byteStream().with { inStream ->
out << inStream
inStream.close()
}
}
}
}