Skip to content

Commit 63a89ee

Browse files
committed
add unknow os and arch type for manifest
1 parent c999d57 commit 63a89ee

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

src/spec-common/commonUtils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ export interface ExecFunction {
4141
(params: ExecParameters): Promise<Exec>;
4242
}
4343

44-
export type GoOS = { [OS in NodeJS.Platform]: OS extends 'win32' ? 'windows' : OS; }[NodeJS.Platform];
45-
export type GoARCH = { [ARCH in NodeJS.Architecture]: ARCH extends 'x64' ? 'amd64' : ARCH; }[NodeJS.Architecture];
44+
export type GoOS = { [OS in NodeJS.Platform]: OS extends 'win32' ? 'windows' : OS; }[NodeJS.Platform] | 'unknown';
45+
export type GoARCH = { [ARCH in NodeJS.Architecture]: ARCH extends 'x64' ? 'amd64' : ARCH; }[NodeJS.Architecture] | 'unknown';
4646

4747
export interface PlatformInfo {
4848
os: GoOS;

src/spec-node/imageMetadata.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6+
import { PlatformInfo } from '../spec-common/commonUtils';
67
import { ContainerError } from '../spec-common/errors';
78
import { LifecycleCommand, LifecycleHooksInstallMap } from '../spec-common/injectHeadless';
89
import { DevContainerConfig, DevContainerConfigCommand, DevContainerFromDockerComposeConfig, DevContainerFromDockerfileConfig, DevContainerFromImageConfig, getDockerComposeFilePaths, getDockerfilePath, HostGPURequirements, HostRequirements, isDockerFileConfig, PortAttributes, UserEnvProbe } from '../spec-configuration/configuration';
@@ -394,16 +395,20 @@ export async function getImageBuildInfoFromImage(params: DockerResolverParameter
394395
export async function getImageBuildInfoFromDockerfile(params: DockerResolverParameters | DockerCLIParameters, dockerfile: string, dockerBuildArgs: Record<string, string>, targetStage: string | undefined, substitute: SubstituteConfig) {
395396
const { output } = 'output' in params ? params : params.common;
396397
const omitSyntaxDirective = 'common' in params ? !!params.common.omitSyntaxDirective : false;
397-
return internalGetImageBuildInfoFromDockerfile(imageName => inspectDockerImage(params, imageName, true), dockerfile, dockerBuildArgs, targetStage, substitute, output, omitSyntaxDirective);
398+
return internalGetImageBuildInfoFromDockerfile(imageName => inspectDockerImage(params, imageName, true), dockerfile, dockerBuildArgs, targetStage, substitute, output, omitSyntaxDirective, params.platformInfo);
398399
}
399400

400-
export async function internalGetImageBuildInfoFromDockerfile(inspectDockerImage: (imageName: string) => Promise<ImageDetails>, dockerfileText: string, dockerBuildArgs: Record<string, string>, targetStage: string | undefined, substitute: SubstituteConfig, output: Log, omitSyntaxDirective: boolean): Promise<ImageBuildInfo> {
401+
export async function internalGetImageBuildInfoFromDockerfile(inspectDockerImage: (imageName: string) => Promise<ImageDetails>, dockerfileText: string, dockerBuildArgs: Record<string, string>, targetStage: string | undefined, substitute: SubstituteConfig, output: Log, omitSyntaxDirective: boolean, platformInfo: PlatformInfo): Promise<ImageBuildInfo> {
401402
const dockerfile = extractDockerfile(dockerfileText);
402403
if (dockerfile.preamble.directives.syntax && omitSyntaxDirective) {
403404
output.write(`Omitting syntax directive '${dockerfile.preamble.directives.syntax}' from Dockerfile.`, LogLevel.Trace);
404405
delete dockerfile.preamble.directives.syntax;
405406
}
406-
const baseImage = findBaseImage(dockerfile, dockerBuildArgs, targetStage);
407+
const baseImage = findBaseImage(dockerfile, dockerBuildArgs, targetStage, platformInfo);
408+
const dummyBaseImage = findBaseImage(dockerfile, dockerBuildArgs, targetStage, { os: 'unknown', arch: 'unknown' });
409+
if (baseImage !== dummyBaseImage) {
410+
throw new Error(`Inconsistent base image used for multi-platform builds. Please check your Dockerfile.`);
411+
}
407412
const imageDetails = baseImage && await inspectDockerImage(baseImage) || undefined;
408413
const dockerfileUser = findUserStatement(dockerfile, dockerBuildArgs, envListToObj(imageDetails?.Config.Env), targetStage);
409414
const user = dockerfileUser || imageDetails?.Config.User || 'root';

0 commit comments

Comments
 (0)