Skip to content

Commit

Permalink
extend cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
mryzhov committed Sep 25, 2024
1 parent a6a6f8e commit c48c9bd
Show file tree
Hide file tree
Showing 11 changed files with 5,422 additions and 4,141 deletions.
63 changes: 62 additions & 1 deletion .github/actions/cache/__tests__/cleanup.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,12 @@ const getInputMock = jest.spyOn(core, 'getInput').mockImplementation();
const setFailedMock = jest.spyOn(core, 'setFailed').mockImplementation();

const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'test-cleanup-'));
const cacheRemotePath = path.join(tempDir, 'cache_remote');
const cacheRemotePath = path.join(
tempDir,
'subdir_1',
'subdir_2',
'cache_remote'
);

const cacheFiles = ['cache_1.cache', 'cache_2.cache', 'cache_3.cache'];
const minAccessTime = 7 * 24 * 60 * 60 * 1000; // 1 week
Expand Down Expand Up @@ -283,4 +288,60 @@ describe('cleanup', () => {
// check that sub directory exists
expect(fs.existsSync(cacheSubPath)).toBe(true);
});

it('Cleanup directory with subdirectories and files (recursive=true)', async () => {
const cacheSubPath = path.join(tempDir, 'subdir_1');
// Set the action's inputs as return values from core.getInput()
getInputMock.mockImplementation(name => {
switch (name) {
case 'cache-path':
return cacheSubPath;
case 'restore-keys':
return 'cache';
case 'cache-size':
return 1;
case 'recursive':
return true;
default:
return '';
}
});

await cleanupImpl.cleanUp();

expect(runMock).toHaveReturned();
// cache2 and cache3 should be removed
for (const cache of cacheFiles.slice(1, 2)) {
expect(fs.existsSync(path.join(cacheRemotePath, cache))).toBe(false);
}
// check that file1 exists
expect(fs.existsSync(path.join(cacheRemotePath, cacheFiles[0]))).toBe(true);
});

it('Cleanup directory with subdirectories and files (recursive=false)', async () => {
const cacheSubPath = path.join(tempDir, 'subdir_1');
// Set the action's inputs as return values from core.getInput()
getInputMock.mockImplementation(name => {
switch (name) {
case 'cache-path':
return cacheSubPath;
case 'restore-keys':
return 'cache';
case 'cache-size':
return 1;
case 'recursive':
return false;
default:
return '';
}
});

await cleanupImpl.cleanUp();

expect(runMock).toHaveReturned();
// cache2 and cache3 should be removed
for (const cache of cacheFiles) {
expect(fs.existsSync(path.join(cacheRemotePath, cache))).toBe(true);
}
});
});
6 changes: 5 additions & 1 deletion .github/actions/cache/__tests__/save.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,11 @@ describe('save', () => {

it('Cache files: absent remote cache dir', async () => {
// Set the action's inputs as return values from core.getInput()
const cacheRemotePathAbsent = path.join(tempDir, 'cache_remote_absent');
const cacheRemotePathAbsent = path.join(
tempDir,
'cache_remote_absent',
'subdir'
);
getInputMock.mockImplementation(name => {
switch (name) {
case 'cache-path':
Expand Down
4 changes: 4 additions & 0 deletions .github/actions/cache/cleanup/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ inputs:
evicted to limit the total cache storage'
default: 50
required: false
recursive:
description: 'Scan the current directory only or all subdirectories'
default: false
required: false

runs:
using: 'node20'
Expand Down
Loading

0 comments on commit c48c9bd

Please sign in to comment.