Skip to content

Commit d58fafb

Browse files
committed
Add options to include configuration in result
1 parent 7c2d300 commit d58fafb

File tree

5 files changed

+26
-7
lines changed

5 files changed

+26
-7
lines changed

src/spec-node/devContainers.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ export interface ProvisionOptions {
6969
experimentalFrozenLockfile?: boolean;
7070
secretsP?: Promise<Record<string, string>>;
7171
omitSyntaxDirective?: boolean;
72+
includeConfig?: boolean;
73+
includeMergedConfig?: boolean;
7274
}
7375

7476
export async function launch(options: ProvisionOptions, providedIdLabels: string[] | undefined, disposables: (() => Promise<unknown> | undefined)[]) {
@@ -81,10 +83,12 @@ export async function launch(options: ProvisionOptions, providedIdLabels: string
8183
output.stop(text, start);
8284
const { dockerContainerId, composeProjectName } = result;
8385
return {
84-
containerId: dockerContainerId!,
86+
containerId: dockerContainerId,
8587
composeProjectName,
8688
remoteUser: result.properties.user,
8789
remoteWorkspaceFolder: result.properties.remoteWorkspaceFolder,
90+
configuration: options.includeConfig ? result.config : undefined,
91+
mergedConfiguration: options.includeMergedConfig ? result.mergedConfig : undefined,
8892
finishBackgroundTasks: async () => {
8993
try {
9094
await finishBackgroundTasks(result.params.backgroundTasks);

src/spec-node/devContainersSpecCLI.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ function provisionOptions(y: Argv) {
137137
'experimental-lockfile': { type: 'boolean', default: false, hidden: true, description: 'Write lockfile' },
138138
'experimental-frozen-lockfile': { type: 'boolean', default: false, hidden: true, description: 'Ensure lockfile remains unchanged' },
139139
'omit-syntax-directive': { type: 'boolean', default: false, hidden: true, description: 'Omit Dockerfile syntax directives' },
140+
'include-configuration': { type: 'boolean', default: false, description: 'Include configuration in result.' },
141+
'include-merged-configuration': { type: 'boolean', default: false, description: 'Include merged configuration in result.' },
140142
})
141143
.check(argv => {
142144
const idLabels = (argv['id-label'] && (Array.isArray(argv['id-label']) ? argv['id-label'] : [argv['id-label']])) as string[] | undefined;
@@ -208,6 +210,8 @@ async function provision({
208210
'experimental-lockfile': experimentalLockfile,
209211
'experimental-frozen-lockfile': experimentalFrozenLockfile,
210212
'omit-syntax-directive': omitSyntaxDirective,
213+
'include-configuration': includeConfig,
214+
'include-merged-configuration': includeMergedConfig,
211215
}: ProvisionArgs) {
212216

213217
const workspaceFolder = workspaceFolderArg ? path.resolve(process.cwd(), workspaceFolderArg) : undefined;
@@ -270,10 +274,12 @@ async function provision({
270274
skipPostAttach,
271275
containerSessionDataFolder,
272276
skipPersistingCustomizationsFromFeatures: false,
273-
omitConfigRemotEnvFromMetadata: omitConfigRemotEnvFromMetadata,
277+
omitConfigRemotEnvFromMetadata,
274278
experimentalLockfile,
275279
experimentalFrozenLockfile,
276-
omitSyntaxDirective: omitSyntaxDirective,
280+
omitSyntaxDirective,
281+
includeConfig,
282+
includeMergedConfig,
277283
};
278284

279285
const result = await doProvision(options, providedIdLabels);
@@ -337,6 +343,8 @@ function setUpOptions(y: Argv) {
337343
'dotfiles-install-command': { type: 'string', description: 'The command to run after cloning the dotfiles repository. Defaults to run the first file of `install.sh`, `install`, `bootstrap.sh`, `bootstrap`, `setup.sh` and `setup` found in the dotfiles repository`s root folder.' },
338344
'dotfiles-target-path': { type: 'string', default: '~/dotfiles', description: 'The path to clone the dotfiles repository to. Defaults to `~/dotfiles`.' },
339345
'container-session-data-folder': { type: 'string', description: 'Folder to cache CLI data, for example userEnvProbe results' },
346+
'include-configuration': { type: 'boolean', default: false, description: 'Include configuration in result.' },
347+
'include-merged-configuration': { type: 'boolean', default: false, description: 'Include merged configuration in result.' },
340348
})
341349
.check(argv => {
342350
const remoteEnvs = (argv['remote-env'] && (Array.isArray(argv['remote-env']) ? argv['remote-env'] : [argv['remote-env']])) as string[] | undefined;
@@ -380,6 +388,8 @@ async function doSetUp({
380388
'dotfiles-install-command': dotfilesInstallCommand,
381389
'dotfiles-target-path': dotfilesTargetPath,
382390
'container-session-data-folder': containerSessionDataFolder,
391+
'include-configuration': includeConfig,
392+
'include-merged-configuration': includeMergedConfig,
383393
}: SetUpArgs) {
384394

385395
const disposables: (() => Promise<unknown> | undefined)[] = [];
@@ -457,6 +467,8 @@ async function doSetUp({
457467
await setupInContainer(common, containerProperties, mergedConfig, lifecycleCommandOriginMapFromMetadata(imageMetadata));
458468
return {
459469
outcome: 'success' as 'success',
470+
configuration: includeConfig ? config.config : undefined,
471+
mergedConfiguration: includeMergedConfig ? mergedConfig : undefined,
460472
dispose,
461473
};
462474
} catch (originalError) {

src/spec-node/dockerCompose.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ async function _openDockerComposeDevContainer(params: DockerResolverParameters,
8282
params: common,
8383
properties: containerProperties,
8484
config,
85+
mergedConfig,
8586
resolvedAuthority: {
8687
extensionHostEnv,
8788
},

src/spec-node/singleContainer.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ async function setupContainer(container: ContainerDetails, params: DockerResolve
106106
params: common,
107107
properties: containerProperties,
108108
config,
109+
mergedConfig,
109110
resolvedAuthority: {
110111
extensionHostEnv,
111112
},

src/spec-node/utils.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { StringDecoder } from 'string_decoder';
2424
import { Event } from '../spec-utils/event';
2525
import { Mount } from '../spec-configuration/containerFeaturesConfiguration';
2626
import { PackageConfiguration } from '../spec-utils/product';
27-
import { ImageMetadataEntry } from './imageMetadata';
27+
import { ImageMetadataEntry, MergedDevContainerConfig } from './imageMetadata';
2828
import { getImageIndexEntryForPlatform, getManifest, getRef } from '../spec-configuration/containerCollectionsOCI';
2929
import { requestEnsureAuthenticated } from '../spec-configuration/httpOCIRegistry';
3030
import { configFileLabel, findDevContainer, hostFolderLabel } from './singleContainer';
@@ -124,12 +124,13 @@ export interface DockerResolverParameters {
124124
export interface ResolverResult {
125125
params: ResolverParameters;
126126
properties: ContainerProperties;
127-
config: DevContainerConfig | undefined;
127+
config: DevContainerConfig;
128+
mergedConfig: MergedDevContainerConfig;
128129
resolvedAuthority: { extensionHostEnv?: { [key: string]: string | null } };
129130
tunnelInformation: { environmentTunnels?: { remoteAddress: { port: number; host: string }; localAddress: string }[] };
130131
isTrusted?: boolean;
131-
dockerParams: DockerResolverParameters | undefined;
132-
dockerContainerId: string | undefined;
132+
dockerParams: DockerResolverParameters;
133+
dockerContainerId: string;
133134
composeProjectName?: string;
134135
}
135136

0 commit comments

Comments
 (0)