diff --git a/README.md b/README.md index c02eb6c9..9d99eb41 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Currently, the following distributions are supported: ### Caching packages dependencies The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under hood for caching dependencies but requires less configuration settings. Supported package managers are gradle and maven. The format of the used cache key is `setup-java-${{ platform }}-${{ packageManager }}-${{ fileHash }}`, where the hash is based on the following files: -- gradle: `**/*.gradle*`, `**/gradle-wrapper.properties` +- gradle: `**/*.gradle*`, `**/gradle-wrapper.properties`, `**/versions.properties` - maven: `**/pom.xml` The cache input is optional, and caching is turned off by default. diff --git a/__tests__/cache.test.ts b/__tests__/cache.test.ts index b748e802..f5ce29e0 100644 --- a/__tests__/cache.test.ts +++ b/__tests__/cache.test.ts @@ -98,7 +98,7 @@ describe('dependency cache', () => { await expect(restore('gradle')).rejects.toThrowError( `No file in ${projectRoot( workspace - )} matched to [**/*.gradle*,**/gradle-wrapper.properties], make sure you have checked out the target repository` + )} matched to [**/*.gradle*,**/gradle-wrapper.properties, versions.properties], make sure you have checked out the target repository` ); }); it('downloads cache based on build.gradle', async () => { @@ -118,6 +118,14 @@ describe('dependency cache', () => { expect(spyInfo).toBeCalledWith('gradle cache is not found'); }); }); + it('downloads cache based on versions.properties', async () => { + createFile(join(workspace, 'versions.properties')); + + await restore('gradle'); + expect(spyCacheRestore).toBeCalled(); + expect(spyWarning).not.toBeCalled(); + expect(spyInfo).toBeCalledWith('gradle cache is not found'); + }); }); describe('save', () => { let spyCacheSave: jest.SpyInstance< @@ -188,6 +196,15 @@ describe('dependency cache', () => { createFile(join(workspace, 'build.gradle.kts')); createStateForSuccessfulRestore(); + await save('gradle'); + expect(spyCacheSave).toBeCalled(); + expect(spyWarning).not.toBeCalled(); + expect(spyInfo).toBeCalledWith(expect.stringMatching(/^Cache saved with the key:.*/)); + }); + it('uploads cache based on versions.properties', async () => { + createFile(join(workspace, 'versions.properties')); + createStateForSuccessfulRestore(); + await save('gradle'); expect(spyCacheSave).toBeCalled(); expect(spyWarning).not.toBeCalled(); @@ -195,51 +212,50 @@ describe('dependency cache', () => { }); }); }); -}); -function resetState() { - jest.spyOn(core, 'getState').mockReset(); -} - -/** - * Create states to emulate a restore process without build file. - */ -function createStateForMissingBuildFile() { - jest.spyOn(core, 'getState').mockImplementation(name => { - switch (name) { - case 'cache-primary-key': - return 'setup-java-cache-'; - default: - return ''; - } - }); -} - -/** - * Create states to emulate a successful restore process. - */ -function createStateForSuccessfulRestore() { - jest.spyOn(core, 'getState').mockImplementation(name => { - switch (name) { - case 'cache-primary-key': - return 'setup-java-cache-primary-key'; - case 'cache-matched-key': - return 'setup-java-cache-matched-key'; - default: - return ''; - } - }); -} - -function createFile(path: string) { - core.info(`created a file at ${path}`); - fs.writeFileSync(path, ''); -} - -function projectRoot(workspace: string): string { - if (os.platform() === 'darwin') { - return `/private${workspace}`; - } else { - return workspace; + function resetState() { + jest.spyOn(core, 'getState').mockReset(); + } + + /** + * Create states to emulate a restore process without build file. + */ + function createStateForMissingBuildFile() { + jest.spyOn(core, 'getState').mockImplementation(name => { + switch (name) { + case 'cache-primary-key': + return 'setup-java-cache-'; + default: + return ''; + } + }); + } + + /** + * Create states to emulate a successful restore process. + */ + function createStateForSuccessfulRestore() { + jest.spyOn(core, 'getState').mockImplementation(name => { + switch (name) { + case 'cache-primary-key': + return 'setup-java-cache-primary-key'; + case 'cache-matched-key': + return 'setup-java-cache-matched-key'; + default: + return ''; + } + }); + } + + function createFile(path: string) { + core.info(`created a file at ${path}`); + fs.writeFileSync(path, ''); + } + + function projectRoot(workspace: string): string { + if (os.platform() === 'darwin') { + return `/private${workspace}`; + } else { + return workspace; + } } -} diff --git a/dist/cleanup/index.js b/dist/cleanup/index.js index 0a204726..6919d4ce 100644 --- a/dist/cleanup/index.js +++ b/dist/cleanup/index.js @@ -61833,7 +61833,7 @@ const supportedPackageManager = [ id: 'gradle', path: [path_1.join(os_1.default.homedir(), '.gradle', 'caches'), path_1.join(os_1.default.homedir(), '.gradle', 'wrapper')], // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---gradle - pattern: ['**/*.gradle*', '**/gradle-wrapper.properties'] + pattern: ['**/*.gradle*', '**/gradle-wrapper.properties', '**/versions.properties'] } ]; function findPackageManager(id) { diff --git a/dist/setup/index.js b/dist/setup/index.js index 34b866d8..16570afe 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -18624,7 +18624,7 @@ const supportedPackageManager = [ id: 'gradle', path: [path_1.join(os_1.default.homedir(), '.gradle', 'caches'), path_1.join(os_1.default.homedir(), '.gradle', 'wrapper')], // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---gradle - pattern: ['**/*.gradle*', '**/gradle-wrapper.properties'] + pattern: ['**/*.gradle*', '**/gradle-wrapper.properties', '**/versions.properties'] } ]; function findPackageManager(id) { diff --git a/src/cache.ts b/src/cache.ts index fb97fb0b..f31baefb 100644 --- a/src/cache.ts +++ b/src/cache.ts @@ -31,7 +31,7 @@ const supportedPackageManager: PackageManager[] = [ id: 'gradle', path: [join(os.homedir(), '.gradle', 'caches'), join(os.homedir(), '.gradle', 'wrapper')], // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---gradle - pattern: ['**/*.gradle*', '**/gradle-wrapper.properties'] + pattern: ['**/*.gradle*', '**/gradle-wrapper.properties', '**/versions.properties'] } ];