Skip to content

Commit f00ebd2

Browse files
Allow opting out of cluster override and make it more visible in UI (#1171)
## Changes https://github.com/databricks/databricks-vscode/assets/88345179/2d2d4289-ebb3-4797-bffa-f01b209d8e4a ## Tests <!-- How is this tested? -->
1 parent b82c041 commit f00ebd2

26 files changed

+470
-193
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
working-directory: packages/databricks-vscode
7878

7979
- name: Integration Tests
80-
run: yarn run test:integ
80+
run: yarn run test:integ:prepare && yarn run test:integ:run
8181
working-directory: packages/databricks-vscode
8282

8383
- name: Integration Tests SDK wrappers

packages/databricks-vscode-types/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"test": "yarn run test:lint && yarn run test:unit"
2424
},
2525
"devDependencies": {
26-
"@types/vscode": "^1.85.0",
26+
"@types/vscode": "1.86.0",
2727
"eslint": "^8.55.0",
2828
"prettier": "^3.1.1",
2929
"typescript": "^5.3.3"

packages/databricks-vscode/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -841,17 +841,17 @@
841841
"@types/sinonjs__fake-timers": "^8.1.5",
842842
"@types/tmp": "^0.2.6",
843843
"@types/triple-beam": "^1.3.5",
844-
"@types/vscode": "^1.83.0",
844+
"@types/vscode": "1.86.0",
845845
"@types/yargs": "^17.0.32",
846846
"@typescript-eslint/eslint-plugin": "^6.14.0",
847847
"@typescript-eslint/parser": "^6.14.0",
848848
"@typescript-eslint/utils": "^6.14.0",
849849
"@vscode/test-electron": "^2.3.8",
850-
"@wdio/cli": "^8.32.3",
851-
"@wdio/local-runner": "^8.32.3",
852-
"@wdio/mocha-framework": "^8.32.3",
853-
"@wdio/spec-reporter": "^8.32.2",
854-
"@wdio/types": "^8.32.2",
850+
"@wdio/cli": "^8.35.1",
851+
"@wdio/local-runner": "^8.35.1",
852+
"@wdio/mocha-framework": "^8.35.0",
853+
"@wdio/spec-reporter": "^8.32.4",
854+
"@wdio/types": "^8.32.4",
855855
"chai": "^4.3.10",
856856
"esbuild": "^0.19.9",
857857
"eslint": "^8.55.0",

packages/databricks-vscode/src/bundle/BundleFileSet.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ describe(__filename, async function () {
9595
path.join(tmpdirUri.fsPath, "includes", "included.yaml")
9696
),
9797
].map((v) => v.fsPath);
98-
expect(actual).to.deep.equal(expected);
98+
expect(Array.from(new Set(actual).values())).to.deep.equal(
99+
Array.from(new Set(expected).values())
100+
);
99101
});
100102

101103
it("should return all bundle files", async () => {

packages/databricks-vscode/src/configuration/ConnectionCommands.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ import {saveNewProfile} from "./LoginWizard";
1616
import {PersonalAccessTokenAuthProvider} from "./auth/AuthProvider";
1717
import {normalizeHost} from "../utils/urlUtils";
1818
import {CliWrapper, ProcessError} from "../cli/CliWrapper";
19-
import {AUTH_TYPE_SWITCH_ID, AUTH_TYPE_LOGIN_ID} from "./ui/AuthTypeComponent";
19+
import {
20+
AUTH_TYPE_SWITCH_ID,
21+
AUTH_TYPE_LOGIN_ID,
22+
} from "../ui/configuration-view/AuthTypeComponent";
2023
import {ManualLoginSource} from "../telemetry/constants";
2124
import {onError} from "../utils/onErrorDecorator";
2225

packages/databricks-vscode/src/configuration/ConnectionManager.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,12 @@ export class ConnectionManager implements Disposable {
119119
)
120120
: undefined;
121121

122-
this.cli.setClusterId(clusterId);
122+
if (
123+
(await this.configModel.get("useClusterOverride")) ||
124+
clusterId === undefined
125+
) {
126+
this.cli.setClusterId(clusterId);
127+
}
123128
this.onDidChangeClusterEmitter.fire(this.cluster);
124129
} catch (e) {
125130
this.configModel.set("clusterId", undefined);
@@ -144,6 +149,17 @@ export class ConnectionManager implements Disposable {
144149
this.updateClusterManager,
145150
this
146151
),
152+
this.configModel.onDidChangeKey("useClusterOverride")(
153+
async () => {
154+
const useClusterOverride =
155+
await this.configModel.get("useClusterOverride");
156+
this.cli.setClusterId(
157+
useClusterOverride
158+
? this._clusterManager?.cluster?.id
159+
: undefined
160+
);
161+
}
162+
),
147163
// Don't just listen to target change for logging in. Also explictly listen for changes in the keys we care about.
148164
// We don't have to listen to changes in authProfile as it's set by the login method and we don't respect other
149165
// user changes.

packages/databricks-vscode/src/configuration/models/OverrideableConfigModel.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ import {existsSync} from "fs";
88
export type OverrideableConfigState = {
99
authProfile?: string;
1010
clusterId?: string;
11+
useClusterOverride?: boolean;
1112
};
1213

1314
export function isOverrideableConfigKey(
1415
key: string
1516
): key is keyof OverrideableConfigState {
16-
return ["authProfile", "clusterId"].includes(key);
17+
return ["authProfile", "clusterId", "useClusterOverride"].includes(key);
1718
}
1819

1920
async function safeRead(filePath: Uri) {

packages/databricks-vscode/src/extension.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {ConnectionManager} from "./configuration/ConnectionManager";
1414
import {ClusterListDataProvider} from "./cluster/ClusterListDataProvider";
1515
import {ClusterModel} from "./cluster/ClusterModel";
1616
import {ClusterCommands} from "./cluster/ClusterCommands";
17-
import {ConfigurationDataProvider} from "./configuration/ui/ConfigurationDataProvider";
17+
import {ConfigurationDataProvider} from "./ui/configuration-view/ConfigurationDataProvider";
1818
import {RunCommands} from "./run/RunCommands";
1919
import {DatabricksDebugAdapterFactory} from "./run/DatabricksDebugAdapter";
2020
import {DatabricksWorkflowDebugAdapterFactory} from "./run/DatabricksWorkflowDebugAdapter";
@@ -64,10 +64,11 @@ import {BundleCommands} from "./ui/bundle-resource-explorer/BundleCommands";
6464
import {BundleRunTerminalManager} from "./bundle/run/BundleRunTerminalManager";
6565
import {BundleRunStatusManager} from "./bundle/run/BundleRunStatusManager";
6666
import {BundleProjectManager} from "./bundle/BundleProjectManager";
67-
import {TreeItemDecorationProvider} from "./ui/bundle-resource-explorer/DecorationProvider";
67+
import {TreeItemDecorationProvider} from "./ui/DecorationProvider";
6868
import {BundleInitWizard} from "./bundle/BundleInitWizard";
6969
import {DatabricksDebugConfigurationProvider} from "./run/DatabricksDebugConfigurationProvider";
7070
import {isIntegrationTest} from "./utils/developmentUtils";
71+
import {ConfigurationTreeViewManager} from "./ui/configuration-view/ConfigurationTreeViewManager";
7172
import {getCLIDependenciesEnvVars} from "./utils/envVarGenerators";
7273

7374
// eslint-disable-next-line @typescript-eslint/no-var-requires
@@ -482,6 +483,14 @@ export async function activate(
482483
configModel,
483484
cli
484485
);
486+
const configurationView = window.createTreeView("configurationView", {
487+
treeDataProvider: configurationDataProvider,
488+
});
489+
490+
const configurationTreeViewManager = new ConfigurationTreeViewManager(
491+
configurationView,
492+
configModel
493+
);
485494

486495
const connectionCommands = new ConnectionCommands(
487496
workspaceFsCommands,
@@ -493,11 +502,8 @@ export async function activate(
493502

494503
context.subscriptions.push(
495504
configurationDataProvider,
496-
497-
window.registerTreeDataProvider(
498-
"configurationView",
499-
configurationDataProvider
500-
),
505+
configurationView,
506+
configurationTreeViewManager,
501507
telemetry.registerCommand(
502508
"databricks.connection.bundle.selectTarget",
503509
connectionCommands.selectTarget,

packages/databricks-vscode/src/test/e2e/utils.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ export async function findViewSection(name: ViewSectionType) {
4141
const views =
4242
(await (await control?.openView())?.getContent()?.getSections()) ?? [];
4343
for (const v of views) {
44-
if ((await v.getTitle()).toUpperCase() === name) {
44+
const title = await v.getTitle();
45+
if (title === null) {
46+
continue;
47+
}
48+
if (title.toUpperCase() === name) {
4549
return v;
4650
}
4751
}
@@ -50,17 +54,26 @@ export async function findViewSection(name: ViewSectionType) {
5054
export async function getViewSection(
5155
name: ViewSectionType
5256
): Promise<ViewSection | undefined> {
53-
const section = await findViewSection(name);
54-
assert(section);
57+
let section: ViewSection | undefined;
58+
await browser.waitUntil(
59+
async () => {
60+
section = await findViewSection(name);
61+
return section !== undefined;
62+
},
63+
{
64+
timeout: 10 * 1000,
65+
timeoutMsg: `Can't find view section "${name}"`,
66+
}
67+
);
5568

5669
for (const s of ViewSectionTypes) {
5770
if (s !== name) {
5871
await (await findViewSection(s))?.collapse();
5972
}
6073
}
6174

62-
await section.expand();
63-
await (await section.elem).click();
75+
await section!.expand();
76+
await (await section!.elem).click();
6477
return section;
6578
}
6679

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import {
77
EventEmitter,
88
Disposable,
99
} from "vscode";
10-
import {BundleResourceExplorerTreeDataProvider} from "./BundleResourceExplorerTreeDataProvider";
11-
import {ConfigurationDataProvider} from "../../configuration/ui/ConfigurationDataProvider";
10+
import {BundleResourceExplorerTreeDataProvider} from "./bundle-resource-explorer/BundleResourceExplorerTreeDataProvider";
11+
import {ConfigurationDataProvider} from "./configuration-view/ConfigurationDataProvider";
1212

1313
const SCHEME = "databricks-view-item";
1414
export class TreeItemDecorationProvider implements FileDecorationProvider {

0 commit comments

Comments
 (0)