@@ -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