Skip to content

Commit 7829210

Browse files
authored
Merge pull request #1135 from ross-p-smith/ross/inline-cache
Added BUILDKIT_INLINE_CACHE for containerFeature path
2 parents 7d2643a + 9f259c9 commit 7829210

File tree

4 files changed

+44
-3
lines changed

4 files changed

+44
-3
lines changed

src/spec-node/containerFeatures.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { LogLevel, makeLog } from '../spec-utils/log';
1111
import { FeaturesConfig, getContainerFeaturesBaseDockerFile, getFeatureInstallWrapperScript, getFeatureLayers, getFeatureMainValue, getFeatureValueObject, generateFeaturesConfig, Feature, generateContainerEnvs } from '../spec-configuration/containerFeaturesConfiguration';
1212
import { readLocalFile } from '../spec-utils/pfs';
1313
import { includeAllConfiguredFeatures } from '../spec-utils/product';
14-
import { createFeaturesTempFolder, DockerResolverParameters, getCacheFolder, getFolderImageName, getEmptyContextFolder, SubstitutedConfig } from './utils';
14+
import { createFeaturesTempFolder, DockerResolverParameters, getCacheFolder, getFolderImageName, getEmptyContextFolder, SubstitutedConfig, isBuildxCacheToInline } from './utils';
1515
import { isEarlierVersion, parseVersion, runCommandNoPty } from '../spec-common/commonUtils';
1616
import { getDevcontainerMetadata, getDevcontainerMetadataLabel, getImageBuildInfoFromImage, ImageBuildInfo, ImageMetadataEntry, imageMetadataLabel, MergedDevContainerConfig } from './imageMetadata';
1717
import { supportsBuildContexts } from './dockerfileUtils';
@@ -85,6 +85,9 @@ export async function extendImage(params: DockerResolverParameters, config: Subs
8585
if (params.buildxCacheTo) {
8686
args.push('--cache-to', params.buildxCacheTo);
8787
}
88+
if (!isBuildxCacheToInline(params.buildxCacheTo)) {
89+
args.push('--build-arg', 'BUILDKIT_INLINE_CACHE=1');
90+
}
8891
if (!params.buildNoCache) {
8992
params.additionalCacheFroms.forEach(cacheFrom => args.push('--cache-from', cacheFrom));
9093
}

src/spec-node/singleContainer.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66

7-
import { createContainerProperties, startEventSeen, ResolverResult, getTunnelInformation, getDockerfilePath, getDockerContextPath, DockerResolverParameters, isDockerFileConfig, uriToWSLFsPath, WorkspaceConfiguration, getFolderImageName, inspectDockerImage, logUMask, SubstitutedConfig, checkDockerSupportForGPU, isBuildKitImagePolicyError } from './utils';
7+
import { createContainerProperties, startEventSeen, ResolverResult, getTunnelInformation, getDockerfilePath, getDockerContextPath, DockerResolverParameters, isDockerFileConfig, uriToWSLFsPath, WorkspaceConfiguration, getFolderImageName, inspectDockerImage, logUMask, SubstitutedConfig, checkDockerSupportForGPU, isBuildKitImagePolicyError, isBuildxCacheToInline } from './utils';
88
import { ContainerProperties, setupInContainer, ResolverProgress, ResolverParameters } from '../spec-common/injectHeadless';
99
import { ContainerError, toErrorText } from '../spec-common/errors';
1010
import { ContainerDetails, listContainers, DockerCLIParameters, inspectContainers, dockerCLI, dockerPtyCLI, toPtyExecParameters, ImageDetails, toExecParameters, removeContainer } from '../spec-shutdown/dockerUtils';
@@ -209,7 +209,9 @@ async function buildAndExtendImage(buildParams: DockerResolverParameters, config
209209
if (buildParams.buildxCacheTo) {
210210
args.push('--cache-to', buildParams.buildxCacheTo);
211211
}
212-
args.push('--build-arg', 'BUILDKIT_INLINE_CACHE=1');
212+
if (!isBuildxCacheToInline(buildParams.buildxCacheTo)) {
213+
args.push('--build-arg', 'BUILDKIT_INLINE_CACHE=1');
214+
}
213215
} else {
214216
args.push('build');
215217
}

src/spec-node/utils.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,13 @@ export async function logUMask(params: DockerResolverParameters): Promise<string
9393
}
9494
}
9595

96+
export function isBuildxCacheToInline(buildxCacheTo: string | undefined): boolean {
97+
if (!buildxCacheTo) {
98+
return false;
99+
}
100+
return /type\s*=\s*inline/i.test(buildxCacheTo);
101+
}
102+
96103
export type ParsedAuthority = DevContainerAuthority;
97104

98105
export type UpdateRemoteUserUIDDefault = 'never' | 'on' | 'off';

src/test/utils.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
*--------------------------------------------------------------------------------------------*/
4+
5+
import * as assert from 'assert';
6+
7+
import { isBuildxCacheToInline } from '../spec-node/utils';
8+
9+
describe('Utils', function () {
10+
describe('isBuildxCacheToInline', function () {
11+
it('returns false for undefined or empty', () => {
12+
assert.strictEqual(isBuildxCacheToInline(undefined), false);
13+
assert.strictEqual(isBuildxCacheToInline(''), false);
14+
});
15+
16+
it('returns true for inline cache type', () => {
17+
assert.strictEqual(isBuildxCacheToInline('type=inline'), true);
18+
assert.strictEqual(isBuildxCacheToInline('type = inline'), true);
19+
assert.strictEqual(isBuildxCacheToInline('type=INLINE'), true);
20+
assert.strictEqual(isBuildxCacheToInline('mode=max,type=inline,compression=zstd'), true);
21+
});
22+
23+
it('returns false for non-inline cache type', () => {
24+
assert.strictEqual(isBuildxCacheToInline('type=registry'), false);
25+
assert.strictEqual(isBuildxCacheToInline('type=local'), false);
26+
assert.strictEqual(isBuildxCacheToInline('inline'), false);
27+
});
28+
});
29+
});

0 commit comments

Comments
 (0)