diff --git a/routes/version.js b/routes/version.js index f50b21a..21ee502 100644 --- a/routes/version.js +++ b/routes/version.js @@ -1,53 +1,62 @@ const axios = require("axios"); const express = require("express"); +const moment = require("moment-timezone"); + const router = express.Router(); -const moment = require('moment-timezone'); -// Fetch the latest commit from a GitHub repository +let latestCommitCache = null; +let lastFetchedTime = 0; +const CACHE_DURATION = 5 * 60 * 1000; // 5 minutes in milliseconds + async function fetchLatestCommitFromGitHub() { - const githubOwner = process.env.GITHUB_OWNER; // Your GitHub username or org - const githubRepo = process.env.GITHUB_REPO; // Your repository name - - try { - const url = `https://api.github.com/repos/${githubOwner}/${githubRepo}/commits`; - - // Removed the unnecessary "body" property from the request - const response = await axios.get(url, { - headers: { - 'Content-Type': 'application/json', - } - }); - - if (response.data && response.data.length > 0) { - const latestCommit = response.data[0]; - return { - sha: latestCommit.sha, - message: latestCommit.commit.message, - author: latestCommit.commit.author.name, - date: latestCommit.commit.author.date, - }; - } else { - throw new Error('No commits found.'); - } - } catch (error) { - throw new Error(`Error fetching commit: ${error.message}`); - } - } - - // Route to get the version (latest commit from GitHub) - router.get("/", async (req, res) => { - try { - const latestCommit = await fetchLatestCommitFromGitHub(); - res.json({ - version: (latestCommit.sha).substring(0,5), - message: latestCommit.message, - author: latestCommit.author, - date: moment(latestCommit.date).tz('America/New_York').format('YYYY-MM-DD HH:mm:ss'), - }); - } catch (error) { - console.error("Error fetching latest commit:", error); - res.status(500).json({ message: "Error retrieving version information" }); - } - }); + const githubOwner = process.env.GITHUB_OWNER; + const githubRepo = process.env.GITHUB_REPO; - module.exports = router; \ No newline at end of file + try { + const url = `https://api.github.com/repos/${githubOwner}/${githubRepo}/commits`; + const response = await axios.get(url, { + headers: { + "Content-Type": "application/json", + }, + }); + + if (response.data && response.data.length > 0) { + const latestCommit = response.data[0]; + latestCommitCache = { + sha: latestCommit.sha, + message: latestCommit.commit.message, + author: latestCommit.commit.author.name, + date: latestCommit.commit.author.date, + }; + lastFetchedTime = Date.now(); + } else { + throw new Error("No commits found."); + } + } catch (error) { + console.error("Error fetching commit:", error.message); + } +} + +// Initial fetch to populate cache +fetchLatestCommitFromGitHub(); + +// Refresh cache every 5 minutes +setInterval(fetchLatestCommitFromGitHub, CACHE_DURATION); + +// Route to get the latest commit (cached) +router.get("/", async (req, res) => { + if (!latestCommitCache) { + return res.status(500).json({ message: "Commit data is not available yet." }); + } + + res.json({ + version: latestCommitCache.sha.substring(0, 5), + message: latestCommitCache.message, + author: latestCommitCache.author, + date: moment(latestCommitCache.date) + .tz("America/New_York") + .format("YYYY-MM-DD HH:mm:ss"), + }); +}); + +module.exports = router; \ No newline at end of file