@@ -4,6 +4,7 @@ import { unzip } from "../../lib/unzip.ts";
4
4
import { logger } from "../../logger.ts" ;
5
5
import { path } from "../../deps.ts" ;
6
6
import { cache } from "../../cache.ts" ;
7
+ import { AppError } from "../../errors.ts" ;
7
8
8
9
/**
9
10
* This variable is automatically generated by `zcli add`. Do not remove this
@@ -105,7 +106,7 @@ export async function getLatestVersion(ctx: Context, options: {
105
106
logger . info ( "Checking for the latest version..." ) ;
106
107
107
108
const response = await fetch (
108
- "https://api.github.com/repos/paperspace/cli/releases/latest " ,
109
+ "https://api.github.com/repos/paperspace/cli/releases" ,
109
110
) ;
110
111
111
112
if ( ! response . ok ) {
@@ -114,21 +115,33 @@ export async function getLatestVersion(ctx: Context, options: {
114
115
}
115
116
116
117
const json = githubReleaseSchema . parse ( await response . json ( ) ) ;
117
-
118
- await cache . set (
119
- "updateAvailable" ,
120
- {
121
- version : json . tag_name ,
122
- assets : json . assets . map ( ( asset ) => ( {
123
- name : asset . name ,
124
- url : asset . browser_download_url ,
125
- } ) ) ,
126
- } ,
127
- 60 * 60 * 8 , // 8 hours
128
- ) ;
129
-
130
- logger . info ( `Found the latest version: ${ json . tag_name } ` ) ;
131
- return json . tag_name ;
118
+ const latest = json . find ( ( release ) => ! release . prerelease ) ;
119
+
120
+ if ( latest ) {
121
+ await cache . set (
122
+ "updateAvailable" ,
123
+ {
124
+ version : latest . tag_name ,
125
+ assets : latest . assets . map ( ( asset ) => ( {
126
+ name : asset . name ,
127
+ url : asset . browser_download_url ,
128
+ } ) ) ,
129
+ } ,
130
+ 60 * 60 * 8 , // 8 hours
131
+ ) ;
132
+
133
+ logger . info ( `Found the latest version: ${ latest . tag_name } ` ) ;
134
+ return latest . tag_name ;
135
+ } else {
136
+ logger . error (
137
+ `Failed to find the latest version in the response: ${ json } ` ,
138
+ ) ;
139
+
140
+ throw new AppError ( {
141
+ message : "Failed to find the latest version." ,
142
+ exitCode : 1 ,
143
+ } ) ;
144
+ }
132
145
}
133
146
134
147
logger . info ( `Returning the latest version from cache: ${ cached . version } ` ) ;
@@ -153,7 +166,7 @@ export async function getLatestVersionAssets(
153
166
logger . info ( "Checking for the latest version..." ) ;
154
167
155
168
const response = await fetch (
156
- "https://api.github.com/repos/paperspace/cli/releases/latest " ,
169
+ "https://api.github.com/repos/paperspace/cli/releases" ,
157
170
) ;
158
171
159
172
if ( ! response . ok ) {
@@ -162,25 +175,37 @@ export async function getLatestVersionAssets(
162
175
}
163
176
164
177
const json = githubReleaseSchema . parse ( await response . json ( ) ) ;
165
-
166
- await cache . set (
167
- "updateAvailable" ,
168
- {
169
- version : json . tag_name ,
170
- assets : json . assets . map ( ( asset ) => ( {
171
- name : asset . name ,
172
- url : asset . browser_download_url ,
173
- } ) ) ,
174
- } ,
175
- 60 * 60 * 8 , // 8 hours
176
- ) ;
177
-
178
- logger . info ( `Found the latest version: ${ json . tag_name } ` ) ;
179
-
180
- return json . assets . map ( ( asset ) => ( {
181
- name : asset . name ,
182
- url : asset . browser_download_url ,
183
- } ) ) ;
178
+ const latest = json . find ( ( release ) => ! release . prerelease ) ;
179
+
180
+ if ( latest ) {
181
+ await cache . set (
182
+ "updateAvailable" ,
183
+ {
184
+ version : latest . tag_name ,
185
+ assets : latest . assets . map ( ( asset ) => ( {
186
+ name : asset . name ,
187
+ url : asset . browser_download_url ,
188
+ } ) ) ,
189
+ } ,
190
+ 60 * 60 * 8 , // 8 hours
191
+ ) ;
192
+
193
+ logger . info ( `Found the latest version: ${ latest . tag_name } ` ) ;
194
+
195
+ return latest . assets . map ( ( asset ) => ( {
196
+ name : asset . name ,
197
+ url : asset . browser_download_url ,
198
+ } ) ) ;
199
+ } else {
200
+ logger . error (
201
+ `Failed to find the latest version in the response: ${ json } ` ,
202
+ ) ;
203
+
204
+ throw new AppError ( {
205
+ message : "Failed to find the latest version." ,
206
+ exitCode : 1 ,
207
+ } ) ;
208
+ }
184
209
}
185
210
186
211
logger . info ( `Returning the latest version from cache: ${ cached . version } ` ) ;
@@ -201,12 +226,13 @@ export const _internals = {
201
226
getLatestVersionAssets,
202
227
} ;
203
228
204
- const githubReleaseSchema = z . object ( {
229
+ const githubReleaseSchema = z . array ( z . object ( {
205
230
tag_name : z . string ( ) ,
206
231
assets : z . array (
207
232
z . object ( {
208
233
name : z . string ( ) ,
209
234
browser_download_url : z . string ( ) ,
210
235
} ) ,
211
236
) ,
212
- } ) ;
237
+ prerelease : z . boolean ( ) ,
238
+ } ) ) ;
0 commit comments