@@ -8,6 +8,7 @@ import fs from "fs/promises";
8
8
import { IncomingMessage } from "http" ;
9
9
import path from "path" ;
10
10
import prettyBytes from "pretty-bytes" ;
11
+ import * as semver from "semver" ;
11
12
import * as vscode from "vscode" ;
12
13
import { errToStr } from "./api-helper" ;
13
14
import * as cli from "./cliManager" ;
@@ -139,6 +140,10 @@ export class Storage {
139
140
// and to log for debugging.
140
141
const buildInfo = await restClient . getBuildInfo ( ) ;
141
142
this . output . info ( "Got server version" , buildInfo . version ) ;
143
+ const parsedVersion = semver . parse ( buildInfo . version ) ;
144
+ if ( ! parsedVersion ) {
145
+ throw new Error ( `Got invalid version from deployment: ${ buildInfo . version } ` )
146
+ }
142
147
143
148
// Check if there is an existing binary and whether it looks valid. If it
144
149
// is valid and matches the server, or if it does not match the server but
@@ -230,9 +235,11 @@ export class Storage {
230
235
// named exactly the same with an appended `.asc` (such as
231
236
// coder-windows-amd64.exe.asc or coder-linux-amd64.asc).
232
237
binSource + ".asc" ,
233
- // The releases.coder.com bucket does not include the leading "v".
234
- // The signature name follows the same rule as above.
235
- `https://releases.coder.com/coder-cli/${ buildInfo . version . replace ( / ^ v / , "" ) } /${ binName } .asc` ,
238
+ // The releases.coder.com bucket does not include the leading "v",
239
+ // and unlike what we get from buildinfo it uses a truncated version
240
+ // with only major.minor.patch. The signature name follows the same
241
+ // rule as above.
242
+ `https://releases.coder.com/coder-cli/${ parsedVersion . major } .${ parsedVersion . minor } .${ parsedVersion . patch } /${ binName } .asc` ,
236
243
] ) ;
237
244
}
238
245
0 commit comments