diff --git a/dist/setup/index.js b/dist/setup/index.js index af35fb6..eea6899 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -88402,28 +88402,29 @@ function cacheWindowsDir(extPath, tool, version, arch) { for (const cachePath of actualCacheDirectoryPaths) { core.info(`Trying to link ${cachePath.defaultPath} to ${cachePath.actualPath}`); try { - if (!fs_1.default.existsSync(cachePath.defaultPath)) { - core.info(`Default path ${cachePath.defaultPath} does not exist`); - core.info(`Creating directory ${cachePath.defaultPath}`); - fs_1.default.mkdirSync(cachePath.defaultPath, { recursive: true }); - } - if (!fs_1.default.existsSync(cachePath.actualPath)) { - core.info(`Actual path ${cachePath.actualPath} does not exist. Safe to create symlink`); - } - else { - core.info(`Actual path ${cachePath.actualPath} already exists. Skipping symlink creation`); + // the symlink already exists, skip + const stats = fs_1.default.lstatSync(cachePath.defaultPath); + if (fs_1.default.existsSync(cachePath.defaultPath) && stats.isSymbolicLink()) { + core.info(`Directory ${cachePath.defaultPath} already linked. Skipping`); continue; } - // check if the default path is a symlink - const isSymlink = fs_1.default.lstatSync(cachePath.defaultPath).isSymbolicLink(); - if (isSymlink) { - core.info(`Default path is symlink ${cachePath.defaultPath} => ${fs_1.default.readlinkSync(cachePath.defaultPath)}`); + // the directory is empty, delete it to be able to create a symlink + if (stats.size == 0) { + fs_1.default.rmSync(cachePath.defaultPath, { recursive: true, force: true }); } else { - core.info(`Default path is not a symlink ${cachePath.defaultPath}`); - fs_1.default.symlinkSync(cachePath.actualPath, cachePath.defaultPath, 'junction'); - core.info(`Created link ${cachePath.defaultPath} => ${cachePath.actualPath}`); + core.info(`Directory ${cachePath.defaultPath} is not empty. Skipping`); + continue; } + // create a parent directory where the link will be created + fs_1.default.mkdirSync(path.dirname(cachePath.defaultPath), { recursive: true }); + // create the target directory if it doesn't exist yet + if (!fs_1.default.existsSync(cachePath.actualPath)) { + core.info(`Actual path ${cachePath.actualPath} does not exist. Creating`); + fs_1.default.mkdirSync(cachePath.actualPath, { recursive: true }); + } + fs_1.default.symlinkSync(cachePath.actualPath, cachePath.defaultPath, 'junction'); + core.info(`Created link ${cachePath.defaultPath} => ${cachePath.actualPath}`); } catch (err) { core.info(`Failed to link ${cachePath.defaultPath} to ${cachePath.actualPath}`); diff --git a/src/installer.ts b/src/installer.ts index 1935d0c..6157b42 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -237,9 +237,18 @@ async function cacheWindowsDir( core.info(`Trying to link ${cachePath.defaultPath} to ${cachePath.actualPath}`); try { // the symlink already exists, skip - if (fs.existsSync(cachePath.defaultPath) && fs.lstatSync(cachePath.defaultPath).isSymbolicLink()) { + const stats = fs.lstatSync(cachePath.defaultPath); + if (fs.existsSync(cachePath.defaultPath) && stats.isSymbolicLink()) { + core.info(`Directory ${cachePath.defaultPath} already linked. Skipping`); continue } + // the directory is empty, delete it to be able to create a symlink + if (stats.size == 0) { + fs.rmSync(cachePath.defaultPath, {recursive: true, force: true}); + } else { + core.info(`Directory ${cachePath.defaultPath} is not empty. Skipping`); + continue; + } // create a parent directory where the link will be created fs.mkdirSync(path.dirname(cachePath.defaultPath), {recursive: true});