@theia/dev-container 1.72.0-next.59 → 1.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/electron-browser/container-connection-contribution.d.ts +5 -2
- package/lib/electron-browser/container-connection-contribution.d.ts.map +1 -1
- package/lib/electron-browser/container-connection-contribution.js +130 -30
- package/lib/electron-browser/container-connection-contribution.js.map +1 -1
- package/lib/electron-browser/container-output-provider.d.ts.map +1 -1
- package/lib/electron-browser/container-output-provider.js +3 -1
- package/lib/electron-browser/container-output-provider.js.map +1 -1
- package/lib/electron-browser/dev-container-frontend-module.d.ts.map +1 -1
- package/lib/electron-browser/dev-container-frontend-module.js +5 -0
- package/lib/electron-browser/dev-container-frontend-module.js.map +1 -1
- package/lib/electron-browser/dev-container-startup-contribution.d.ts +15 -0
- package/lib/electron-browser/dev-container-startup-contribution.d.ts.map +1 -0
- package/lib/electron-browser/dev-container-startup-contribution.js +94 -0
- package/lib/electron-browser/dev-container-startup-contribution.js.map +1 -0
- package/lib/electron-common/dev-container-preferences.d.ts +12 -0
- package/lib/electron-common/dev-container-preferences.d.ts.map +1 -0
- package/lib/electron-common/dev-container-preferences.js +44 -0
- package/lib/electron-common/dev-container-preferences.js.map +1 -0
- package/lib/electron-common/remote-container-connection-provider.d.ts +20 -1
- package/lib/electron-common/remote-container-connection-provider.d.ts.map +1 -1
- package/lib/electron-node/dev-container-backend-module.d.ts.map +1 -1
- package/lib/electron-node/dev-container-backend-module.js +4 -0
- package/lib/electron-node/dev-container-backend-module.js.map +1 -1
- package/lib/electron-node/dev-container-cli-contribution.d.ts +19 -0
- package/lib/electron-node/dev-container-cli-contribution.d.ts.map +1 -0
- package/lib/electron-node/dev-container-cli-contribution.js +66 -0
- package/lib/electron-node/dev-container-cli-contribution.js.map +1 -0
- package/lib/electron-node/dev-container-cli-contribution.spec.d.ts +2 -0
- package/lib/electron-node/dev-container-cli-contribution.spec.d.ts.map +1 -0
- package/lib/electron-node/dev-container-cli-contribution.spec.js +91 -0
- package/lib/electron-node/dev-container-cli-contribution.spec.js.map +1 -0
- package/lib/electron-node/dev-container-file-service.d.ts +4 -4
- package/lib/electron-node/dev-container-file-service.d.ts.map +1 -1
- package/lib/electron-node/dev-container-file-service.js +9 -9
- package/lib/electron-node/dev-container-file-service.js.map +1 -1
- package/lib/electron-node/devcontainer-contributions/main-container-creation-contributions.d.ts +6 -2
- package/lib/electron-node/devcontainer-contributions/main-container-creation-contributions.d.ts.map +1 -1
- package/lib/electron-node/devcontainer-contributions/main-container-creation-contributions.js +24 -4
- package/lib/electron-node/devcontainer-contributions/main-container-creation-contributions.js.map +1 -1
- package/lib/electron-node/devcontainer-contributions/variable-resolver-contribution.d.ts +7 -6
- package/lib/electron-node/devcontainer-contributions/variable-resolver-contribution.d.ts.map +1 -1
- package/lib/electron-node/devcontainer-contributions/variable-resolver-contribution.js +4 -9
- package/lib/electron-node/devcontainer-contributions/variable-resolver-contribution.js.map +1 -1
- package/lib/electron-node/devcontainer-util.d.ts +19 -0
- package/lib/electron-node/devcontainer-util.d.ts.map +1 -0
- package/lib/electron-node/devcontainer-util.js +48 -0
- package/lib/electron-node/devcontainer-util.js.map +1 -0
- package/lib/electron-node/devcontainer-util.spec.d.ts +2 -0
- package/lib/electron-node/devcontainer-util.spec.d.ts.map +1 -0
- package/lib/electron-node/devcontainer-util.spec.js +128 -0
- package/lib/electron-node/devcontainer-util.spec.js.map +1 -0
- package/lib/electron-node/docker-container-service.d.ts +3 -3
- package/lib/electron-node/docker-container-service.d.ts.map +1 -1
- package/lib/electron-node/docker-container-service.js +3 -4
- package/lib/electron-node/docker-container-service.js.map +1 -1
- package/lib/electron-node/remote-container-connection-provider.d.ts +27 -66
- package/lib/electron-node/remote-container-connection-provider.d.ts.map +1 -1
- package/lib/electron-node/remote-container-connection-provider.js +269 -311
- package/lib/electron-node/remote-container-connection-provider.js.map +1 -1
- package/lib/electron-node/remote-docker-container-connection.d.ts +50 -0
- package/lib/electron-node/remote-docker-container-connection.d.ts.map +1 -0
- package/lib/electron-node/remote-docker-container-connection.js +239 -0
- package/lib/electron-node/remote-docker-container-connection.js.map +1 -0
- package/lib/electron-node/remote-docker-container-connection.spec.d.ts +2 -0
- package/lib/electron-node/remote-docker-container-connection.spec.d.ts.map +1 -0
- package/lib/electron-node/remote-docker-container-connection.spec.js +217 -0
- package/lib/electron-node/remote-docker-container-connection.spec.js.map +1 -0
- package/package.json +7 -7
- package/src/electron-browser/container-connection-contribution.ts +155 -38
- package/src/electron-browser/container-output-provider.ts +3 -1
- package/src/electron-browser/dev-container-frontend-module.ts +6 -0
- package/src/electron-browser/dev-container-startup-contribution.ts +99 -0
- package/src/electron-common/dev-container-preferences.ts +53 -0
- package/src/electron-common/remote-container-connection-provider.ts +23 -1
- package/src/electron-node/dev-container-backend-module.ts +5 -0
- package/src/electron-node/dev-container-cli-contribution.spec.ts +106 -0
- package/src/electron-node/dev-container-cli-contribution.ts +68 -0
- package/src/electron-node/dev-container-file-service.ts +10 -10
- package/src/electron-node/devcontainer-contributions/main-container-creation-contributions.ts +29 -5
- package/src/electron-node/devcontainer-contributions/variable-resolver-contribution.ts +11 -11
- package/src/electron-node/devcontainer-util.spec.ts +154 -0
- package/src/electron-node/devcontainer-util.ts +49 -0
- package/src/electron-node/docker-container-service.ts +6 -7
- package/src/electron-node/remote-container-connection-provider.ts +274 -366
- package/src/electron-node/{remote-container-connection-provider.spec.ts → remote-docker-container-connection.spec.ts} +105 -4
- package/src/electron-node/remote-docker-container-connection.ts +290 -0
- package/lib/electron-node/remote-container-connection-provider.spec.d.ts +0 -2
- package/lib/electron-node/remote-container-connection-provider.spec.d.ts.map +0 -1
- package/lib/electron-node/remote-container-connection-provider.spec.js +0 -131
- package/lib/electron-node/remote-container-connection-provider.spec.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variable-resolver-contribution.js","sourceRoot":"","sources":["../../../src/electron-node/devcontainer-contributions/variable-resolver-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;
|
|
1
|
+
{"version":3,"file":"variable-resolver-contribution.js","sourceRoot":"","sources":["../../../src/electron-node/devcontainer-contributions/variable-resolver-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAchF,sFAGC;;AAfD,4DAAsE;AAMzD,QAAA,4BAA4B,GAAG,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAMnF,SAAgB,qCAAqC,CAAC,IAAqB;IACvE,IAAI,CAAC,oCAA4B,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACnF,IAAI,CAAC,oCAA4B,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAClF,CAAC;AAGM,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACjC,UAAU,CAAC,IAAY;QACnB,OAAO,IAAI,KAAK,UAAU,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,QAAgB;QACpB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;CACJ,CAAA;AARY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,sBAAU,GAAE;GACA,wBAAwB,CAQpC;AAGM,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC5B,UAAU,CAAC,IAAY,EAAE,OAAyB;QAC9C,OAAO,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC;IAC/D,CAAC;IACD,OAAO,CAAC,SAAiB,EAAE,OAAyB;QAChD,OAAO,OAAO,EAAE,WAAW,IAAI,SAAS,CAAC;IAC7C,CAAC;CACJ,CAAA;AAPY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,sBAAU,GAAE;GACA,mBAAmB,CAO/B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ContainerInspectInfo } from 'dockerode';
|
|
2
|
+
export type MountInfo = ContainerInspectInfo['Mounts'][number];
|
|
3
|
+
/**
|
|
4
|
+
* Returns true for bind mounts that are not injected by HostConfigSharingContribution
|
|
5
|
+
* (SSH dir, gitconfig). Shared by {@link inferWorkspacePath} and
|
|
6
|
+
* {@link getWorkspaceMounts} to keep the filtering logic in one place.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isWorkspaceMount(mount: MountInfo): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Returns all bind mounts that look like workspace mounts (filtering out
|
|
11
|
+
* injected SSH/gitconfig mounts).
|
|
12
|
+
*/
|
|
13
|
+
export declare function getWorkspaceMounts(mounts: MountInfo[]): MountInfo[];
|
|
14
|
+
/**
|
|
15
|
+
* Infers a workspace path from container inspect info.
|
|
16
|
+
* Takes the first workspace-relevant bind mount, falls back to WorkingDir, then `/`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function inferWorkspacePath(containerInfo: ContainerInspectInfo): string;
|
|
19
|
+
//# sourceMappingURL=devcontainer-util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devcontainer-util.d.ts","sourceRoot":"","sources":["../../src/electron-node/devcontainer-util.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAM1D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAEnE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,oBAAoB,GAAG,MAAM,CAG9E"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 EclipseSource GmbH and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.isWorkspaceMount = isWorkspaceMount;
|
|
19
|
+
exports.getWorkspaceMounts = getWorkspaceMounts;
|
|
20
|
+
exports.inferWorkspacePath = inferWorkspacePath;
|
|
21
|
+
/**
|
|
22
|
+
* Returns true for bind mounts that are not injected by HostConfigSharingContribution
|
|
23
|
+
* (SSH dir, gitconfig). Shared by {@link inferWorkspacePath} and
|
|
24
|
+
* {@link getWorkspaceMounts} to keep the filtering logic in one place.
|
|
25
|
+
*/
|
|
26
|
+
function isWorkspaceMount(mount) {
|
|
27
|
+
return mount.Type === 'bind'
|
|
28
|
+
&& !!mount.Destination
|
|
29
|
+
&& !mount.Destination.endsWith('/.ssh')
|
|
30
|
+
&& !mount.Destination.endsWith('/.gitconfig')
|
|
31
|
+
&& mount.Destination !== '/tmp/host_gitconfig';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns all bind mounts that look like workspace mounts (filtering out
|
|
35
|
+
* injected SSH/gitconfig mounts).
|
|
36
|
+
*/
|
|
37
|
+
function getWorkspaceMounts(mounts) {
|
|
38
|
+
return mounts.filter(isWorkspaceMount);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Infers a workspace path from container inspect info.
|
|
42
|
+
* Takes the first workspace-relevant bind mount, falls back to WorkingDir, then `/`.
|
|
43
|
+
*/
|
|
44
|
+
function inferWorkspacePath(containerInfo) {
|
|
45
|
+
const workspaceMount = containerInfo.Mounts.find(isWorkspaceMount);
|
|
46
|
+
return (workspaceMount?.Destination ?? containerInfo.Config.WorkingDir) || '/';
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=devcontainer-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devcontainer-util.js","sourceRoot":"","sources":["../../src/electron-node/devcontainer-util.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oDAAoD;AACpD,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAWhF,4CAMC;AAMD,gDAEC;AAMD,gDAGC;AA5BD;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,KAAgB;IAC7C,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM;WACrB,CAAC,CAAC,KAAK,CAAC,WAAW;WACnB,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;WACpC,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;WAC1C,KAAK,CAAC,WAAW,KAAK,qBAAqB,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,MAAmB;IAClD,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,aAAmC;IAClE,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACnE,OAAO,CAAC,cAAc,EAAE,WAAW,IAAI,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devcontainer-util.spec.d.ts","sourceRoot":"","sources":["../../src/electron-node/devcontainer-util.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 EclipseSource GmbH and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const chai_1 = require("chai");
|
|
19
|
+
const devcontainer_util_1 = require("./devcontainer-util");
|
|
20
|
+
function createContainerInfo(mounts, workingDir) {
|
|
21
|
+
return {
|
|
22
|
+
Mounts: mounts.map(m => ({ ...m, Type: m.Type ?? 'bind' })),
|
|
23
|
+
Config: { WorkingDir: workingDir ?? '' }
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
describe('inferWorkspacePath', () => {
|
|
27
|
+
it('should return workspace mount destination', () => {
|
|
28
|
+
const info = createContainerInfo([{ Destination: '/workspaces/project' }]);
|
|
29
|
+
(0, chai_1.expect)((0, devcontainer_util_1.inferWorkspacePath)(info)).to.equal('/workspaces/project');
|
|
30
|
+
});
|
|
31
|
+
it('should skip .ssh mount', () => {
|
|
32
|
+
const info = createContainerInfo([
|
|
33
|
+
{ Destination: '/root/.ssh' },
|
|
34
|
+
{ Destination: '/workspaces/project' }
|
|
35
|
+
]);
|
|
36
|
+
(0, chai_1.expect)((0, devcontainer_util_1.inferWorkspacePath)(info)).to.equal('/workspaces/project');
|
|
37
|
+
});
|
|
38
|
+
it('should skip .gitconfig mount', () => {
|
|
39
|
+
const info = createContainerInfo([
|
|
40
|
+
{ Destination: '/home/user/.gitconfig' },
|
|
41
|
+
{ Destination: '/workspaces/project' }
|
|
42
|
+
]);
|
|
43
|
+
(0, chai_1.expect)((0, devcontainer_util_1.inferWorkspacePath)(info)).to.equal('/workspaces/project');
|
|
44
|
+
});
|
|
45
|
+
it('should skip /tmp/host_gitconfig mount', () => {
|
|
46
|
+
const info = createContainerInfo([
|
|
47
|
+
{ Destination: '/tmp/host_gitconfig' },
|
|
48
|
+
{ Destination: '/workspaces/project' }
|
|
49
|
+
]);
|
|
50
|
+
(0, chai_1.expect)((0, devcontainer_util_1.inferWorkspacePath)(info)).to.equal('/workspaces/project');
|
|
51
|
+
});
|
|
52
|
+
it('should skip all injected mounts and find workspace', () => {
|
|
53
|
+
const info = createContainerInfo([
|
|
54
|
+
{ Destination: '/root/.ssh' },
|
|
55
|
+
{ Destination: '/tmp/host_gitconfig' },
|
|
56
|
+
{ Destination: '/workspace' }
|
|
57
|
+
]);
|
|
58
|
+
(0, chai_1.expect)((0, devcontainer_util_1.inferWorkspacePath)(info)).to.equal('/workspace');
|
|
59
|
+
});
|
|
60
|
+
it('should fall back to WorkingDir when no suitable mounts', () => {
|
|
61
|
+
const info = createContainerInfo([{ Destination: '/root/.ssh' }], '/app');
|
|
62
|
+
(0, chai_1.expect)((0, devcontainer_util_1.inferWorkspacePath)(info)).to.equal('/app');
|
|
63
|
+
});
|
|
64
|
+
it('should fall back to / when no mounts and no WorkingDir', () => {
|
|
65
|
+
const info = createContainerInfo([], '');
|
|
66
|
+
(0, chai_1.expect)((0, devcontainer_util_1.inferWorkspacePath)(info)).to.equal('/');
|
|
67
|
+
});
|
|
68
|
+
it('should fall back to / when mounts is empty', () => {
|
|
69
|
+
const info = createContainerInfo([]);
|
|
70
|
+
(0, chai_1.expect)((0, devcontainer_util_1.inferWorkspacePath)(info)).to.equal('/');
|
|
71
|
+
});
|
|
72
|
+
it('should skip non-bind mounts', () => {
|
|
73
|
+
const info = createContainerInfo([
|
|
74
|
+
{ Destination: '/data', Type: 'volume' },
|
|
75
|
+
{ Destination: '/workspaces/project' }
|
|
76
|
+
]);
|
|
77
|
+
(0, chai_1.expect)((0, devcontainer_util_1.inferWorkspacePath)(info)).to.equal('/workspaces/project');
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe('isWorkspaceMount', () => {
|
|
81
|
+
function mount(destination, type = 'bind') {
|
|
82
|
+
return { Destination: destination, Type: type };
|
|
83
|
+
}
|
|
84
|
+
it('should accept a normal bind mount', () => {
|
|
85
|
+
(0, chai_1.expect)((0, devcontainer_util_1.isWorkspaceMount)(mount('/workspaces/project'))).to.be.true;
|
|
86
|
+
});
|
|
87
|
+
it('should reject .ssh mounts', () => {
|
|
88
|
+
(0, chai_1.expect)((0, devcontainer_util_1.isWorkspaceMount)(mount('/root/.ssh'))).to.be.false;
|
|
89
|
+
});
|
|
90
|
+
it('should reject .gitconfig mounts', () => {
|
|
91
|
+
(0, chai_1.expect)((0, devcontainer_util_1.isWorkspaceMount)(mount('/home/user/.gitconfig'))).to.be.false;
|
|
92
|
+
});
|
|
93
|
+
it('should reject /tmp/host_gitconfig', () => {
|
|
94
|
+
(0, chai_1.expect)((0, devcontainer_util_1.isWorkspaceMount)(mount('/tmp/host_gitconfig'))).to.be.false;
|
|
95
|
+
});
|
|
96
|
+
it('should reject volume mounts', () => {
|
|
97
|
+
(0, chai_1.expect)((0, devcontainer_util_1.isWorkspaceMount)(mount('/workspaces/project', 'volume'))).to.be.false;
|
|
98
|
+
});
|
|
99
|
+
it('should reject tmpfs mounts', () => {
|
|
100
|
+
(0, chai_1.expect)((0, devcontainer_util_1.isWorkspaceMount)(mount('/workspaces/project', 'tmpfs'))).to.be.false;
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe('getWorkspaceMounts', () => {
|
|
104
|
+
function mount(destination, type = 'bind') {
|
|
105
|
+
return { Destination: destination, Type: type };
|
|
106
|
+
}
|
|
107
|
+
it('should filter out injected mounts and return workspace mounts', () => {
|
|
108
|
+
const mounts = [
|
|
109
|
+
mount('/root/.ssh'),
|
|
110
|
+
mount('/workspaces/project'),
|
|
111
|
+
mount('/tmp/host_gitconfig'),
|
|
112
|
+
mount('/app'),
|
|
113
|
+
];
|
|
114
|
+
const result = (0, devcontainer_util_1.getWorkspaceMounts)(mounts);
|
|
115
|
+
(0, chai_1.expect)(result.map(m => m.Destination)).to.deep.equal(['/workspaces/project', '/app']);
|
|
116
|
+
});
|
|
117
|
+
it('should return empty array when all mounts are injected', () => {
|
|
118
|
+
const mounts = [
|
|
119
|
+
mount('/root/.ssh'),
|
|
120
|
+
mount('/home/user/.gitconfig'),
|
|
121
|
+
];
|
|
122
|
+
(0, chai_1.expect)((0, devcontainer_util_1.getWorkspaceMounts)(mounts)).to.deep.equal([]);
|
|
123
|
+
});
|
|
124
|
+
it('should return empty array for empty input', () => {
|
|
125
|
+
(0, chai_1.expect)((0, devcontainer_util_1.getWorkspaceMounts)([])).to.deep.equal([]);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
//# sourceMappingURL=devcontainer-util.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devcontainer-util.spec.js","sourceRoot":"","sources":["../../src/electron-node/devcontainer-util.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ContributionProvider, MaybePromise, URI } from '@theia/core';
|
|
2
|
+
import { VariableContext } from './devcontainer-contributions/variable-resolver-contribution';
|
|
2
3
|
import { WorkspaceServer } from '@theia/workspace/lib/common';
|
|
3
4
|
import * as Docker from 'dockerode';
|
|
4
5
|
import { ContainerConnectionOptions } from '../electron-common/remote-container-connection-provider';
|
|
5
6
|
import { DevContainerConfiguration } from './devcontainer-file';
|
|
6
7
|
import { DevContainerFileService } from './dev-container-file-service';
|
|
7
8
|
import { ContainerOutputProvider } from '../electron-common/container-output-provider';
|
|
8
|
-
import { RemoteDockerContainerConnection } from './remote-container-connection
|
|
9
|
+
import { RemoteDockerContainerConnection } from './remote-docker-container-connection';
|
|
9
10
|
import { DockerComposeService } from './docker-compose/compose-service';
|
|
10
11
|
export declare const ContainerCreationContribution: unique symbol;
|
|
11
12
|
export interface ContainerCreationContribution {
|
|
@@ -24,9 +25,8 @@ export declare class DockerContainerService {
|
|
|
24
25
|
protected readonly containerCreationContributions: ContributionProvider<ContainerCreationContribution>;
|
|
25
26
|
protected readonly devContainerFileService: DevContainerFileService;
|
|
26
27
|
protected readonly dockerComposeService: DockerComposeService;
|
|
27
|
-
container: Docker.Container | undefined;
|
|
28
28
|
getOrCreateContainer(docker: Docker, options: ContainerConnectionOptions, outputProvider?: ContainerOutputProvider): Promise<Docker.Container>;
|
|
29
|
-
postConnect(devcontainerFile: string, connection: RemoteDockerContainerConnection, outputProvider?: ContainerOutputProvider): Promise<void>;
|
|
29
|
+
postConnect(devcontainerFile: string, connection: RemoteDockerContainerConnection, outputProvider?: ContainerOutputProvider, context?: VariableContext): Promise<void>;
|
|
30
30
|
protected buildContainer(docker: Docker, devcontainerFile: string, workspace: URI, outputProvider?: ContainerOutputProvider): Promise<Docker.Container>;
|
|
31
31
|
}
|
|
32
32
|
//# sourceMappingURL=docker-container-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-container-service.d.ts","sourceRoot":"","sources":["../../src/electron-node/docker-container-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"docker-container-service.d.ts","sourceRoot":"","sources":["../../src/electron-node/docker-container-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAE9F,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,yDAAyD,CAAC;AACrG,OAAO,EAAE,yBAAyB,EAA2B,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,eAAO,MAAM,6BAA6B,eAA2C,CAAC;AAEtF,MAAM,WAAW,6BAA6B;IAC1C,uBAAuB,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,sBAAsB,EACjE,eAAe,EAAE,yBAAyB,EAC1C,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,uBAAuB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElE;;OAEG;IACH,gBAAgB,CAAC,CAAC,eAAe,EAAE,yBAAyB,EACxD,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,uBAAuB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElE;;OAEG;IACH,iBAAiB,CAAC,CAAC,eAAe,EAAE,yBAAyB,EAAE,UAAU,EAAE,+BAA+B,EACtG,cAAc,CAAC,EAAE,uBAAuB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,qBACa,sBAAsB;IAG/B,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAGpD,SAAS,CAAC,QAAQ,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,6BAA6B,CAAC,CAAC;IAGvG,SAAS,CAAC,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IAGpE,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAExD,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE,cAAc,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;IAwB9I,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,+BAA+B,EAAE,cAAc,CAAC,EAAE,uBAAuB,EAC7H,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;cAS7B,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;CAuDhK"}
|
|
@@ -28,7 +28,7 @@ let DockerContainerService = class DockerContainerService {
|
|
|
28
28
|
async getOrCreateContainer(docker, options, outputProvider) {
|
|
29
29
|
let container;
|
|
30
30
|
const workspace = new core_1.URI(options.workspacePath ?? await this.workspaceServer.getMostRecentlyUsedWorkspace());
|
|
31
|
-
if (options.lastContainerInfo && fs.statSync(options.devcontainerFile).mtimeMs < options.lastContainerInfo.lastUsed) {
|
|
31
|
+
if (options.lastContainerInfo && fs.pathExistsSync(options.devcontainerFile) && fs.statSync(options.devcontainerFile).mtimeMs < options.lastContainerInfo.lastUsed) {
|
|
32
32
|
try {
|
|
33
33
|
container = docker.getContainer(options.lastContainerInfo.id);
|
|
34
34
|
if ((await container.inspect()).State.Running) {
|
|
@@ -46,11 +46,10 @@ let DockerContainerService = class DockerContainerService {
|
|
|
46
46
|
if (!container) {
|
|
47
47
|
container = await this.buildContainer(docker, options.devcontainerFile, workspace, outputProvider);
|
|
48
48
|
}
|
|
49
|
-
this.container = container;
|
|
50
49
|
return container;
|
|
51
50
|
}
|
|
52
|
-
async postConnect(devcontainerFile, connection, outputProvider) {
|
|
53
|
-
const devcontainerConfig = await this.devContainerFileService.getConfiguration(devcontainerFile);
|
|
51
|
+
async postConnect(devcontainerFile, connection, outputProvider, context) {
|
|
52
|
+
const devcontainerConfig = await this.devContainerFileService.getConfiguration(devcontainerFile, context);
|
|
54
53
|
for (const containerCreateContrib of this.containerCreationContributions.getContributions()) {
|
|
55
54
|
await containerCreateContrib.handlePostConnect?.(devcontainerConfig, connection, outputProvider);
|
|
56
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-container-service.js","sourceRoot":"","sources":["../../src/electron-node/docker-container-service.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,sCAAsE;
|
|
1
|
+
{"version":3,"file":"docker-container-service.js","sourceRoot":"","sources":["../../src/electron-node/docker-container-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,88 +1,49 @@
|
|
|
1
|
-
import { ContainerConnectionOptions, ContainerConnectionResult, DevContainerFile, RemoteContainerConnectionProvider, RunningContainerInfo } from '../electron-common/remote-container-connection-provider';
|
|
2
|
-
import { RemoteConnection, RemoteExecOptions, RemoteExecResult, RemoteExecTester } from '@theia/remote/lib/electron-node/remote-types';
|
|
3
|
-
import { RemoteSetupResult, RemoteSetupService } from '@theia/remote/lib/electron-node/setup/remote-setup-service';
|
|
1
|
+
import { AttachContainerArgs, AttachContainerOptions, ContainerConnectionOptions, ContainerConnectionResult, DevContainerFile, RemoteContainerConnectionProvider, RunningContainerInfo, WorkspaceCandidate } from '../electron-common/remote-container-connection-provider';
|
|
4
2
|
import { RemoteConnectionService } from '@theia/remote/lib/electron-node/remote-connection-service';
|
|
3
|
+
import { RemoteSetupService } from '@theia/remote/lib/electron-node/setup/remote-setup-service';
|
|
5
4
|
import { RemoteProxyServerProvider } from '@theia/remote/lib/electron-node/remote-proxy-server-provider';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { RemoteStatusReport } from '@theia/remote/lib/electron-node/remote-types';
|
|
6
|
+
import { RpcServer, ILogger, MessageService } from '@theia/core';
|
|
8
7
|
import * as Docker from 'dockerode';
|
|
9
|
-
import { DockerContainerService } from './docker-container-service';
|
|
10
|
-
import { WriteStream } from 'tty';
|
|
11
8
|
import { DevContainerFileService } from './dev-container-file-service';
|
|
9
|
+
import { DockerContainerService } from './docker-container-service';
|
|
12
10
|
import { ContainerOutputProvider } from '../electron-common/container-output-provider';
|
|
11
|
+
import { DevContainerCliContribution } from './dev-container-cli-contribution';
|
|
12
|
+
import { RemoteDockerContainerConnection } from './remote-docker-container-connection';
|
|
13
|
+
export { RemoteDockerContainerConnection, RemoteContainerConnectionOptions } from './remote-docker-container-connection';
|
|
13
14
|
import { DevContainerConfiguration } from './devcontainer-file';
|
|
14
15
|
export declare class DevContainerConnectionProvider implements RemoteContainerConnectionProvider, RpcServer<ContainerOutputProvider> {
|
|
15
16
|
protected readonly remoteConnectionService: RemoteConnectionService;
|
|
16
17
|
protected readonly remoteSetup: RemoteSetupService;
|
|
17
|
-
protected readonly messageService: MessageService;
|
|
18
18
|
protected readonly serverProvider: RemoteProxyServerProvider;
|
|
19
19
|
protected readonly containerService: DockerContainerService;
|
|
20
20
|
protected readonly devContainerFileService: DevContainerFileService;
|
|
21
|
-
protected readonly
|
|
21
|
+
protected readonly cliContribution: DevContainerCliContribution;
|
|
22
22
|
protected readonly logger: ILogger;
|
|
23
|
+
protected readonly messageService: MessageService;
|
|
23
24
|
protected outputProvider: ContainerOutputProvider | undefined;
|
|
24
25
|
setClient(client: ContainerOutputProvider): void;
|
|
26
|
+
createDockerConnection(): Promise<Docker>;
|
|
27
|
+
listRunningContainers(docker?: Docker): Promise<RunningContainerInfo[]>;
|
|
28
|
+
getWorkspaceCandidates(containerId: string, docker?: Docker): Promise<WorkspaceCandidate[]>;
|
|
29
|
+
scanForDevContainerConfig(containerId: string, workspacePath: string, docker?: Docker): Promise<string | undefined>;
|
|
25
30
|
connectToContainer(options: ContainerConnectionOptions): Promise<ContainerConnectionResult>;
|
|
26
31
|
getDevContainerFiles(workspacePath: string): Promise<DevContainerFile[]>;
|
|
27
|
-
|
|
32
|
+
getAttachContainerArgs(): Promise<AttachContainerArgs | undefined>;
|
|
33
|
+
attachToContainer(options: AttachContainerOptions): Promise<ContainerConnectionResult>;
|
|
28
34
|
getCurrentContainerInfo(port: number): Promise<Docker.ContainerInspectInfo | undefined>;
|
|
29
|
-
listRunningContainers(): Promise<RunningContainerInfo[]>;
|
|
30
|
-
attachToContainer(containerId: string): Promise<ContainerConnectionResult>;
|
|
31
|
-
protected inferWorkspacePath(containerInfo: Docker.ContainerInspectInfo): string;
|
|
32
35
|
removeContainer(containerId: string): Promise<void>;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
container: Docker.Container
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
interface ContainerTerminalSession {
|
|
45
|
-
execution: Docker.Exec;
|
|
46
|
-
stdout: WriteStream;
|
|
47
|
-
stderr: WriteStream;
|
|
48
|
-
executeCommand(cmd: string, args?: string[]): Promise<{
|
|
49
|
-
stdout: string;
|
|
50
|
-
stderr: string;
|
|
51
|
-
}>;
|
|
52
|
-
}
|
|
53
|
-
interface ContainerTerminalSession {
|
|
54
|
-
execution: Docker.Exec;
|
|
55
|
-
stdout: WriteStream;
|
|
56
|
-
stderr: WriteStream;
|
|
57
|
-
executeCommand(cmd: string, args?: string[]): Promise<{
|
|
58
|
-
stdout: string;
|
|
59
|
-
stderr: string;
|
|
36
|
+
protected doRemoveContainer(containerId: string, docker?: Docker): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Creates a remote connection, runs setup (injecting the Theia backend into the container),
|
|
39
|
+
* registers the connection, and starts a local proxy server.
|
|
40
|
+
*
|
|
41
|
+
* @returns the local proxy port and the remote connection
|
|
42
|
+
*/
|
|
43
|
+
protected setupRemoteConnection(container: Docker.Container, docker: Docker, config: DevContainerConfiguration, nodeDownloadTemplate: string | undefined, report: RemoteStatusReport): Promise<{
|
|
44
|
+
localPort: number;
|
|
45
|
+
remote: RemoteDockerContainerConnection;
|
|
60
46
|
}>;
|
|
47
|
+
dispose(): void;
|
|
61
48
|
}
|
|
62
|
-
export declare class RemoteDockerContainerConnection implements RemoteConnection {
|
|
63
|
-
id: string;
|
|
64
|
-
name: string;
|
|
65
|
-
type: string;
|
|
66
|
-
localPort: number;
|
|
67
|
-
remotePort: number;
|
|
68
|
-
docker: Docker;
|
|
69
|
-
container: Docker.Container;
|
|
70
|
-
remoteSetupResult: RemoteSetupResult;
|
|
71
|
-
protected readonly logger: ILogger;
|
|
72
|
-
protected config: DevContainerConfiguration;
|
|
73
|
-
protected activeTerminalSession: ContainerTerminalSession | undefined;
|
|
74
|
-
protected readonly onDidDisconnectEmitter: Emitter<void>;
|
|
75
|
-
onDidDisconnect: Event<void>;
|
|
76
|
-
constructor(options: RemoteContainerConnectionOptions);
|
|
77
|
-
protected getRemoteEnv(): string[] | undefined;
|
|
78
|
-
forwardOut(socket: Socket, port?: number): Promise<void>;
|
|
79
|
-
exec(cmd: string, args?: string[], options?: RemoteExecOptions): Promise<RemoteExecResult>;
|
|
80
|
-
execPartial(cmd: string, tester: RemoteExecTester, args?: string[], options?: RemoteExecOptions): Promise<RemoteExecResult>;
|
|
81
|
-
getDockerHost(): string;
|
|
82
|
-
copy(localPath: string | Buffer | NodeJS.ReadableStream, remotePath: string): Promise<void>;
|
|
83
|
-
disposeSync(): void;
|
|
84
|
-
dispose(): Promise<void>;
|
|
85
|
-
protected shutdownContainer(sync: boolean): Promise<unknown>;
|
|
86
|
-
}
|
|
87
|
-
export {};
|
|
88
49
|
//# sourceMappingURL=remote-container-connection-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-container-connection-provider.d.ts","sourceRoot":"","sources":["../../src/electron-node/remote-container-connection-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remote-container-connection-provider.d.ts","sourceRoot":"","sources":["../../src/electron-node/remote-container-connection-provider.ts"],"names":[],"mappings":"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"}
|