@@ -8,6 +8,7 @@ import fs from "fs/promises";
88import { IncomingMessage } from "http" ;
99import path from "path" ;
1010import prettyBytes from "pretty-bytes" ;
11+ import * as semver from "semver" ;
1112import * as vscode from "vscode" ;
1213import { errToStr } from "./api-helper" ;
1314import * as cli from "./cliManager" ;
@@ -139,6 +140,12 @@ export class Storage {
139140 // and to log for debugging.
140141 const buildInfo = await restClient . getBuildInfo ( ) ;
141142 this . output . info ( "Got server version" , buildInfo . version ) ;
143+ const parsedVersion = semver . parse ( buildInfo . version ) ;
144+ if ( ! parsedVersion ) {
145+ throw new Error (
146+ `Got invalid version from deployment: ${ buildInfo . version } ` ,
147+ ) ;
148+ }
142149
143150 // Check if there is an existing binary and whether it looks valid. If it
144151 // is valid and matches the server, or if it does not match the server but
@@ -230,9 +237,11 @@ export class Storage {
230237 // named exactly the same with an appended `.asc` (such as
231238 // coder-windows-amd64.exe.asc or coder-linux-amd64.asc).
232239 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` ,
240+ // The releases.coder.com bucket does not include the leading "v",
241+ // and unlike what we get from buildinfo it uses a truncated version
242+ // with only major.minor.patch. The signature name follows the same
243+ // rule as above.
244+ `https://releases.coder.com/coder-cli/${ parsedVersion . major } .${ parsedVersion . minor } .${ parsedVersion . patch } /${ binName } .asc` ,
236245 ] ) ;
237246 }
238247
0 commit comments