Skip to content

Commit 1381b2d

Browse files
rix0rrrmergify[bot]
authored andcommitted
fix(ecr-assets): give accurate error when Tokens are being used (#4255)
Fixes #3795.
1 parent 859e4d1 commit 1381b2d

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

packages/@aws-cdk/aws-ecr-assets/lib/image-asset.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ export class DockerImageAsset extends cdk.Construct implements assets.IAsset {
7070
constructor(scope: cdk.Construct, id: string, props: DockerImageAssetProps) {
7171
super(scope, id);
7272

73-
// verify buildArgs do not use tokens in neither keys nor values
74-
validateBuildArgs(props.buildArgs);
73+
// none of the properties use tokens
74+
validateProps(props);
7575

7676
// resolve full path
7777
const dir = path.resolve(props.directory);
@@ -134,6 +134,16 @@ export class DockerImageAsset extends cdk.Construct implements assets.IAsset {
134134
}
135135
}
136136

137+
function validateProps(props: DockerImageAssetProps) {
138+
for (const [key, value] of Object.entries(props)) {
139+
if (Token.isUnresolved(value)) {
140+
throw new Error(`Cannot use Token as value of '${key}': this value is used before deployment starts`);
141+
}
142+
}
143+
144+
validateBuildArgs(props.buildArgs);
145+
}
146+
137147
function validateBuildArgs(buildArgs?: { [key: string]: string }) {
138148
for (const [key, value] of Object.entries(buildArgs || {})) {
139149
if (Token.isUnresolved(key) || Token.isUnresolved(value)) {

packages/@aws-cdk/aws-ecr-assets/test/test.image-asset.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,20 @@ export = {
233233
buildArgs: { key: token }
234234
}), expected);
235235

236+
test.done();
237+
},
238+
239+
'fails if using token as repositoryName'(test: Test) {
240+
// GIVEN
241+
const stack = new Stack();
242+
const token = Lazy.stringValue({ produce: () => 'foo' });
243+
244+
// THEN
245+
test.throws(() => new DockerImageAsset(stack, 'MyAsset1', {
246+
directory: path.join(__dirname, 'demo-image'),
247+
repositoryName: token
248+
}), /Cannot use Token as value of 'repositoryName'/);
249+
236250
test.done();
237251
}
238252
};

0 commit comments

Comments
 (0)