Skip to content

Commit b511d57

Browse files
committed
Add updates checker script
1 parent 14e165e commit b511d57

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
use std, types, http, functional, json, regex
2+
3+
API_URL="https://api.github.com/repos/aNNiMON/Own-Programming-Language-Tutorial/releases"
4+
PATTERN_VERSION = Pattern.compile("v?(\\d+)\\.(\\d+)\\.(\\d+).*?")
5+
CURRENT_VERSION = [OwnLang.VERSION_MAJOR, OwnLang.VERSION_MINOR, OwnLang.VERSION_PATCH]
6+
7+
def populateVersion(r) {
8+
version = r.name ?? "0.0.0"
9+
r.versionParts = getVersionParts(version);
10+
return r
11+
}
12+
13+
def getVersionParts(version) {
14+
m = PATTERN_VERSION.matcher(version)
15+
if (m.matches()) {
16+
return [int(m.group(1)), int(m.group(2)), int(m.group(3))]
17+
} else {
18+
return [0, 0, 0]
19+
}
20+
}
21+
22+
def compareRelease(releaseVersion, currentVersion) {
23+
extract(rmajor, rminor, rpatch) = releaseVersion
24+
extract(cmajor, cminor, cpatch) = currentVersion
25+
if (rmajor > cmajor) return 1
26+
else if (rmajor < cmajor) return -1
27+
else if (rminor > cminor) return 1
28+
else if (rminor < cminor) return -1
29+
else if (rpatch > cminor) return 1
30+
else if (rpatch < cminor) return -1
31+
else return 0
32+
}
33+
34+
extract(status, data) = httpSync(API_URL)
35+
if (!status) {
36+
println "Unable to get releases metadata"
37+
exit(1)
38+
}
39+
40+
newerVersions = stream(jsondecode(data))
41+
.filter(def(r) = !r.draft && !r.prerelease)
42+
.sortBy(def(r) = r.published_at)
43+
.map(::populateVersion)
44+
.dropWhile(def(r) = compareRelease(r.versionParts, CURRENT_VERSION) <= 0)
45+
.toArray()
46+
47+
if (newerVersions.isEmpty()) {
48+
println "You're using the latest version: " + CURRENT_VERSION.joinToString(".")
49+
} else {
50+
newestVersion = newerVersions[newerVersions.length - 1]
51+
println "New version available: " + newestVersion.versionParts.joinToString(".")
52+
println "Current version: " + CURRENT_VERSION.joinToString(".")
53+
println newestVersion.html_url
54+
println "\nWhat's new:"
55+
println newestVersion.body
56+
}
57+
exit(0)

0 commit comments

Comments
 (0)