From 8803852c7aadf56771f537dc33ffd51c14830f50 Mon Sep 17 00:00:00 2001 From: OrbitZore Date: Wed, 10 Jan 2024 02:09:38 +0800 Subject: [PATCH] feat(archive): skip nsis compression step when archive is already up to date (#7971) --- .changeset/forty-hats-press.md | 5 +++++ packages/app-builder-lib/src/targets/archive.ts | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 .changeset/forty-hats-press.md diff --git a/.changeset/forty-hats-press.md b/.changeset/forty-hats-press.md new file mode 100644 index 0000000000..0dcff1396c --- /dev/null +++ b/.changeset/forty-hats-press.md @@ -0,0 +1,5 @@ +--- +"app-builder-lib": patch +--- + +feat(archive): skip archive when destination file is already up to date diff --git a/packages/app-builder-lib/src/targets/archive.ts b/packages/app-builder-lib/src/targets/archive.ts index 3bf60f8216..30fdc5c0fe 100644 --- a/packages/app-builder-lib/src/targets/archive.ts +++ b/packages/app-builder-lib/src/targets/archive.ts @@ -1,5 +1,5 @@ import { debug7z, exec, log } from "builder-util" -import { exists, unlinkIfExists } from "builder-util/out/fs" +import { exists, unlinkIfExists, statOrNull } from "builder-util/out/fs" import { move } from "fs-extra" import * as path from "path" import { create, CreateOptions, FileOptions } from "tar" @@ -203,6 +203,12 @@ export function computeZipCompressArgs(options: ArchiveOptions = {}) { // 7z is very fast, so, use ultra compression /** @internal */ export async function archive(format: string, outFile: string, dirToArchive: string, options: ArchiveOptions = {}): Promise { + const outFileStat = await statOrNull(outFile) + const dirStat = await statOrNull(dirToArchive) + if (outFileStat && dirStat && outFileStat.mtime > dirStat.mtime) { + log.info({ reason: "Archive file is up to date", outFile }, `skipped archiving`) + return outFile + } let use7z = true if (process.platform === "darwin" && format === "zip" && dirToArchive.normalize("NFC") !== dirToArchive) { log.warn({ reason: "7z doesn't support NFD-normalized filenames" }, `using zip`)