Skip to content

Commit cc8f08d

Browse files
committed
address comments
1 parent ccb4177 commit cc8f08d

File tree

2 files changed

+46
-7
lines changed

2 files changed

+46
-7
lines changed

packages/core/src/shared/sam/build.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import {
2929
} from './utils'
3030
import { getConfigFileUri, validateSamBuildConfig } from './config'
3131
import { runInTerminal } from './processTerminal'
32-
import { getLogger } from '../logger'
32+
import { SemVer } from 'semver'
3333

3434
const buildMementoRootKey = 'samcli.build.params'
3535
export interface BuildParams {
@@ -211,10 +211,13 @@ export async function runBuild(arg?: TreeNode): Promise<SamBuildResult> {
211211
const projectRoot = params.projectRoot
212212

213213
const defaultFlags: string[] = ['--cached', '--parallel', '--save-params', '--use-container']
214+
215+
const { path: samCliPath, parsedVersion } = await getSamCliPathAndVersion()
216+
214217
// refactor
215218
const buildFlags: string[] =
216219
params.paramsSource === ParamsSource.Specify && params.buildFlags
217-
? resolveBuildFlags(JSON.parse(params.buildFlags))
220+
? await resolveBuildFlags(JSON.parse(params.buildFlags), parsedVersion)
218221
: await getBuildFlags(params.paramsSource, projectRoot, defaultFlags)
219222

220223
// todo remove
@@ -230,8 +233,6 @@ export async function runBuild(arg?: TreeNode): Promise<SamBuildResult> {
230233
await updateRecentResponse(buildMementoRootKey, 'global', 'templatePath', templatePath)
231234

232235
try {
233-
const { path: samCliPath } = await getSamCliPathAndVersion()
234-
235236
// Create a child process to run the SAM build command
236237
const buildProcess = new ChildProcess(samCliPath, ['build', ...buildFlags], {
237238
spawnOptions: await addTelemetryEnvVar({
@@ -282,7 +283,11 @@ function resolveBuildArgConflict(boundArgs: string[]): string[] {
282283
// }
283284
return Array.from(boundArgsSet)
284285
}
285-
export function resolveBuildFlags(buildFlags: string[]): string[] {
286+
export async function resolveBuildFlags(buildFlags: string[], samCliVersion: SemVer | null): Promise<string[]> {
287+
// const samCliVersion = (await getSamCliPathAndVersion()).parsedVersion
288+
if (samCliVersion?.compare('1.133.0') ?? -1 < 0) {
289+
return buildFlags
290+
}
286291
if (!buildFlags.includes('--use-container')) {
287292
buildFlags.push('--no-use-container')
288293
}

packages/core/src/test/shared/sam/build.test.ts

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@ import { getProjectRootUri } from '../../../shared/sam/utils'
2727
import sinon from 'sinon'
2828
import { createMultiPick, DataQuickPickItem } from '../../../shared/ui/pickerPrompter'
2929
import * as config from '../../../shared/sam/config'
30+
import * as utils from '../../../shared/sam/utils'
3031
import { PrompterTester } from '../wizards/prompterTester'
3132
import { getWorkspaceFolder, TestFolder } from '../../testUtil'
3233
import { samconfigCompleteData, validTemplateData } from './samTestUtils'
3334
import { CloudFormationTemplateRegistry } from '../../../shared/fs/templateRegistry'
3435
import { getTestWindow } from '../vscode/window'
3536
import { CancellationError } from '../../../shared/utilities/timeoutUtils'
37+
import { SemVer } from 'semver'
3638

3739
describe('SAM BuildWizard', async function () {
3840
const createTester = async (params?: Partial<BuildParams>, arg?: TreeNode | undefined) =>
@@ -232,10 +234,42 @@ describe('SAM build helper functions', () => {
232234
})
233235

234236
describe('resolveBuildFlags', () => {
235-
it('should add --no-use-container if the buildFlags array does not contain --use-container', () => {
237+
let sandbox: sinon.SinonSandbox
238+
let pathAndVersionStub: sinon.SinonStub<any[], any>
239+
240+
beforeEach(() => {
241+
sandbox = sinon.createSandbox()
242+
})
243+
244+
afterEach(() => {
245+
sandbox.restore()
246+
})
247+
248+
it('should add --no-use-container if the buildFlags array does not contain --use-container', async () => {
249+
const normalVersion = { path: 'file:///path/to/cli', parsedVersion: new SemVer('1.133.0') }
250+
pathAndVersionStub = sandbox.stub().resolves(normalVersion)
251+
sandbox.stub(utils, 'getSamCliPathAndVersion').callsFake(pathAndVersionStub)
236252
const buildFlags: string[] = ['--cached', '--debug', '--parallel']
237253
const resolvedBuildFlags = ['--cached', '--debug', '--parallel', '--no-use-container']
238-
assert.deepStrictEqual(resolvedBuildFlags, resolveBuildFlags(buildFlags))
254+
assert.deepEqual(resolvedBuildFlags, await resolveBuildFlags(buildFlags, normalVersion.parsedVersion))
255+
})
256+
257+
it('should return the original buildFlags array if SAM CLI version is less than 1.133', async () => {
258+
const lowerVersion = { path: 'file:///path/to/cli', parsedVersion: new SemVer('1.110.0') }
259+
const pathAndVersionStub = sandbox.stub().resolves(lowerVersion)
260+
sandbox.stub(utils, 'getSamCliPathAndVersion').callsFake(pathAndVersionStub)
261+
const buildFlags = ['--cached', '--parallel', '--save-params']
262+
const resolvedBuildFlags = await resolveBuildFlags(buildFlags, lowerVersion.parsedVersion)
263+
assert.deepEqual(resolvedBuildFlags, buildFlags)
264+
})
265+
266+
it('should not add "--no-use-container" if "--use-container" is already present', async () => {
267+
const normalVersion = { path: 'file:///path/to/cli', parsedVersion: new SemVer('1.110.0') }
268+
pathAndVersionStub = sandbox.stub().resolves(normalVersion)
269+
sandbox.stub(utils, 'getSamCliPathAndVersion').callsFake(pathAndVersionStub)
270+
const buildFlags = ['--cached', '--parallel', '--save-params', '--use-container']
271+
const resolvedBuildFlags = await resolveBuildFlags(buildFlags, normalVersion.parsedVersion)
272+
assert.deepStrictEqual(resolvedBuildFlags, buildFlags)
239273
})
240274
})
241275
})

0 commit comments

Comments
 (0)