diff --git a/api/release.js b/api/release.js new file mode 100644 index 0000000..2e8128d --- /dev/null +++ b/api/release.js @@ -0,0 +1,71 @@ +const https = require("https"); + +const fallbackRelease = { + tagName: "v1.1.0", + url: "https://github.com/blackdragoon26/Do-It/releases/tag/v1.1.0", +}; + +function fetchLatestRelease() { + return new Promise((resolve, reject) => { + const request = https.get( + { + hostname: "api.github.com", + path: "/repos/blackdragoon26/Do-It/releases/latest", + headers: { + Accept: "application/vnd.github+json", + "User-Agent": "Do-It-website", + }, + }, + (response) => { + let body = ""; + + response.setEncoding("utf8"); + response.on("data", (chunk) => { + body += chunk; + }); + response.on("end", () => { + if (response.statusCode < 200 || response.statusCode >= 300) { + reject(new Error(`GitHub returned ${response.statusCode}`)); + return; + } + + try { + resolve(JSON.parse(body)); + } catch (error) { + reject(error); + } + }); + }, + ); + + request.setTimeout(3000, () => { + request.destroy(new Error("GitHub release lookup timed out")); + }); + request.on("error", reject); + }); +} + +module.exports = async function handler(request, response) { + if (request.method !== "GET" && request.method !== "HEAD") { + response.setHeader("Allow", "GET, HEAD"); + response.statusCode = 405; + response.end(); + return; + } + + try { + const release = await fetchLatestRelease(); + const payload = { + tagName: release.tag_name || fallbackRelease.tagName, + url: release.html_url || fallbackRelease.url, + }; + + response.setHeader("Cache-Control", "s-maxage=3600, stale-while-revalidate=86400"); + response.setHeader("Content-Type", "application/json; charset=utf-8"); + response.end(JSON.stringify(payload)); + } catch { + response.setHeader("Cache-Control", "s-maxage=300, stale-while-revalidate=3600"); + response.setHeader("Content-Type", "application/json; charset=utf-8"); + response.end(JSON.stringify(fallbackRelease)); + } +}; diff --git a/vercel.json b/vercel.json index e57de4d..3af6ce8 100644 --- a/vercel.json +++ b/vercel.json @@ -4,6 +4,7 @@ "installCommand": null, "buildCommand": null, "outputDirectory": "website", + "ignoreCommand": "[ \"$VERCEL_GIT_COMMIT_REF\" != \"main\" ]", "git": { "deploymentEnabled": { "dev": false diff --git a/website/index.html b/website/index.html index faa3742..b6b81c2 100644 --- a/website/index.html +++ b/website/index.html @@ -26,7 +26,7 @@

Do-It

Install Source -

Latest release v1.0.0

+

Latest release v1.1.0

@@ -64,6 +64,24 @@

Run it anywhere you keep online.

github.com/blackdragoon26/Do-It