From 9f6221a7631d09c15288b9204ecfa42ad9f0ab54 Mon Sep 17 00:00:00 2001 From: tockn Date: Tue, 25 Apr 2023 23:38:56 +0900 Subject: [PATCH] fix(cdk-assets): fix error that occurs when building assets concurrently by ensuring unique file names during zip file generation. --- packages/cdk-assets/lib/private/archive.ts | 6 +----- packages/cdk-assets/lib/private/handlers/files.ts | 6 +++++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/cdk-assets/lib/private/archive.ts b/packages/cdk-assets/lib/private/archive.ts index 36eedbddbf8e8..17137edfc8d58 100644 --- a/packages/cdk-assets/lib/private/archive.ts +++ b/packages/cdk-assets/lib/private/archive.ts @@ -11,7 +11,7 @@ type Logger = (x: string) => void; export async function zipDirectory(directory: string, outputFile: string, logger: Logger): Promise { // We write to a temporary file and rename at the last moment. This is so that if we are // interrupted during this process, we don't leave a half-finished file in the target location. - const temporaryOutputFile = `${outputFile}.${randomString()}._tmp`; + const temporaryOutputFile = `${outputFile}._tmp`; await writeZipFile(directory, temporaryOutputFile); await moveIntoPlace(temporaryOutputFile, outputFile, logger); } @@ -97,7 +97,3 @@ async function pathExists(x: string) { throw e; } } - -function randomString() { - return Math.random().toString(36).replace(/[^a-z0-9]+/g, ''); -} diff --git a/packages/cdk-assets/lib/private/handlers/files.ts b/packages/cdk-assets/lib/private/handlers/files.ts index da6fbc56c061c..4395ba8e70ef0 100644 --- a/packages/cdk-assets/lib/private/handlers/files.ts +++ b/packages/cdk-assets/lib/private/handlers/files.ts @@ -107,7 +107,7 @@ export class FileAssetHandler implements IAssetHandler { const contentType = 'application/zip'; await fs.mkdir(this.fileCacheRoot, { recursive: true }); - const packagedPath = path.join(this.fileCacheRoot, `${this.asset.id.assetId}.zip`); + const packagedPath = path.join(this.fileCacheRoot, `${this.asset.id.assetId}.${randomString()}.zip`); if (await pathExists(packagedPath)) { this.host.emitMessage(EventType.CACHED, `From cache ${packagedPath}`); @@ -272,3 +272,7 @@ async function cached(cache: Map, key: A, factory: (x: A) => Promise cache.set(key, fresh); return fresh; } + +function randomString() { + return Math.random().toString(36).replace(/[^a-z0-9]+/g, ''); +}