mirror of
https://github.com/actions/setup-python.git
synced 2025-06-28 05:33:47 +00:00
update cacheDependencies tests to cover resolved paths and copy edge cases
This commit is contained in:
parent
b641d7d6ce
commit
566d40e37b
3 changed files with 63 additions and 23 deletions
|
@ -119,4 +119,31 @@ describe('cacheDependencies', () => {
|
||||||
expect(mockedCore.warning).not.toHaveBeenCalled();
|
expect(mockedCore.warning).not.toHaveBeenCalled();
|
||||||
expect(mockRestoreCache).toHaveBeenCalled();
|
expect(mockRestoreCache).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('does not copy if dependency file is already inside the workspace but still sets resolved path', async () => {
|
||||||
|
// Simulate cacheDependencyPath inside workspace
|
||||||
|
mockedCore.getInput.mockReturnValue('deps.lock');
|
||||||
|
|
||||||
|
// Override sourcePath and targetPath to be equal
|
||||||
|
const actionPath = '/github/workspace'; // same path for action and workspace
|
||||||
|
process.env.GITHUB_ACTION_PATH = actionPath;
|
||||||
|
process.env.GITHUB_WORKSPACE = actionPath;
|
||||||
|
|
||||||
|
// access resolves to simulate file exists
|
||||||
|
mockedFsPromises.access.mockResolvedValue();
|
||||||
|
|
||||||
|
await cacheDependencies('pip', '3.12');
|
||||||
|
|
||||||
|
const sourcePath = path.resolve(actionPath, 'deps.lock');
|
||||||
|
const targetPath = sourcePath; // same path
|
||||||
|
|
||||||
|
expect(mockedFsPromises.copyFile).not.toHaveBeenCalled();
|
||||||
|
expect(mockedCore.info).toHaveBeenCalledWith(
|
||||||
|
`Dependency file is already inside the workspace: ${sourcePath}`
|
||||||
|
);
|
||||||
|
expect(mockedCore.info).toHaveBeenCalledWith(
|
||||||
|
`Resolved cache-dependency-path: deps.lock`
|
||||||
|
);
|
||||||
|
expect(mockRestoreCache).toHaveBeenCalled();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
11
dist/setup/index.js
vendored
11
dist/setup/index.js
vendored
|
@ -96939,7 +96939,8 @@ function cacheDependencies(cache, pythonVersion) {
|
||||||
if (!sourceExists) {
|
if (!sourceExists) {
|
||||||
core.warning(`The resolved cache-dependency-path does not exist: ${sourcePath}`);
|
core.warning(`The resolved cache-dependency-path does not exist: ${sourcePath}`);
|
||||||
}
|
}
|
||||||
else if (sourcePath !== targetPath) {
|
else {
|
||||||
|
if (sourcePath !== targetPath) {
|
||||||
const targetDir = path.dirname(targetPath);
|
const targetDir = path.dirname(targetPath);
|
||||||
// Create target directory if it doesn't exist
|
// Create target directory if it doesn't exist
|
||||||
yield fs_1.default.promises.mkdir(targetDir, { recursive: true });
|
yield fs_1.default.promises.mkdir(targetDir, { recursive: true });
|
||||||
|
@ -96947,14 +96948,20 @@ function cacheDependencies(cache, pythonVersion) {
|
||||||
yield fs_1.default.promises.copyFile(sourcePath, targetPath);
|
yield fs_1.default.promises.copyFile(sourcePath, targetPath);
|
||||||
core.info(`Copied ${sourcePath} to ${targetPath}`);
|
core.info(`Copied ${sourcePath} to ${targetPath}`);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
core.info(`Dependency file is already inside the workspace: ${sourcePath}`);
|
||||||
|
}
|
||||||
resolvedDependencyPath = path.relative(workspace, targetPath);
|
resolvedDependencyPath = path.relative(workspace, targetPath);
|
||||||
core.info(`Resolved cache-dependency-path: ${resolvedDependencyPath}`);
|
core.info(`Resolved cache-dependency-path: ${resolvedDependencyPath}`);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
core.warning(`Failed to copy file from ${sourcePath} to ${targetPath}: ${error}`);
|
core.warning(`Failed to copy file from ${sourcePath} to ${targetPath}: ${error}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const cacheDistributor = (0, cache_factory_1.getCacheDistributor)(cache, pythonVersion, cacheDependencyPath);
|
// Pass resolvedDependencyPath if available, else fallback to original input
|
||||||
|
const dependencyPathForCache = resolvedDependencyPath !== null && resolvedDependencyPath !== void 0 ? resolvedDependencyPath : cacheDependencyPath;
|
||||||
|
const cacheDistributor = (0, cache_factory_1.getCacheDistributor)(cache, pythonVersion, dependencyPathForCache);
|
||||||
yield cacheDistributor.restoreCache();
|
yield cacheDistributor.restoreCache();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,19 +44,22 @@ export async function cacheDependencies(cache: string, pythonVersion: string) {
|
||||||
core.warning(
|
core.warning(
|
||||||
`The resolved cache-dependency-path does not exist: ${sourcePath}`
|
`The resolved cache-dependency-path does not exist: ${sourcePath}`
|
||||||
);
|
);
|
||||||
} else if (sourcePath !== targetPath) {
|
} else {
|
||||||
|
if (sourcePath !== targetPath) {
|
||||||
const targetDir = path.dirname(targetPath);
|
const targetDir = path.dirname(targetPath);
|
||||||
|
|
||||||
// Create target directory if it doesn't exist
|
// Create target directory if it doesn't exist
|
||||||
await fs.promises.mkdir(targetDir, {recursive: true});
|
await fs.promises.mkdir(targetDir, {recursive: true});
|
||||||
|
|
||||||
// Copy file asynchronously
|
// Copy file asynchronously
|
||||||
await fs.promises.copyFile(sourcePath, targetPath);
|
await fs.promises.copyFile(sourcePath, targetPath);
|
||||||
core.info(`Copied ${sourcePath} to ${targetPath}`);
|
core.info(`Copied ${sourcePath} to ${targetPath}`);
|
||||||
|
} else {
|
||||||
|
core.info(
|
||||||
|
`Dependency file is already inside the workspace: ${sourcePath}`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
resolvedDependencyPath = path.relative(workspace, targetPath);
|
resolvedDependencyPath = path.relative(workspace, targetPath);
|
||||||
core.info(`Resolved cache-dependency-path: ${resolvedDependencyPath}`);
|
core.info(`Resolved cache-dependency-path: ${resolvedDependencyPath}`);
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.warning(
|
core.warning(
|
||||||
`Failed to copy file from ${sourcePath} to ${targetPath}: ${error}`
|
`Failed to copy file from ${sourcePath} to ${targetPath}: ${error}`
|
||||||
|
@ -64,10 +67,13 @@ export async function cacheDependencies(cache: string, pythonVersion: string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pass resolvedDependencyPath if available, else fallback to original input
|
||||||
|
const dependencyPathForCache = resolvedDependencyPath ?? cacheDependencyPath;
|
||||||
|
|
||||||
const cacheDistributor = getCacheDistributor(
|
const cacheDistributor = getCacheDistributor(
|
||||||
cache,
|
cache,
|
||||||
pythonVersion,
|
pythonVersion,
|
||||||
cacheDependencyPath
|
dependencyPathForCache
|
||||||
);
|
);
|
||||||
await cacheDistributor.restoreCache();
|
await cacheDistributor.restoreCache();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue