diff --git a/packages/@aws-cdk/aws-servicecatalog/lib/private/product-stack-synthesizer.ts b/packages/@aws-cdk/aws-servicecatalog/lib/private/product-stack-synthesizer.ts index d451f34fc51ad..53a88bf463718 100644 --- a/packages/@aws-cdk/aws-servicecatalog/lib/private/product-stack-synthesizer.ts +++ b/packages/@aws-cdk/aws-servicecatalog/lib/private/product-stack-synthesizer.ts @@ -23,7 +23,7 @@ export class ProductStackSynthesizer extends cdk.StackSynthesizer { throw new Error('An Asset Bucket must be provided to use Assets'); } const outdir = cdk.App.of(this.boundStack)?.outdir ?? 'cdk.out'; - const assetPath = `./${outdir}/${asset.fileName}`; + const assetPath = `${outdir}/${asset.fileName}`; if (!this.bucketDeployment) { const parentStack = (this.boundStack as ProductStack)._getParentStack(); if (!cdk.Resource.isOwnedResource(this.assetBucket)) { diff --git a/packages/@aws-cdk/aws-servicecatalog/test/product-stack.test.ts b/packages/@aws-cdk/aws-servicecatalog/test/product-stack.test.ts index fd897111d1f5e..8a56bafa932f3 100644 --- a/packages/@aws-cdk/aws-servicecatalog/test/product-stack.test.ts +++ b/packages/@aws-cdk/aws-servicecatalog/test/product-stack.test.ts @@ -54,6 +54,32 @@ describe('ProductStack', () => { }); }); + test('Use correct assetPath when outdir is absolute', () => { + // GIVEN + const app = new cdk.App( + { outdir: '/tmp/foobar' }, + ); + const mainStack = new cdk.Stack(app, 'MyStackAbsolutePath'); + const testAssetBucket = new s3.Bucket(mainStack, 'TestAssetBucket', { + bucketName: 'test-asset-bucket', + }); + const productStack = new servicecatalog.ProductStack(mainStack, 'MyProductStackAbsolutePath', { + assetBucket: testAssetBucket, + }); + + new lambda.Function(productStack, 'HelloHandler', { + runtime: lambda.Runtime.PYTHON_3_9, + code: lambda.Code.fromAsset(path.join(__dirname, 'assets')), + handler: 'index.handler', + }); + + // WHEN + const assembly = app.synth(); + + // THEN + expect(assembly.directory).toBe('/tmp/foobar'); + }); + test('Used defined Asset bucket in product stack with nested assets', () => { // GIVEN const app = new cdk.App(