Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions packages/core/src/shared/sam/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
} from './utils'
import { getConfigFileUri, validateSamBuildConfig } from './config'
import { runInTerminal } from './processTerminal'
import { SemVer } from 'semver'

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

const defaultFlags: string[] = ['--cached', '--parallel', '--save-params', '--use-container']

const { path: samCliPath, parsedVersion } = await getSamCliPathAndVersion()

// refactor
const buildFlags: string[] =
params.paramsSource === ParamsSource.Specify && params.buildFlags
? JSON.parse(params.buildFlags)
? await resolveBuildFlags(JSON.parse(params.buildFlags), parsedVersion)
: await getBuildFlags(params.paramsSource, projectRoot, defaultFlags)

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

try {
const { path: samCliPath } = await getSamCliPathAndVersion()

// Create a child process to run the SAM build command
const buildProcess = new ChildProcess(samCliPath, ['build', ...buildFlags], {
spawnOptions: await addTelemetryEnvVar({
Expand Down Expand Up @@ -281,3 +283,13 @@ function resolveBuildArgConflict(boundArgs: string[]): string[] {
// }
return Array.from(boundArgsSet)
}
export async function resolveBuildFlags(buildFlags: string[], samCliVersion: SemVer | null): Promise<string[]> {
// --no-use-container was not added until v1.133.0
if (samCliVersion?.compare('1.133.0') ?? -1 < 0) {
return buildFlags
}
if (!buildFlags.includes('--use-container')) {
buildFlags.push('--no-use-container')
}
return buildFlags
}
48 changes: 48 additions & 0 deletions packages/core/src/test/shared/sam/build.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
createParamsSourcePrompter,
getBuildFlags,
ParamsSource,
resolveBuildFlags,
runBuild,
} from '../../../shared/sam/build'
import { TreeNode } from '../../../shared/treeview/resourceTreeDataProvider'
Expand All @@ -26,12 +27,14 @@ import { getProjectRootUri } from '../../../shared/sam/utils'
import sinon from 'sinon'
import { createMultiPick, DataQuickPickItem } from '../../../shared/ui/pickerPrompter'
import * as config from '../../../shared/sam/config'
import * as utils from '../../../shared/sam/utils'
import { PrompterTester } from '../wizards/prompterTester'
import { getWorkspaceFolder, TestFolder } from '../../testUtil'
import { samconfigCompleteData, validTemplateData } from './samTestUtils'
import { CloudFormationTemplateRegistry } from '../../../shared/fs/templateRegistry'
import { getTestWindow } from '../vscode/window'
import { CancellationError } from '../../../shared/utilities/timeoutUtils'
import { SemVer } from 'semver'

describe('SAM BuildWizard', async function () {
const createTester = async (params?: Partial<BuildParams>, arg?: TreeNode | undefined) =>
Expand Down Expand Up @@ -229,6 +232,38 @@ describe('SAM build helper functions', () => {
assert.deepStrictEqual(quickPick.items, expectedItems)
})
})

describe('resolveBuildFlags', () => {
let sandbox: sinon.SinonSandbox
beforeEach(() => {
sandbox = sinon.createSandbox()
})

afterEach(() => {
sandbox.restore()
})

it('uses --no-use-container when --use-container is absent', async () => {
const normalVersion = new SemVer('1.133.0')
const buildFlags = ['--cached', '--debug', '--parallel']
const expectedBuildFlags = ['--cached', '--debug', '--parallel', '--no-use-container']
return testResolveBuildFlags(sandbox, normalVersion, buildFlags, expectedBuildFlags)
})

it('preserves buildFlags when SAM CLI version < 1.133', async () => {
const lowerVersion = new SemVer('1.110.0')
const buildFlags = ['--cached', '--parallel', '--save-params']
const expectedBuildFlags = ['--cached', '--parallel', '--save-params']
return testResolveBuildFlags(sandbox, lowerVersion, buildFlags, expectedBuildFlags)
})

it('respects existing --use-container flag', async () => {
const normalVersion = new SemVer('1.110.0')
const buildFlags = ['--cached', '--parallel', '--save-params', '--use-container']
const expectedBuildFlags = ['--cached', '--parallel', '--save-params', '--use-container']
return testResolveBuildFlags(sandbox, normalVersion, buildFlags, expectedBuildFlags)
})
})
})

describe('SAM runBuild', () => {
Expand Down Expand Up @@ -551,3 +586,16 @@ describe('SAM runBuild', () => {
})
})
})

function testResolveBuildFlags(
sandbox: sinon.SinonSandbox,
parsedVersion: SemVer,
buildFlags: string[],
expectedBuildFlags: string[]
) {
const pathAndVersionStub = sandbox.stub().resolves({ path: 'file:///path/to/cli', parsedVersion })
sandbox.stub(utils, 'getSamCliPathAndVersion').callsFake(pathAndVersionStub)
return resolveBuildFlags(buildFlags, parsedVersion).then((resolvedBuildFlags) => {
assert.deepEqual(resolvedBuildFlags, expectedBuildFlags)
})
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type": "Bug Fix",
"description": "appBuilder: pass '--no-use-container' when '--use-container' is not selected in quickpick"
}
Loading