diff --git a/dist/restore/index.js b/dist/restore/index.js index 41fe7f8..597fba0 100644 --- a/dist/restore/index.js +++ b/dist/restore/index.js @@ -87160,34 +87160,6 @@ async function cleanProfileTarget(profileDir, packages, checkTimestamp, incremen return; } let keepProfile = new Set(["build", ".fingerprint", "deps"]); - // Keep the incremental folder if incremental builds are enabled - if (incremental) { - keepProfile.add("incremental"); - // Traverse the incremental folder recursively and collect the modified times in a map - const incrementalDir = external_path_default().join(profileDir, "incremental"); - const modifiedTimes = new Map(); - const fillModifiedTimes = async (dir) => { - const dirEntries = await external_fs_default().promises.opendir(dir); - for await (const dirent of dirEntries) { - if (dirent.isDirectory()) { - await fillModifiedTimes(external_path_default().join(dir, dirent.name)); - } - else { - const fileName = external_path_default().join(dir, dirent.name); - const { mtime } = await external_fs_default().promises.stat(fileName); - modifiedTimes.set(fileName, mtime.getTime()); - } - } - }; - await fillModifiedTimes(incrementalDir); - // Write the modified times to the incremental folder - lib_core.debug(`writing incremental-restore.json for ${incrementalDir} files`); - for (const file of modifiedTimes.keys()) { - lib_core.debug(` ${file} -> ${modifiedTimes.get(file)}`); - } - const contents = JSON.stringify({ modifiedTimes }); - await external_fs_default().promises.writeFile(external_path_default().join(incrementalDir, "incremental-restore.json"), contents); - } await rmExcept(profileDir, keepProfile); const keepPkg = new Set(packages.map((p) => p.name)); await rmExcept(external_path_default().join(profileDir, "build"), keepPkg, checkTimestamp); diff --git a/dist/save/index.js b/dist/save/index.js index c5321ef..41c466e 100644 --- a/dist/save/index.js +++ b/dist/save/index.js @@ -87160,34 +87160,6 @@ async function cleanProfileTarget(profileDir, packages, checkTimestamp, incremen return; } let keepProfile = new Set(["build", ".fingerprint", "deps"]); - // Keep the incremental folder if incremental builds are enabled - if (incremental) { - keepProfile.add("incremental"); - // Traverse the incremental folder recursively and collect the modified times in a map - const incrementalDir = external_path_default().join(profileDir, "incremental"); - const modifiedTimes = new Map(); - const fillModifiedTimes = async (dir) => { - const dirEntries = await external_fs_default().promises.opendir(dir); - for await (const dirent of dirEntries) { - if (dirent.isDirectory()) { - await fillModifiedTimes(external_path_default().join(dir, dirent.name)); - } - else { - const fileName = external_path_default().join(dir, dirent.name); - const { mtime } = await external_fs_default().promises.stat(fileName); - modifiedTimes.set(fileName, mtime.getTime()); - } - } - }; - await fillModifiedTimes(incrementalDir); - // Write the modified times to the incremental folder - lib_core.debug(`writing incremental-restore.json for ${incrementalDir} files`); - for (const file of modifiedTimes.keys()) { - lib_core.debug(` ${file} -> ${modifiedTimes.get(file)}`); - } - const contents = JSON.stringify({ modifiedTimes }); - await external_fs_default().promises.writeFile(external_path_default().join(incrementalDir, "incremental-restore.json"), contents); - } await rmExcept(profileDir, keepProfile); const keepPkg = new Set(packages.map((p) => p.name)); await rmExcept(external_path_default().join(profileDir, "build"), keepPkg, checkTimestamp); @@ -87431,6 +87403,8 @@ async function rmRF(dirName) { + + process.on("uncaughtException", (e) => { lib_core.error(e.message); if (e.stack) { @@ -87455,6 +87429,19 @@ async function run() { if (process.env["RUNNER_OS"] == "macOS") { await macOsWorkaround(); } + // Save the incremental cache before we delete it + if (config.incremental) { + lib_core.info(`... Saving incremental cache ...`); + lib_core.debug(`paths include ${config.incrementalPaths} with key ${config.incrementalKey}`); + for (const paths of config.incrementalPaths) { + await saveIncrementalDirs(paths); + } + await cacheProvider.cache.saveCache(config.incrementalPaths.slice(), config.incrementalKey); + for (const path of config.incrementalPaths) { + lib_core.debug(` deleting ${path}`); + await (0,promises_.rm)(path); + } + } const allPackages = []; for (const workspace of config.workspaces) { const packages = await workspace.getPackagesOutsideWorkspaceRoot(); @@ -87491,15 +87478,6 @@ async function run() { catch (e) { lib_core.debug(`${e.stack}`); } - // Save the incremental cache before we delete it - if (config.incremental) { - lib_core.info(`... Saving incremental cache ...`); - await cacheProvider.cache.saveCache(config.incrementalPaths.slice(), config.incrementalKey); - for (const path of config.incrementalPaths) { - lib_core.debug(` deleting ${path}`); - await (0,promises_.rm)(path); - } - } lib_core.info(`... Saving cache ...`); // Pass a copy of cachePaths to avoid mutating the original array as reported by: // https://github.com/actions/toolkit/pull/1378 @@ -87520,6 +87498,32 @@ async function macOsWorkaround() { } catch { } } +async function saveIncrementalDirs(profileDir) { + // Traverse the incremental folder recursively and collect the modified times in a map + const incrementalDir = external_path_default().join(profileDir, "incremental"); + const modifiedTimes = new Map(); + const fillModifiedTimes = async (dir) => { + const dirEntries = await external_fs_default().promises.opendir(dir); + for await (const dirent of dirEntries) { + if (dirent.isDirectory()) { + await fillModifiedTimes(external_path_default().join(dir, dirent.name)); + } + else { + const fileName = external_path_default().join(dir, dirent.name); + const { mtime } = await external_fs_default().promises.stat(fileName); + modifiedTimes.set(fileName, mtime.getTime()); + } + } + }; + await fillModifiedTimes(incrementalDir); + // Write the modified times to the incremental folder + lib_core.debug(`writing incremental-restore.json for ${incrementalDir} files`); + for (const file of modifiedTimes.keys()) { + lib_core.debug(` ${file} -> ${modifiedTimes.get(file)}`); + } + const contents = JSON.stringify({ modifiedTimes }); + await external_fs_default().promises.writeFile(external_path_default().join(incrementalDir, "incremental-restore.json"), contents); +} })(); diff --git a/src/cleanup.ts b/src/cleanup.ts index b4700b1..55ae995 100644 --- a/src/cleanup.ts +++ b/src/cleanup.ts @@ -57,36 +57,6 @@ async function cleanProfileTarget(profileDir: string, packages: Packages, checkT let keepProfile = new Set(["build", ".fingerprint", "deps"]); - // Keep the incremental folder if incremental builds are enabled - if (incremental) { - keepProfile.add("incremental"); - - // Traverse the incremental folder recursively and collect the modified times in a map - const incrementalDir = path.join(profileDir, "incremental"); - const modifiedTimes = new Map(); - const fillModifiedTimes = async (dir: string) => { - const dirEntries = await fs.promises.opendir(dir); - for await (const dirent of dirEntries) { - if (dirent.isDirectory()) { - await fillModifiedTimes(path.join(dir, dirent.name)); - } else { - const fileName = path.join(dir, dirent.name); - const { mtime } = await fs.promises.stat(fileName); - modifiedTimes.set(fileName, mtime.getTime()); - } - } - }; - await fillModifiedTimes(incrementalDir); - - // Write the modified times to the incremental folder - core.debug(`writing incremental-restore.json for ${incrementalDir} files`); - for (const file of modifiedTimes.keys()) { - core.debug(` ${file} -> ${modifiedTimes.get(file)}`); - } - const contents = JSON.stringify({ modifiedTimes }); - await fs.promises.writeFile(path.join(incrementalDir, "incremental-restore.json"), contents); - } - await rmExcept(profileDir, keepProfile); diff --git a/src/save.ts b/src/save.ts index b91beeb..8aaf170 100644 --- a/src/save.ts +++ b/src/save.ts @@ -5,6 +5,8 @@ import { cleanBin, cleanGit, cleanRegistry, cleanTargetDir } from "./cleanup"; import { CacheConfig, isCacheUpToDate } from "./config"; import { getCacheProvider, reportError } from "./utils"; import { rm } from "fs/promises"; +import fs from "fs"; +import path from "path"; process.on("uncaughtException", (e) => { core.error(e.message); @@ -37,6 +39,20 @@ async function run() { await macOsWorkaround(); } + // Save the incremental cache before we delete it + if (config.incremental) { + core.info(`... Saving incremental cache ...`); + core.debug(`paths include ${config.incrementalPaths} with key ${config.incrementalKey}`); + for (const paths of config.incrementalPaths) { + await saveIncrementalDirs(paths); + } + await cacheProvider.cache.saveCache(config.incrementalPaths.slice(), config.incrementalKey); + for (const path of config.incrementalPaths) { + core.debug(` deleting ${path}`); + await rm(path); + } + } + const allPackages = []; for (const workspace of config.workspaces) { const packages = await workspace.getPackagesOutsideWorkspaceRoot(); @@ -73,16 +89,6 @@ async function run() { core.debug(`${(e as any).stack}`); } - // Save the incremental cache before we delete it - if (config.incremental) { - core.info(`... Saving incremental cache ...`); - await cacheProvider.cache.saveCache(config.incrementalPaths.slice(), config.incrementalKey); - for (const path of config.incrementalPaths) { - core.debug(` deleting ${path}`); - await rm(path); - } - } - core.info(`... Saving cache ...`); // Pass a copy of cachePaths to avoid mutating the original array as reported by: // https://github.com/actions/toolkit/pull/1378 @@ -104,3 +110,32 @@ async function macOsWorkaround() { await exec.exec("sudo", ["/usr/sbin/purge"], { silent: true }); } catch { } } + + +async function saveIncrementalDirs(profileDir: string) { + // Traverse the incremental folder recursively and collect the modified times in a map + const incrementalDir = path.join(profileDir, "incremental"); + const modifiedTimes = new Map(); + const fillModifiedTimes = async (dir: string) => { + const dirEntries = await fs.promises.opendir(dir); + for await (const dirent of dirEntries) { + if (dirent.isDirectory()) { + await fillModifiedTimes(path.join(dir, dirent.name)); + } else { + const fileName = path.join(dir, dirent.name); + const { mtime } = await fs.promises.stat(fileName); + modifiedTimes.set(fileName, mtime.getTime()); + } + } + }; + await fillModifiedTimes(incrementalDir); + + // Write the modified times to the incremental folder + core.debug(`writing incremental-restore.json for ${incrementalDir} files`); + for (const file of modifiedTimes.keys()) { + core.debug(` ${file} -> ${modifiedTimes.get(file)}`); + } + const contents = JSON.stringify({ modifiedTimes }); + await fs.promises.writeFile(path.join(incrementalDir, "incremental-restore.json"), contents); + +}