@@ -12,9 +12,22 @@ async function run() {
1212 // Get the download URL for the release
1313 const releaseUrl = `https://api.github.com/repos/apppackio/apppack/releases/${ version } ` ;
1414 const data = await downloadJson ( releaseUrl ) ;
15- if ( ! data . tag_name ) {
16- throw new Error ( `Invalid API response: ${ JSON . stringify ( data ) } ` ) ;
15+
16+ // Validate the API response
17+ if ( ! data || ! data . tag_name ) {
18+ throw new Error (
19+ `Failed to fetch release information for version '${ version } '. ` +
20+ `Please check if the version exists or try 'latest'.`
21+ ) ;
22+ }
23+
24+ if ( ! data . assets || data . assets . length === 0 ) {
25+ throw new Error (
26+ `No assets found for release ${ data . tag_name } . ` +
27+ `This may be a draft release or the release process may have failed.`
28+ ) ;
1729 }
30+
1831 // strip the leading "v" from the tag name
1932 version = data . tag_name . slice ( 1 ) ;
2033 // Determine the platform-specific asset name
@@ -64,11 +77,30 @@ async function downloadJson(url) {
6477 { headers : { "User-Agent" : "apppackio/setup-apppack" } } ,
6578 ( res ) => {
6679 let data = "" ;
80+
81+ // Check for non-success status codes
82+ if ( res . statusCode !== 200 ) {
83+ if ( res . statusCode === 404 ) {
84+ reject ( new Error ( `Release not found (404). Please check if the version exists.` ) ) ;
85+ } else {
86+ reject ( new Error ( `GitHub API request failed with status ${ res . statusCode } ` ) ) ;
87+ }
88+ return ;
89+ }
90+
6791 res . on ( "data" , ( chunk ) => ( data += chunk ) ) ;
68- res . on ( "end" , ( ) => resolve ( JSON . parse ( data ) ) ) ;
92+ res . on ( "end" , ( ) => {
93+ try {
94+ resolve ( JSON . parse ( data ) ) ;
95+ } catch ( e ) {
96+ reject ( new Error ( `Failed to parse GitHub API response: ${ e . message } ` ) ) ;
97+ }
98+ } ) ;
6999 }
70100 ) ;
71- req . on ( "error" , reject ) ;
101+ req . on ( "error" , ( e ) => {
102+ reject ( new Error ( `Network error accessing GitHub API: ${ e . message } ` ) ) ;
103+ } ) ;
72104 } ) ;
73105}
74106
0 commit comments