mirror of
https://github.com/actions/setup-go.git
synced 2026-04-06 14:56:56 +00:00
Add `cache-build` input (default: false) to control whether GOCACHE is included in the cache. This dramatically reduces cache size from ~1.2GB to ~200-400MB by excluding build artifacts that have low reuse across code changes. Also upgrades dependencies (@actions/cache v5, semver v7.7) and runtime to node24 to align with upstream actions/setup-go. https://claude.ai/code/session_01CqrWSjzGgd7Zi6LyJkd9XW
104 lines
2.8 KiB
TypeScript
104 lines
2.8 KiB
TypeScript
import * as cache from '@actions/cache';
|
|
import * as core from '@actions/core';
|
|
import * as glob from '@actions/glob';
|
|
|
|
import * as cacheRestore from '../src/cache-restore';
|
|
import * as cacheUtils from '../src/cache-utils';
|
|
import * as hashdir from '../src/hashdir';
|
|
import {PackageManagerInfo} from '../src/package-managers';
|
|
|
|
describe('restoreCache', () => {
|
|
//Arrange
|
|
const hashFilesSpy = jest.spyOn(glob, 'hashFiles');
|
|
const getCacheDirectoryPathSpy = jest.spyOn(
|
|
cacheUtils,
|
|
'getCacheDirectoryPath'
|
|
);
|
|
const restoreCacheSpy = jest.spyOn(cache, 'restoreCache');
|
|
const infoSpy = jest.spyOn(core, 'info');
|
|
const setOutputSpy = jest.spyOn(core, 'setOutput');
|
|
|
|
const versionSpec = '1.13.1';
|
|
const packageManager = 'default';
|
|
const cacheDependencyPath = 'path';
|
|
|
|
const computeMetaHashSpy = jest.spyOn(hashdir, 'computeMetaHash');
|
|
|
|
beforeEach(() => {
|
|
process.env['INPUT_CACHE-BUILD'] = 'false';
|
|
computeMetaHashSpy.mockReturnValue('mock_build_hash');
|
|
getCacheDirectoryPathSpy.mockImplementation(
|
|
(PackageManager: PackageManagerInfo) => {
|
|
return new Promise<string[]>(resolve => {
|
|
resolve(['cache_directory_path', 'cache_directory_path']);
|
|
});
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should throw if dependency file path is not valid', async () => {
|
|
//Arrange
|
|
hashFilesSpy.mockImplementation((somePath: string) => {
|
|
return new Promise<string>(resolve => {
|
|
resolve('');
|
|
});
|
|
});
|
|
|
|
//Act + Assert
|
|
await expect(async () => {
|
|
await cacheRestore.restoreCache(
|
|
versionSpec,
|
|
packageManager,
|
|
cacheDependencyPath
|
|
);
|
|
}).rejects.toThrow(
|
|
'Some specified paths were not resolved, unable to cache dependencies.'
|
|
);
|
|
});
|
|
|
|
it('should inform if cache hit is not occured', async () => {
|
|
//Arrange
|
|
hashFilesSpy.mockImplementation((somePath: string) => {
|
|
return new Promise<string>(resolve => {
|
|
resolve('file_hash');
|
|
});
|
|
});
|
|
|
|
restoreCacheSpy.mockImplementation(() => {
|
|
return new Promise<string>(resolve => {
|
|
resolve('');
|
|
});
|
|
});
|
|
|
|
//Act + Assert
|
|
await cacheRestore.restoreCache(
|
|
versionSpec,
|
|
packageManager,
|
|
cacheDependencyPath
|
|
);
|
|
expect(infoSpy).toHaveBeenCalledWith(`Cache is not found`);
|
|
});
|
|
|
|
it('should set output if cache hit is occured', async () => {
|
|
//Arrange
|
|
hashFilesSpy.mockImplementation((somePath: string) => {
|
|
return new Promise<string>(resolve => {
|
|
resolve('file_hash');
|
|
});
|
|
});
|
|
|
|
restoreCacheSpy.mockImplementation(() => {
|
|
return new Promise<string>(resolve => {
|
|
resolve('cache_key');
|
|
});
|
|
});
|
|
|
|
//Act + Assert
|
|
await cacheRestore.restoreCache(
|
|
versionSpec,
|
|
packageManager,
|
|
cacheDependencyPath
|
|
);
|
|
expect(setOutputSpy).toHaveBeenCalledWith('cache-hit', true);
|
|
});
|
|
});
|