@theia/dev-container 1.56.0 → 1.57.0-next.112
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/README.md +4 -3
- package/lib/electron-browser/container-connection-contribution.d.ts +11 -5
- package/lib/electron-browser/container-connection-contribution.d.ts.map +1 -1
- package/lib/electron-browser/container-connection-contribution.js +46 -5
- package/lib/electron-browser/container-connection-contribution.js.map +1 -1
- package/lib/electron-browser/container-info-contribution.d.ts +12 -3
- package/lib/electron-browser/container-info-contribution.d.ts.map +1 -1
- package/lib/electron-browser/container-info-contribution.js +38 -3
- package/lib/electron-browser/container-info-contribution.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-common/dev-container-workspaces.d.ts +3 -0
- package/lib/electron-common/dev-container-workspaces.d.ts.map +1 -0
- package/lib/electron-common/dev-container-workspaces.js +21 -0
- package/lib/electron-common/dev-container-workspaces.js.map +1 -0
- package/lib/electron-common/remote-container-connection-provider.d.ts +2 -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-file-service.d.ts +1 -1
- package/lib/electron-node/dev-container-file-service.d.ts.map +1 -1
- package/lib/electron-node/dev-container-file-service.js +2 -6
- package/lib/electron-node/dev-container-file-service.js.map +1 -1
- package/lib/electron-node/dev-container-workspace-handler.d.ts +7 -0
- package/lib/electron-node/dev-container-workspace-handler.d.ts.map +1 -0
- package/lib/electron-node/dev-container-workspace-handler.js +21 -0
- package/lib/electron-node/dev-container-workspace-handler.js.map +1 -0
- package/lib/electron-node/devcontainer-contributions/main-container-creation-contributions.d.ts +3 -0
- 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 +25 -2
- package/lib/electron-node/devcontainer-contributions/main-container-creation-contributions.js.map +1 -1
- package/lib/electron-node/docker-container-service.d.ts +2 -2
- package/lib/electron-node/docker-container-service.d.ts.map +1 -1
- package/lib/electron-node/docker-container-service.js +6 -5
- package/lib/electron-node/docker-container-service.js.map +1 -1
- package/lib/electron-node/remote-container-connection-provider.d.ts +2 -1
- package/lib/electron-node/remote-container-connection-provider.d.ts.map +1 -1
- package/lib/electron-node/remote-container-connection-provider.js +3 -3
- package/lib/electron-node/remote-container-connection-provider.js.map +1 -1
- package/package.json +7 -7
- package/src/electron-browser/container-connection-contribution.ts +58 -10
- package/src/electron-browser/container-info-contribution.ts +44 -6
- package/src/electron-browser/dev-container-frontend-module.ts +6 -1
- package/src/electron-common/dev-container-workspaces.ts +18 -0
- package/src/electron-common/remote-container-connection-provider.ts +2 -1
- package/src/electron-node/dev-container-backend-module.ts +5 -0
- package/src/electron-node/dev-container-file-service.ts +2 -7
- package/src/electron-node/dev-container-workspace-handler.ts +33 -0
- package/src/electron-node/devcontainer-contributions/main-container-creation-contributions.ts +22 -2
- package/src/electron-node/docker-container-service.ts +6 -7
- package/src/electron-node/remote-container-connection-provider.ts +3 -3
package/src/electron-node/devcontainer-contributions/main-container-creation-contributions.ts
CHANGED
|
@@ -30,6 +30,7 @@ export function registerContainerCreationContributions(bind: interfaces.Bind): v
|
|
|
30
30
|
bind(ContainerCreationContribution).to(MountsContribution).inSingletonScope();
|
|
31
31
|
bind(ContainerCreationContribution).to(RemoteUserContribution).inSingletonScope();
|
|
32
32
|
bind(ContainerCreationContribution).to(PostCreateCommandContribution).inSingletonScope();
|
|
33
|
+
bind(ContainerCreationContribution).to(ContainerEnvContribution).inSingletonScope();
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
@injectable()
|
|
@@ -37,11 +38,16 @@ export class ImageFileContribution implements ContainerCreationContribution {
|
|
|
37
38
|
async handleContainerCreation(createOptions: Docker.ContainerCreateOptions, containerConfig: ImageContainer,
|
|
38
39
|
api: Docker, outputprovider: ContainerOutputProvider): Promise<void> {
|
|
39
40
|
if (containerConfig.image) {
|
|
40
|
-
|
|
41
|
+
const platform = process.platform;
|
|
42
|
+
const arch = process.arch;
|
|
43
|
+
const options = platform === 'darwin' && arch === 'arm64' ? { platform: 'amd64' } : {};
|
|
44
|
+
await new Promise<void>((res, rej) => api.pull(containerConfig.image, options, (err, stream) => {
|
|
41
45
|
if (err) {
|
|
42
46
|
rej(err);
|
|
47
|
+
} else if (stream === undefined) {
|
|
48
|
+
rej('Stream is undefined');
|
|
43
49
|
} else {
|
|
44
|
-
api.modem.followProgress(stream
|
|
50
|
+
api.modem.followProgress(stream!, (error, output) => error ?
|
|
45
51
|
rej(error) :
|
|
46
52
|
res(), progress => outputprovider.onRemoteOutput(OutputHelper.parseProgress(progress)));
|
|
47
53
|
}
|
|
@@ -177,6 +183,20 @@ export class PostCreateCommandContribution implements ContainerCreationContribut
|
|
|
177
183
|
}
|
|
178
184
|
}
|
|
179
185
|
|
|
186
|
+
@injectable()
|
|
187
|
+
export class ContainerEnvContribution implements ContainerCreationContribution {
|
|
188
|
+
async handleContainerCreation(createOptions: Docker.ContainerCreateOptions, containerConfig: DevContainerConfiguration): Promise<void> {
|
|
189
|
+
if (containerConfig.containerEnv) {
|
|
190
|
+
if (createOptions.Env === undefined) {
|
|
191
|
+
createOptions.Env = [];
|
|
192
|
+
}
|
|
193
|
+
for (const [key, value] of Object.entries(containerConfig.containerEnv)) {
|
|
194
|
+
createOptions.Env.push(`${key}=${value}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
180
200
|
export namespace OutputHelper {
|
|
181
201
|
export interface Progress {
|
|
182
202
|
id?: string;
|
|
@@ -19,7 +19,7 @@ import { inject, injectable, named } from '@theia/core/shared/inversify';
|
|
|
19
19
|
import { WorkspaceServer } from '@theia/workspace/lib/common';
|
|
20
20
|
import * as fs from '@theia/core/shared/fs-extra';
|
|
21
21
|
import * as Docker from 'dockerode';
|
|
22
|
-
import {
|
|
22
|
+
import { ContainerConnectionOptions } from '../electron-common/remote-container-connection-provider';
|
|
23
23
|
import { DevContainerConfiguration } from './devcontainer-file';
|
|
24
24
|
import { DevContainerFileService } from './dev-container-file-service';
|
|
25
25
|
import { ContainerOutputProvider } from '../electron-common/container-output-provider';
|
|
@@ -60,15 +60,14 @@ export class DockerContainerService {
|
|
|
60
60
|
@inject(DevContainerFileService)
|
|
61
61
|
protected readonly devContainerFileService: DevContainerFileService;
|
|
62
62
|
|
|
63
|
-
async getOrCreateContainer(docker: Docker,
|
|
64
|
-
lastContainerInfo?: LastContainerInfo, outputProvider?: ContainerOutputProvider): Promise<Docker.Container> {
|
|
63
|
+
async getOrCreateContainer(docker: Docker, options: ContainerConnectionOptions, outputProvider?: ContainerOutputProvider): Promise<Docker.Container> {
|
|
65
64
|
let container;
|
|
66
65
|
|
|
67
|
-
const workspace = new URI(await this.workspaceServer.getMostRecentlyUsedWorkspace());
|
|
66
|
+
const workspace = new URI(options.workspaceUri ?? await this.workspaceServer.getMostRecentlyUsedWorkspace());
|
|
68
67
|
|
|
69
|
-
if (lastContainerInfo && fs.statSync(devcontainerFile).mtimeMs < lastContainerInfo.lastUsed) {
|
|
68
|
+
if (options.lastContainerInfo && fs.statSync(options.devcontainerFile).mtimeMs < options.lastContainerInfo.lastUsed) {
|
|
70
69
|
try {
|
|
71
|
-
container = docker.getContainer(lastContainerInfo.id);
|
|
70
|
+
container = docker.getContainer(options.lastContainerInfo.id);
|
|
72
71
|
if ((await container.inspect()).State.Running) {
|
|
73
72
|
await container.restart();
|
|
74
73
|
} else {
|
|
@@ -80,7 +79,7 @@ export class DockerContainerService {
|
|
|
80
79
|
}
|
|
81
80
|
}
|
|
82
81
|
if (!container) {
|
|
83
|
-
container = await this.buildContainer(docker, devcontainerFile, workspace, outputProvider);
|
|
82
|
+
container = await this.buildContainer(docker, options.devcontainerFile, workspace, outputProvider);
|
|
84
83
|
}
|
|
85
84
|
return container;
|
|
86
85
|
}
|
|
@@ -79,7 +79,7 @@ export class DevContainerConnectionProvider implements RemoteContainerConnection
|
|
|
79
79
|
text: 'Creating container',
|
|
80
80
|
});
|
|
81
81
|
try {
|
|
82
|
-
const container = await this.containerService.getOrCreateContainer(dockerConnection, options
|
|
82
|
+
const container = await this.containerService.getOrCreateContainer(dockerConnection, options, this.outputProvider);
|
|
83
83
|
const devContainerConfig = await this.devContainerFileService.getConfiguration(options.devcontainerFile);
|
|
84
84
|
|
|
85
85
|
// create actual connection
|
|
@@ -121,8 +121,8 @@ export class DevContainerConnectionProvider implements RemoteContainerConnection
|
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
getDevContainerFiles(): Promise<DevContainerFile[]> {
|
|
125
|
-
return this.devContainerFileService.getAvailableFiles();
|
|
124
|
+
getDevContainerFiles(workspacePath: string): Promise<DevContainerFile[]> {
|
|
125
|
+
return this.devContainerFileService.getAvailableFiles(workspacePath);
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
async createContainerConnection(container: Docker.Container, docker: Docker, name?: string): Promise<RemoteDockerContainerConnection> {
|