Skip to content

Commit d3beee2

Browse files
Merge pull request #33 from gjsjohnmurray/magenta-snake
Fix overprompting during authentication
2 parents b9b2ea9 + 7f70825 commit d3beee2

File tree

11 files changed

+1293
-735
lines changed

11 files changed

+1293
-735
lines changed

.github/workflows/main.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ jobs:
6666
- name: Use Node.js
6767
uses: actions/setup-node@v3
6868
with:
69-
node-version: 16
69+
node-version: 20
7070
- run: npm install
7171
- name: lint
7272
if: runner.os == 'Linux-NOSUCH'
@@ -80,12 +80,12 @@ jobs:
8080
if: runner.os == 'Linux'
8181
run: |
8282
npx vsce package -o ${{ steps.set-version.outputs.name }}.vsix
83-
- uses: actions/upload-artifact@v3
83+
- uses: actions/upload-artifact@v4.4.2
8484
if: (runner.os == 'Linux') && (github.event_name != 'release')
8585
with:
8686
name: ${{ steps.set-version.outputs.name }}.vsix
8787
path: ${{ steps.set-version.outputs.name }}.vsix
88-
- uses: actions/upload-artifact@v3
88+
- uses: actions/upload-artifact@v4.4.2
8989
if: runner.os == 'Linux'
9090
with:
9191
name: meta
@@ -136,7 +136,7 @@ jobs:
136136
- name: Use Node.js
137137
uses: actions/setup-node@v3
138138
with:
139-
node-version: 16
139+
node-version: 20
140140
- name: Prepare build
141141
id: set-version
142142
run: |

package-lock.json

Lines changed: 1239 additions & 676 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"objectscript"
1616
],
1717
"engines": {
18-
"vscode": "^1.76.0"
18+
"vscode": "^1.93.0"
1919
},
2020
"icon": "images/logo.png",
2121
"categories": [
@@ -49,17 +49,17 @@
4949
"tough-cookie": "^4.0.0"
5050
},
5151
"devDependencies": {
52-
"@intersystems-community/intersystems-servermanager": "latest",
52+
"@intersystems-community/intersystems-servermanager": "^3.8.0",
5353
"@types/glob": "^7.1.1",
5454
"@types/mocha": "^9.0.0",
5555
"@types/node": "^8.10.60",
56-
"@types/vscode": "^1.76.0",
57-
"@vscode/test-electron": "^2.3.2",
56+
"@types/vscode": "^1.93.0",
57+
"@vscode/test-electron": "^2.3.8",
5858
"glob": "^7.1.6",
5959
"mocha": "^9.2.2",
6060
"ts-loader": "^9.4.2",
6161
"tslint": "^5.20.1",
62-
"typescript": "^4.4.3"
62+
"typescript": "^5.5.4"
6363
},
6464
"main": "./out/extension",
6565
"activationEvents": [

src/commonRunTestsHandler.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import * as vscode from 'vscode';
2-
import { allTestRuns, extensionId, IServerSpec, osAPI } from './extension';
2+
import { IServerSpec } from "@intersystems-community/intersystems-servermanager";
3+
import { allTestRuns, extensionId, osAPI } from './extension';
34
import { relativeTestRoot } from './localTests';
45
import logger from './logger';
56
import { makeRESTRequest } from './makeRESTRequest';
67

78
export async function commonRunTestsHandler(controller: vscode.TestController, resolveItemChildren: (item: vscode.TestItem) => Promise<void>, request: vscode.TestRunRequest, cancellation: vscode.CancellationToken) {
8-
logger.info(`commonRunTestsHandler invoked by controller id=${controller.id}`);
9+
logger.debug(`commonRunTestsHandler invoked by controller id=${controller.id}`);
910

1011
const isResolvedMap = new WeakMap<vscode.TestItem, boolean>();
1112

src/extension.ts

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"use strict";
22

33
import * as vscode from "vscode";
4+
import * as serverManager from "@intersystems-community/intersystems-servermanager";
45
import { setupHistoryExplorerController } from "./historyExplorer";
56
import { setupServerTestsController } from "./serverTests";
67
import { setupLocalTestsController } from "./localTests";
@@ -11,36 +12,14 @@ export let localTestController: vscode.TestController;
1112
export let loadedTestController: vscode.TestController;
1213
export let historyBrowserController: vscode.TestController;
1314
export let osAPI: any;
14-
export let smAPI: any;
15+
export let smAPI: serverManager.ServerManagerAPI | undefined;
1516

1617
export interface TestRun extends vscode.TestRun {
1718
debugSession?: vscode.DebugSession
1819
}
1920
export const allTestRuns: (TestRun | undefined)[] = [];
2021

21-
export interface IWebServerSpec {
22-
scheme?: string;
23-
host: string;
24-
port: number;
25-
pathPrefix?: string;
26-
}
27-
28-
export interface IServerSpec {
29-
name: string;
30-
webServer: IWebServerSpec;
31-
username?: string;
32-
password?: string;
33-
description?: string;
34-
}
35-
36-
export interface IJSONServerSpec {
37-
webServer: IWebServerSpec;
38-
username?: string;
39-
password?: string;
40-
description?: string;
41-
}
42-
43-
async function getServerManagerAPI(): Promise<any> {
22+
async function getServerManagerAPI(): Promise<serverManager.ServerManagerAPI | undefined> {
4423
const targetExtension = vscode.extensions.getExtension("intersystems-community.servermanager");
4524
if (!targetExtension) {
4625
return undefined;

src/historyExplorer.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as vscode from 'vscode';
2-
import { historyBrowserController, IServerSpec, osAPI, smAPI } from './extension';
2+
import { IServerSpec } from "@intersystems-community/intersystems-servermanager";
3+
import { historyBrowserController, osAPI, smAPI } from './extension';
34
import logger from './logger';
45
import { makeRESTRequest } from './makeRESTRequest';
56

@@ -11,7 +12,7 @@ interface IResult {
1112
const resultMap = new WeakMap<vscode.TestItem, IResult>();
1213

1314
export async function setupHistoryExplorerController() {
14-
logger.info('setupHistoryExplorerController invoked');
15+
logger.debug('setupHistoryExplorerController invoked');
1516

1617
historyBrowserController.resolveHandler = async (item) => {
1718
if (item) {
@@ -48,6 +49,9 @@ export async function setupHistoryExplorerController() {
4849
export async function serverSpec(item: vscode.TestItem): Promise<IServerSpec | undefined> {
4950
const serverName = item.id.split(':')[0];
5051
if (serverName) {
52+
if (!smAPI) {
53+
return undefined;
54+
}
5155
return await smAPI.getServerSpec(serverName);
5256
}
5357
else {

src/localTests.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ async function runTestsHandler(request: vscode.TestRunRequest, cancellation: vsc
8080
}
8181

8282
export async function setupLocalTestsController(): Promise<vscode.Disposable> {
83-
logger.info('setupLocalTestsController invoked');
83+
logger.debug('setupLocalTestsController invoked');
8484

8585
function showLoadingMessage() {
8686
localTestController.items.replace([localTestController.createTestItem('-', 'loading...')]);

src/makeRESTRequest.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import axios, { AxiosResponse } from "axios";
22
import axiosCookieJarSupport from "axios-cookiejar-support";
33
import tough = require("tough-cookie");
44
import * as vscode from "vscode";
5-
import { IServerSpec } from "./extension";
5+
import { IServerSpec } from "@intersystems-community/intersystems-servermanager";
6+
import { smAPI } from "./extension";
67
import * as https from 'https';
78

89
const AUTHENTICATION_PROVIDER = "intersystems-server-credentials";
@@ -137,19 +138,21 @@ export async function makeRESTRequest(
137138
}
138139

139140
export async function resolveCredentials(serverSpec: IServerSpec) {
140-
// This arises if setting says to use authentication provider
141-
if (typeof serverSpec.password === "undefined") {
141+
if (typeof serverSpec.password === "undefined" && smAPI) {
142142
const scopes = [serverSpec.name, serverSpec.username || ""];
143+
144+
// Handle Server Manager extension version < 3.8.0
145+
const account = smAPI.getAccount ? smAPI.getAccount(serverSpec) : undefined;
143146
let session = await vscode.authentication.getSession(
144147
AUTHENTICATION_PROVIDER,
145148
scopes,
146-
{ silent: true },
149+
{ silent: true, account },
147150
);
148151
if (!session) {
149152
session = await vscode.authentication.getSession(
150153
AUTHENTICATION_PROVIDER,
151154
scopes,
152-
{ createIfNone: true },
155+
{ createIfNone: true, account },
153156
);
154157
}
155158
if (session) {

src/serverTests.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ async function runTestsHandler(request: vscode.TestRunRequest, cancellation: vsc
7575
}
7676

7777
export async function setupServerTestsController() {
78-
logger.info('setupServerTestsController invoked');
78+
logger.debug('setupServerTestsController invoked');
7979

8080
function showLoadingMessage() {
8181
loadedTestController.items.replace([loadedTestController.createTestItem('-', 'loading...')]);

src/test/runTest.ts

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
1-
import * as cp from 'child_process';
2-
import * as path from 'path';
1+
import * as cp from "child_process";
2+
import * as path from "path";
3+
34
import {
4-
downloadAndUnzipVSCode,
5-
resolveCliArgsFromVSCodeExecutablePath,
6-
runTests
7-
} from '@vscode/test-electron';
5+
downloadAndUnzipVSCode,
6+
resolveCliArgsFromVSCodeExecutablePath,
7+
runTests
8+
} from "@vscode/test-electron";
89

910
async function main() {
1011
try {
11-
const extensionDevelopmentPath = path.resolve(__dirname, '../../../');
12-
const extensionTestsPath = path.resolve(__dirname, './suite/index');
13-
const vscodeExecutablePath = await downloadAndUnzipVSCode();
14-
const [cliPath, ...args] = resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath);
12+
// The folder containing the Extension Manifest package.json
13+
// Passed to `--extensionDevelopmentPath`
14+
const extensionDevelopmentPath = path.resolve(__dirname, "../../");
15+
16+
// The path to the extension test script
17+
// Passed to --extensionTestsPath
18+
const extensionTestsPath = path.resolve(__dirname, "./suite/index");
19+
const vscodeExecutablePath = await downloadAndUnzipVSCode("stable");
20+
const [cli, ...args] = resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath);
1521

22+
// Install dependent extensions
1623
// Use cp.spawn / cp.exec for custom setup
1724
cp.spawnSync(
18-
cliPath,
25+
cli,
1926
[...args, '--install-extension', 'intersystems-community.servermanager', '--install-extension', 'intersystems-community.vscode-objectscript'],
2027
{
2128
encoding: 'utf-8',
22-
stdio: 'inherit'
29+
stdio: 'inherit',
30+
shell: process.platform === 'win32'
2331
}
2432
);
2533

@@ -30,8 +38,8 @@ async function main() {
3038
extensionDevelopmentPath,
3139
extensionTestsPath
3240
});
33-
} catch (err) {
34-
console.error('Failed to run tests');
41+
} catch (err) {
42+
console.error("Failed to run tests", err);
3543
process.exit(1);
3644
}
3745
}

0 commit comments

Comments
 (0)