Fix cache separation for versions

This commit is contained in:
Owen
2026-09-14 14:39:25 -04:00
parent f9f38fb3f0
commit b3e5de4a4d
+7 -7
View File
@@ -21,10 +21,10 @@ type ReleaseInfo = {
// Cache key holding the last known good release info. It never expires, so // Cache key holding the last known good release info. It never expires, so
// it keeps serving if GitHub is unreachable, even across restarts/nodes. // it keeps serving if GitHub is unreachable, even across restarts/nodes.
const RELEASE_INFO_KEY = "cache:newtReleaseInfo"; const RELEASE_INFO_KEY = "cache:releaseInfo";
// Short-lived marker controlling how often we re-check GitHub. While it's // Short-lived marker controlling how often we re-check GitHub. While it's
// missing (expired, or a previous attempt failed) every request retries. // missing (expired, or a previous attempt failed) every request retries.
const RELEASE_INFO_FRESH_KEY = "cache:newtReleaseInfoFresh"; const RELEASE_INFO_FRESH_KEY = "cache:releaseInfoFresh";
const RELEASE_INFO_REFRESH_SECONDS = 3600; const RELEASE_INFO_REFRESH_SECONDS = 3600;
/** /**
@@ -35,8 +35,8 @@ const RELEASE_INFO_REFRESH_SECONDS = 3600;
* subsequent request retries GitHub until it succeeds again. * subsequent request retries GitHub until it succeeds again.
*/ */
async function getLatestReleaseInfo(repo: string): Promise<ReleaseInfo | null> { async function getLatestReleaseInfo(repo: string): Promise<ReleaseInfo | null> {
const stored = await cache.get<ReleaseInfo>(RELEASE_INFO_KEY); const stored = await cache.get<ReleaseInfo>(`${RELEASE_INFO_KEY}:${repo}`);
const isFresh = await cache.has(RELEASE_INFO_FRESH_KEY); const isFresh = await cache.has(`${RELEASE_INFO_FRESH_KEY}:${repo}`);
if (stored && isFresh) { if (stored && isFresh) {
return stored; return stored;
} }
@@ -61,7 +61,7 @@ async function getLatestReleaseInfo(repo: string): Promise<ReleaseInfo | null> {
let releases: any[] = await fetchResponse.json(); let releases: any[] = await fetchResponse.json();
if (!Array.isArray(releases) || releases.length === 0) { if (!Array.isArray(releases) || releases.length === 0) {
logger.warn("No releases found for Newt repository"); logger.warn("No releases found for repository");
return stored ?? null; return stored ?? null;
} }
@@ -90,7 +90,7 @@ async function getLatestReleaseInfo(repo: string): Promise<ReleaseInfo | null> {
}); });
if (releases.length === 0) { if (releases.length === 0) {
logger.warn("No stable releases found for Newt repository"); logger.warn("No stable releases found for repository");
return stored ?? null; return stored ?? null;
} }
@@ -298,7 +298,7 @@ export async function getNewtVersion(
? `pangolin-cli_${platform}.exe` ? `pangolin-cli_${platform}.exe`
: `pangolin-cli_${platform}`; : `pangolin-cli_${platform}`;
const downloadUrl = `https://github.com/fosrl/newt/releases/download/${agent == "cli" ? releaseInfoCli?.version : releaseInfoNewt.version}/${agent == "cli" ? binaryNameCli : binaryNameNewt}`; const downloadUrl = `https://github.com/fosrl/${agent}/releases/download/${agent == "cli" ? releaseInfoCli?.version : releaseInfoNewt.version}/${agent == "cli" ? binaryNameCli : binaryNameNewt}`;
// Look up the SHA256 digest for this specific binary from the GitHub // Look up the SHA256 digest for this specific binary from the GitHub
// release asset metadata (the `digest` field, format "sha256:<hex>"). // release asset metadata (the `digest` field, format "sha256:<hex>").