Skip to content

Commit 22e008c

Browse files
authored
feat(amazonq): Support pre-release LSP versions (#6539)
## Problem We can't consume prerelease versions from the gamma manifest ## Solution Support pre release lsp versions + test ## Notes - I'll have another PR soon that pulls out the configuration so we can switch manifest urls for testing pretty easily - E2E tests won't work until #6538 is merged --- - Treat all work as PUBLIC. Private `feature/x` branches will not be squash-merged at release time. - Your code changes must meet the guidelines in [CONTRIBUTING.md](https://github.com/aws/aws-toolkit-vscode/blob/master/CONTRIBUTING.md#guidelines). - License: I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent cc4bba8 commit 22e008c

File tree

3 files changed

+45
-6
lines changed

3 files changed

+45
-6
lines changed

packages/amazonq/src/lsp/lspInstaller.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
*/
55

66
import * as vscode from 'vscode'
7-
import { Range } from 'semver'
87
import {
98
ManifestResolver,
109
LanguageServerResolver,
@@ -15,9 +14,12 @@ import {
1514
cleanLspDownloads,
1615
} from 'aws-core-vscode/shared'
1716
import path from 'path'
17+
import { Range } from 'semver'
1818

19-
const manifestURL = 'https://aws-toolkit-language-servers.amazonaws.com/codewhisperer/0/manifest.json'
20-
export const supportedLspServerVersions = '^3.1.1'
19+
export const manifestURL = 'https://aws-toolkit-language-servers.amazonaws.com/codewhisperer/0/manifest.json'
20+
export const supportedLspServerVersions = new Range('^3.1.1', {
21+
includePrerelease: true,
22+
})
2123

2224
export class AmazonQLSPResolver implements LspResolver {
2325
async resolve(): Promise<LspResolution> {
@@ -41,7 +43,7 @@ export class AmazonQLSPResolver implements LspResolver {
4143
const installationResult = await new LanguageServerResolver(
4244
manifest,
4345
name,
44-
new Range(supportedLspServerVersions)
46+
supportedLspServerVersions
4547
).resolve()
4648

4749
const nodePath = path.join(installationResult.assetDirectory, `servers/${getNodeExecutableName()}`)

packages/amazonq/test/e2e/lsp/lspInstaller.test.ts

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import assert from 'assert'
77
import sinon from 'sinon'
8-
import { AmazonQLSPResolver, supportedLspServerVersions } from '../../../src/lsp/lspInstaller'
8+
import { AmazonQLSPResolver, manifestURL, supportedLspServerVersions } from '../../../src/lsp/lspInstaller'
99
import {
1010
fs,
1111
globals,
@@ -225,5 +225,38 @@ describe('AmazonQLSPInstaller', () => {
225225

226226
assertTelemetry('languageServer_setup', expectedTelemetry)
227227
})
228+
229+
it('resolves release candidiates', async () => {
230+
const original = new ManifestResolver(manifestURL, 'AmazonQ').resolve()
231+
sandbox.stub(ManifestResolver.prototype, 'resolve').callsFake(async () => {
232+
const originalManifest = await original
233+
234+
const latestVersion = originalManifest.versions.reduce((latest, current) => {
235+
return semver.gt(current.serverVersion, latest.serverVersion) ? current : latest
236+
}, originalManifest.versions[0])
237+
238+
// These convert something like 3.1.1 to 3.2.1-rc.0
239+
const incrementedVersion = semver.inc(latestVersion.serverVersion, 'minor')
240+
if (!incrementedVersion) {
241+
assert.fail('Failed to increment minor version')
242+
}
243+
244+
const prereleaseVersion = semver.inc(incrementedVersion, 'prerelease', 'rc')
245+
if (!prereleaseVersion) {
246+
assert.fail('Failed to create pre-release version')
247+
}
248+
249+
const newVersion = {
250+
...latestVersion,
251+
serverVersion: prereleaseVersion,
252+
}
253+
254+
originalManifest.versions = [newVersion, ...originalManifest.versions]
255+
return originalManifest
256+
})
257+
258+
const download = await resolver.resolve()
259+
assert.ok(download.assetDirectory.endsWith('-rc.0'))
260+
})
228261
})
229262
})

packages/core/src/shared/lsp/lspResolver.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,11 @@ export class LanguageServerResolver {
345345
return false
346346
}
347347

348-
return semver.satisfies(version.serverVersion, this.versionRange) && !version.isDelisted
348+
return (
349+
semver.satisfies(version.serverVersion, this.versionRange, {
350+
includePrerelease: true,
351+
}) && !version.isDelisted
352+
)
349353
}
350354

351355
/**

0 commit comments

Comments
 (0)