Skip to content

Commit e7ef5e5

Browse files
authored
fix(ecr-assets): docker images are not built if .dockerignore includes an entry that ignores the dockerfile. (#6007)
* Don't leave Dockerfile or .dockerignore out or the assets folder if in the .dockerignore file * Ensure that custom Dockerfile names never get excluded from assets * Making explanatory comment less verbose
1 parent f965ed5 commit e7ef5e5

File tree

6 files changed

+26
-9
lines changed

6 files changed

+26
-9
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
"**/jszip/**",
5050
"@aws-cdk/assets/minimatch",
5151
"@aws-cdk/assets/minimatch/**",
52+
"@aws-cdk/aws-ecr-assets/minimatch",
53+
"@aws-cdk/aws-ecr-assets/minimatch/**",
5254
"@aws-cdk/cx-api/semver",
5355
"@aws-cdk/cx-api/semver/**",
5456
"@aws-cdk/cx-api/semver/**",

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as assets from '@aws-cdk/assets';
22
import * as ecr from '@aws-cdk/aws-ecr';
33
import { Construct, Stack, Token } from '@aws-cdk/core';
44
import * as fs from 'fs';
5+
import * as minimatch from 'minimatch';
56
import * as path from 'path';
67

78
export interface DockerImageAssetProps extends assets.FingerprintOptions {
@@ -95,6 +96,13 @@ export class DockerImageAsset extends Construct implements assets.IAsset {
9596
exclude = [...exclude, ...fs.readFileSync(ignore).toString().split('\n').filter(e => !!e)];
9697
}
9798

99+
// make sure the docker file and the dockerignore file end up in the staging area
100+
// see https://github.com/aws/aws-cdk/issues/6004
101+
exclude = exclude.filter(ignoreExpression => {
102+
return !(minimatch(file, ignoreExpression, { matchBase: true }) ||
103+
minimatch(ignore, ignoreExpression, { matchBase: true }));
104+
});
105+
98106
if (props.repositoryName) {
99107
this.node.addWarning(`DockerImageAsset.repositoryName is deprecated. Override "core.Stack.addDockerImageAsset" to control asset locations`);
100108
}

packages/@aws-cdk/aws-ecr-assets/package.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@
7777
"@aws-cdk/aws-lambda": "1.22.0",
7878
"@aws-cdk/aws-s3": "1.22.0",
7979
"@aws-cdk/core": "1.22.0",
80-
"@aws-cdk/cx-api": "1.22.0"
80+
"@aws-cdk/cx-api": "1.22.0",
81+
"minimatch": "^3.0.4"
8182
},
8283
"homepage": "https://github.com/aws/aws-cdk",
8384
"peerDependencies": {
@@ -96,10 +97,13 @@
9697
"engines": {
9798
"node": ">= 10.3.0"
9899
},
100+
"bundledDependencies": [
101+
"minimatch"
102+
],
99103
"stability": "experimental",
100104
"awslint": {
101105
"exclude": [
102106
"docs-public-apis:@aws-cdk/aws-ecr-assets.DockerImageAssetProps"
103107
]
104108
}
105-
}
109+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Dockerfile.Custom
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
foobar.txt
2+
Dockerfile
3+
.dockerignore

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,13 @@ export = {
297297
const asset6 = new DockerImageAsset(stack, 'Asset6', { directory, extraHash: 'random-extra' });
298298
const asset7 = new DockerImageAsset(stack, 'Asset7', { directory, repositoryName: 'foo' });
299299

300-
test.deepEqual(asset1.sourceHash, '31959f03fcdf1bddec1420d315dddedfccf559e87e95c85854a01f2cac103fc8');
301-
test.deepEqual(asset2.sourceHash, 'a42cd51ab2bc5e2a4399c4bc41f7df761ff19877b54bce52d69c6e8d628f16fd');
302-
test.deepEqual(asset3.sourceHash, '9efbc91d5c2f43782e49b27e784caad32d8619a0cecf806a6e55cf70f1cfbc22');
303-
test.deepEqual(asset4.sourceHash, '2907224e59cb720ba5810a624f1c1267f547377e8a23c50d72286dd81dc8435e');
304-
test.deepEqual(asset5.sourceHash, 'd718928111c650564240141b156188ebdbb93d3c5f1448dd1afe823ae7f742a5');
305-
test.deepEqual(asset6.sourceHash, 'fe3ef82c91b6321ac17bc3a14c75845fa1ddbafe550e0a04d5cf680015903a2d');
306-
test.deepEqual(asset7.sourceHash, '80f586ed82faacec8a285dd99c7ee52e06525fee1721bc80bc846d1a8266fe36');
300+
test.deepEqual(asset1.sourceHash, 'b5d181eb114c889020f9d59961ac4ad5d65f49c571c0aafd5ce2be9464bc2d13');
301+
test.deepEqual(asset2.sourceHash, '273bd9a95dbe346ad5b116736d44a350e90f57e2b9ba7fd3d334b61d0420f9fd');
302+
test.deepEqual(asset3.sourceHash, '14874d82ff027d94386817023bda8f80655d6f0d967df8b47c0146d770e9a059');
303+
test.deepEqual(asset4.sourceHash, 'c36b98c10fe2994b639dcd6028dbd7a2138bee0e2a8d3a3d20e8f7785e64aca9');
304+
test.deepEqual(asset5.sourceHash, '30e083bf51483a031759bc7fb35f69345de69fdbc511eec88bd3d1724b5ac0a9');
305+
test.deepEqual(asset6.sourceHash, '486729da8c28c8363ba1c42cd6c1ed0c23b1ae4bf81fd9fde51c6bac9dce5fcb');
306+
test.deepEqual(asset7.sourceHash, '0b48fa3f7f75365962e6e18f52608ec4e4451f8ecc0b58abdb063c5381569471');
307307
test.done();
308308
}
309309
};

0 commit comments

Comments
 (0)