aboutsummaryrefslogtreecommitdiff
path: root/src/modules/releases.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/releases.js')
-rw-r--r--src/modules/releases.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/modules/releases.js b/src/modules/releases.js
new file mode 100644
index 0000000..c071970
--- /dev/null
+++ b/src/modules/releases.js
@@ -0,0 +1,80 @@
+const requests = require("./requests");
+
+let releases = {
+ notes: {},
+ latest: {}
+}
+
+// gets and returns the release notes of a GitHub repo
+async function github_releases(repo) {
+ let request = false;
+
+ // attempt to perform the request, while caching it
+ try {
+ request = JSON.parse(await requests.get(
+ "api.github.com", `/repos/${repo}/releases`,
+ "release-notes-" + repo
+ ))
+ }catch(err) {
+ // request or parsing failed, return `false`
+ return false;
+ }
+
+ // request is somehow falsy, return `false`
+ if (! request) {
+ return false;
+ }
+
+ // return the actual request as parsed JSON
+ return request;
+}
+
+// returns release notes for Viper
+releases.notes.viper = async () => {
+ return await github_releases("0neGal/viper");
+}
+
+// returns release notes for Northstar
+releases.notes.northstar = async () => {
+ return await github_releases("R2Northstar/Northstar");
+}
+
+// gets and returns some details of the latest release of a GitHub repo
+async function github_latest(repo) {
+ let request = false;
+
+ // attempt to perform the request, while caching it
+ try {
+ request = JSON.parse(await requests.get(
+ "api.github.com", `/repos/${repo}/releases/latest`,
+ "latest-release-" + repo
+ ))
+ }catch(err) {
+ // request or parsing failed, return `false`
+ return false;
+ }
+
+ // request is somehow falsy, return `false`
+ if (! request) {
+ return false;
+ }
+
+ // return the actual request as parsed JSON
+ return {
+ notes: request.body,
+ version: request.tag_name,
+ download_link: request.assets[0].browser_download_url
+ }
+}
+
+// returns latest release for Viper
+releases.latest.viper = async () => {
+ return await github_latest("0neGal/viper");
+}
+
+// returns latest release for Northstar
+releases.latest.northstar = async () => {
+ return await github_latest("R2Northstar/Northstar");
+}
+
+module.exports = releases;