diff --git a/packages/aws-cdk-lib/aws-ecr-assets/lib/tarball-asset.ts b/packages/aws-cdk-lib/aws-ecr-assets/lib/tarball-asset.ts index c6fc4593cdfe2..99bc854e88550 100644 --- a/packages/aws-cdk-lib/aws-ecr-assets/lib/tarball-asset.ts +++ b/packages/aws-cdk-lib/aws-ecr-assets/lib/tarball-asset.ts @@ -99,7 +99,7 @@ export class TarballImageAsset extends Construct implements IAsset { this.assetHash = stagedTarball.assetHash; const stage = Stage.of(this); - const relativePathInOutDir = stage ? path.relative(stage.assetOutdir, stagedTarball.absoluteStagedPath) : stagedTarball.absoluteStagedPath; + const relativePathInOutDir = stage ? path.relative(stage.outdir, stagedTarball.absoluteStagedPath) : stagedTarball.absoluteStagedPath; const stack = Stack.of(this); const location = stack.synthesizer.addDockerImageAsset({ diff --git a/packages/aws-cdk-lib/aws-ecr-assets/test/tarball-asset.test.ts b/packages/aws-cdk-lib/aws-ecr-assets/test/tarball-asset.test.ts index ae04e53afefee..3a83c77313833 100644 --- a/packages/aws-cdk-lib/aws-ecr-assets/test/tarball-asset.test.ts +++ b/packages/aws-cdk-lib/aws-ecr-assets/test/tarball-asset.test.ts @@ -4,7 +4,7 @@ import * as path from 'path'; import { Template } from '../../assertions'; import * as iam from '../../aws-iam'; import * as cxschema from '../../cloud-assembly-schema'; -import { App, Stack, DefaultStackSynthesizer } from '../../core'; +import { App, Stage, Stack, DefaultStackSynthesizer } from '../../core'; import * as cxapi from '../../cx-api'; import { TarballImageAsset, DOCKER_LOAD_OUTPUT_REGEX } from '../lib'; @@ -51,6 +51,33 @@ describe('image asset', () => { expect(asset.node.tryFindChild('Staging')).toBeDefined(); }); + test('test instantiating Asset Image in a Stage', () => { + // GIVEN + const app = new App(); + const stage = new Stage(app, 'Stage1'); + const stack = new Stack(stage); + const asset = new TarballImageAsset(stack, 'Image', { + tarballFile, + }); + + // WHEN + const asm = stage.synth(); + + // THEN + const manifestArtifact = getAssetManifest(asm); + const manifest = readAssetManifest(manifestArtifact); + + expect(manifest.dockerImages?.[asset.assetHash]?.source).toStrictEqual( + { + executable: [ + 'sh', + '-c', + `docker load -i ../asset.${asset.assetHash}.tar | tail -n 1 | sed "${DOCKER_LOAD_OUTPUT_REGEX}"`, + ], + }, + ); + }); + test('asset.repository.grantPull can be used to grant a principal permissions to use the image', () => { // GIVEN const stack = new Stack();