Skip to content

Commit 7c6ab65

Browse files
committed
address comments
1 parent 78356ee commit 7c6ab65

File tree

1 file changed

+24
-3
lines changed
  • website/plugins/fetch-latest-release

1 file changed

+24
-3
lines changed

website/plugins/fetch-latest-release/index.js

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@ async function fetchLatestRelease() {
33
'Accept': 'application/vnd.github.v3+json'
44
};
55

6-
// Use GitHub token if available to avoid rate limits
6+
// Use GitHub token to avoid rate limits.
7+
// In CI, GITHUB_TOKEN should always be available.
78
const token = process.env.GITHUB_TOKEN || process.env.ATMOS_GITHUB_TOKEN;
89
if (token) {
910
headers['Authorization'] = `token ${token}`;
1011
}
1112

1213
const controller = new AbortController();
13-
const timeout = setTimeout(() => controller.abort(), 10000); // 10 second timeout
14+
const timeout = setTimeout(() => controller.abort(), 30000); // 30 second timeout
15+
const isDev = process.env.NODE_ENV !== 'production';
1416

1517
try {
1618
const response = await fetch(`https://api.github.com/repos/cloudposse/atmos/releases/latest`, {
@@ -28,7 +30,26 @@ async function fetchLatestRelease() {
2830
const release = await response.json();
2931
return release.tag_name;
3032
} catch (error) {
31-
console.error(`[fetch-latest-release] Failed to fetch latest release: ${error.message}`);
33+
const errorCode = error.code || error.cause?.code;
34+
let message = `Failed to fetch latest release: ${error.message}`;
35+
36+
if (errorCode === 'UND_ERR_CONNECT_TIMEOUT' || error.name === 'AbortError') {
37+
message += '\nThis may be a network issue. Check your internet connection.';
38+
} else if (errorCode === 'ENOTFOUND') {
39+
message += '\nDNS resolution failed. Check your network configuration.';
40+
} else if (!token) {
41+
message += '\nConsider setting GITHUB_TOKEN to avoid rate limits.';
42+
}
43+
44+
// In dev mode, use placeholder so local development isn't blocked.
45+
// In production (CI/build), always fail to surface errors.
46+
if (isDev) {
47+
console.warn(`[fetch-latest-release] ${message}`);
48+
console.warn(`[fetch-latest-release] Using placeholder 'latest' for development.`);
49+
return 'latest';
50+
}
51+
52+
console.error(`[fetch-latest-release] ${message}`);
3253
throw error;
3354
} finally {
3455
clearTimeout(timeout);

0 commit comments

Comments
 (0)