mirror of
				https://github.com/actions/cache.git
				synced 2025-10-31 20:08:36 +08:00 
			
		
		
		
	Add unit tests for restore
This commit is contained in:
		
							parent
							
								
									31ddebcb66
								
							
						
					
					
						commit
						fb677d1324
					
				|  | @ -1,22 +0,0 @@ | ||||||
| import * as core from "@actions/core"; |  | ||||||
| 
 |  | ||||||
| import { Inputs } from "../src/constants"; |  | ||||||
| import run from "../src/restore"; |  | ||||||
| import * as testUtils from "../src/utils/testUtils"; |  | ||||||
| 
 |  | ||||||
| test("restore with no path", async () => { |  | ||||||
|     const failedMock = jest.spyOn(core, "setFailed"); |  | ||||||
|     await run(); |  | ||||||
|     expect(failedMock).toHaveBeenCalledWith( |  | ||||||
|         "Input required and not supplied: path" |  | ||||||
|     ); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| test("restore with no key", async () => { |  | ||||||
|     testUtils.setInput(Inputs.Path, "node_modules"); |  | ||||||
|     const failedMock = jest.spyOn(core, "setFailed"); |  | ||||||
|     await run(); |  | ||||||
|     expect(failedMock).toHaveBeenCalledWith( |  | ||||||
|         "Input required and not supplied: key" |  | ||||||
|     ); |  | ||||||
| }); |  | ||||||
							
								
								
									
										336
									
								
								__tests__/restore.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										336
									
								
								__tests__/restore.test.ts
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,336 @@ | ||||||
|  | import * as core from "@actions/core"; | ||||||
|  | import * as exec from "@actions/exec"; | ||||||
|  | import * as io from "@actions/io"; | ||||||
|  | 
 | ||||||
|  | import * as path from "path"; | ||||||
|  | 
 | ||||||
|  | import * as cacheHttpClient from "../src/cacheHttpClient"; | ||||||
|  | import { Inputs } from "../src/constants"; | ||||||
|  | import { ArtifactCacheEntry } from "../src/contracts"; | ||||||
|  | import run from "../src/restore"; | ||||||
|  | import * as actionUtils from "../src/utils/actionUtils"; | ||||||
|  | import * as testUtils from "../src/utils/testUtils"; | ||||||
|  | 
 | ||||||
|  | jest.mock("@actions/exec"); | ||||||
|  | jest.mock("@actions/io"); | ||||||
|  | jest.mock("../src/utils/actionUtils"); | ||||||
|  | jest.mock("../src/cacheHttpClient"); | ||||||
|  | 
 | ||||||
|  | beforeAll(() => { | ||||||
|  |     jest.spyOn(actionUtils, "resolvePath").mockImplementation(filePath => { | ||||||
|  |         return path.resolve(filePath); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     jest.spyOn(actionUtils, "isExactKeyMatch").mockImplementation( | ||||||
|  |         (key, cacheResult) => { | ||||||
|  |             const actualUtils = jest.requireActual("../src/utils/actionUtils"); | ||||||
|  |             return actualUtils.isExactKeyMatch(key, cacheResult); | ||||||
|  |         } | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     jest.spyOn(io, "which").mockImplementation(tool => { | ||||||
|  |         return Promise.resolve(tool); | ||||||
|  |     }); | ||||||
|  | }); | ||||||
|  | afterEach(() => { | ||||||
|  |     testUtils.clearInputs(); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("restore with no path", async () => { | ||||||
|  |     const failedMock = jest.spyOn(core, "setFailed"); | ||||||
|  |     await run(); | ||||||
|  |     expect(failedMock).toHaveBeenCalledWith( | ||||||
|  |         "Input required and not supplied: path" | ||||||
|  |     ); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("restore with no key", async () => { | ||||||
|  |     testUtils.setInput(Inputs.Path, "node_modules"); | ||||||
|  |     const failedMock = jest.spyOn(core, "setFailed"); | ||||||
|  |     await run(); | ||||||
|  |     expect(failedMock).toHaveBeenCalledWith( | ||||||
|  |         "Input required and not supplied: key" | ||||||
|  |     ); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("restore with too many keys", async () => { | ||||||
|  |     const key = "node-test"; | ||||||
|  |     const restoreKeys = [...Array(20).keys()].map(x => x.toString()); | ||||||
|  |     testUtils.setInputs({ | ||||||
|  |         path: "node_modules", | ||||||
|  |         key, | ||||||
|  |         restoreKeys | ||||||
|  |     }); | ||||||
|  |     const failedMock = jest.spyOn(core, "setFailed"); | ||||||
|  |     await run(); | ||||||
|  |     expect(failedMock).toHaveBeenCalledWith( | ||||||
|  |         `Key Validation Error: Keys are limited to a maximum of 10.` | ||||||
|  |     ); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("restore with large key", async () => { | ||||||
|  |     const key = "foo".repeat(512); // Over the 512 character limit
 | ||||||
|  |     testUtils.setInputs({ | ||||||
|  |         path: "node_modules", | ||||||
|  |         key | ||||||
|  |     }); | ||||||
|  |     const failedMock = jest.spyOn(core, "setFailed"); | ||||||
|  |     await run(); | ||||||
|  |     expect(failedMock).toHaveBeenCalledWith( | ||||||
|  |         `Key Validation Error: ${key} cannot be larger than 512 characters.` | ||||||
|  |     ); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("restore with invalid key", async () => { | ||||||
|  |     const key = "comma,comma"; | ||||||
|  |     testUtils.setInputs({ | ||||||
|  |         path: "node_modules", | ||||||
|  |         key | ||||||
|  |     }); | ||||||
|  |     const failedMock = jest.spyOn(core, "setFailed"); | ||||||
|  |     await run(); | ||||||
|  |     expect(failedMock).toHaveBeenCalledWith( | ||||||
|  |         `Key Validation Error: ${key} cannot contain commas.` | ||||||
|  |     ); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("restore with no cache found", async () => { | ||||||
|  |     const key = "node-test"; | ||||||
|  |     testUtils.setInputs({ | ||||||
|  |         path: "node_modules", | ||||||
|  |         key | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     const infoMock = jest.spyOn(core, "info"); | ||||||
|  |     const warningMock = jest.spyOn(core, "warning"); | ||||||
|  |     const failedMock = jest.spyOn(core, "setFailed"); | ||||||
|  |     const stateMock = jest.spyOn(core, "saveState"); | ||||||
|  | 
 | ||||||
|  |     const clientMock = jest.spyOn(cacheHttpClient, "getCacheEntry"); | ||||||
|  |     clientMock.mockImplementation(_ => { | ||||||
|  |         return Promise.resolve(null); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     await run(); | ||||||
|  | 
 | ||||||
|  |     expect(stateMock).toHaveBeenCalledWith("CACHE_KEY", key); | ||||||
|  |     expect(warningMock).toHaveBeenCalledTimes(0); | ||||||
|  |     expect(failedMock).toHaveBeenCalledTimes(0); | ||||||
|  | 
 | ||||||
|  |     expect(infoMock).toHaveBeenCalledWith( | ||||||
|  |         `Cache not found for input keys: ${key}.` | ||||||
|  |     ); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("restore with no server error", async () => { | ||||||
|  |     const key = "node-test"; | ||||||
|  |     testUtils.setInputs({ | ||||||
|  |         path: "node_modules", | ||||||
|  |         key | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     const warningMock = jest.spyOn(core, "warning"); | ||||||
|  |     const failedMock = jest.spyOn(core, "setFailed"); | ||||||
|  |     const stateMock = jest.spyOn(core, "saveState"); | ||||||
|  | 
 | ||||||
|  |     const clientMock = jest.spyOn(cacheHttpClient, "getCacheEntry"); | ||||||
|  |     clientMock.mockImplementation(_ => { | ||||||
|  |         throw new Error("HTTP Error Occurred"); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     const setCacheHitOutputMock = jest.spyOn(actionUtils, "setCacheHitOutput"); | ||||||
|  | 
 | ||||||
|  |     await run(); | ||||||
|  | 
 | ||||||
|  |     expect(stateMock).toHaveBeenCalledWith("CACHE_KEY", key); | ||||||
|  | 
 | ||||||
|  |     expect(warningMock).toHaveBeenCalledTimes(1); | ||||||
|  |     expect(warningMock).toHaveBeenCalledWith("HTTP Error Occurred"); | ||||||
|  | 
 | ||||||
|  |     expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1); | ||||||
|  |     expect(setCacheHitOutputMock).toHaveBeenCalledWith(false); | ||||||
|  | 
 | ||||||
|  |     expect(failedMock).toHaveBeenCalledTimes(0); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("restore with restore keys no cache found", async () => { | ||||||
|  |     const key = "node-test"; | ||||||
|  |     const restoreKey = "node-"; | ||||||
|  |     testUtils.setInputs({ | ||||||
|  |         path: "node_modules", | ||||||
|  |         key, | ||||||
|  |         restoreKeys: [restoreKey] | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     const infoMock = jest.spyOn(core, "info"); | ||||||
|  |     const warningMock = jest.spyOn(core, "warning"); | ||||||
|  |     const failedMock = jest.spyOn(core, "setFailed"); | ||||||
|  |     const stateMock = jest.spyOn(core, "saveState"); | ||||||
|  | 
 | ||||||
|  |     const clientMock = jest.spyOn(cacheHttpClient, "getCacheEntry"); | ||||||
|  |     clientMock.mockImplementation(_ => { | ||||||
|  |         return Promise.resolve(null); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     await run(); | ||||||
|  | 
 | ||||||
|  |     expect(stateMock).toHaveBeenCalledWith("CACHE_KEY", key); | ||||||
|  |     expect(warningMock).toHaveBeenCalledTimes(0); | ||||||
|  |     expect(failedMock).toHaveBeenCalledTimes(0); | ||||||
|  | 
 | ||||||
|  |     expect(infoMock).toHaveBeenCalledWith( | ||||||
|  |         `Cache not found for input keys: ${key}, ${restoreKey}.` | ||||||
|  |     ); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("restore with cache found", async () => { | ||||||
|  |     const key = "node-test"; | ||||||
|  |     const cachePath = path.resolve("node_modules"); | ||||||
|  |     testUtils.setInputs({ | ||||||
|  |         path: "node_modules", | ||||||
|  |         key | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     const infoMock = jest.spyOn(core, "info"); | ||||||
|  |     const warningMock = jest.spyOn(core, "warning"); | ||||||
|  |     const failedMock = jest.spyOn(core, "setFailed"); | ||||||
|  |     const stateMock = jest.spyOn(core, "saveState"); | ||||||
|  | 
 | ||||||
|  |     const cacheEntry: ArtifactCacheEntry = { | ||||||
|  |         cacheKey: key, | ||||||
|  |         scope: "refs/heads/master", | ||||||
|  |         archiveLocation: "https://www.example.com/download" | ||||||
|  |     }; | ||||||
|  |     const getCacheMock = jest.spyOn(cacheHttpClient, "getCacheEntry"); | ||||||
|  |     getCacheMock.mockImplementation(_ => { | ||||||
|  |         return Promise.resolve(cacheEntry); | ||||||
|  |     }); | ||||||
|  |     const tempPath = "/foo/bar"; | ||||||
|  | 
 | ||||||
|  |     const createTempDirectoryMock = jest.spyOn( | ||||||
|  |         actionUtils, | ||||||
|  |         "createTempDirectory" | ||||||
|  |     ); | ||||||
|  |     createTempDirectoryMock.mockImplementation(() => { | ||||||
|  |         return Promise.resolve(tempPath); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     const archivePath = path.join(tempPath, "cache.tgz"); | ||||||
|  |     const setCacheStateMock = jest.spyOn(actionUtils, "setCacheState"); | ||||||
|  |     const downloadCacheMock = jest.spyOn(cacheHttpClient, "downloadCache"); | ||||||
|  | 
 | ||||||
|  |     const fileSize = 142; | ||||||
|  |     const getArchiveFileSizeMock = jest | ||||||
|  |         .spyOn(actionUtils, "getArchiveFileSize") | ||||||
|  |         .mockReturnValue(fileSize); | ||||||
|  | 
 | ||||||
|  |     const mkdirMock = jest.spyOn(io, "mkdirP"); | ||||||
|  |     const execMock = jest.spyOn(exec, "exec"); | ||||||
|  |     const setCacheHitOutputMock = jest.spyOn(actionUtils, "setCacheHitOutput"); | ||||||
|  | 
 | ||||||
|  |     await run(); | ||||||
|  | 
 | ||||||
|  |     expect(stateMock).toHaveBeenCalledWith("CACHE_KEY", key); | ||||||
|  |     expect(getCacheMock).toHaveBeenCalledWith([key]); | ||||||
|  |     expect(setCacheStateMock).toHaveBeenCalledWith(cacheEntry); | ||||||
|  |     expect(createTempDirectoryMock).toHaveBeenCalledTimes(1); | ||||||
|  |     expect(downloadCacheMock).toHaveBeenCalledWith(cacheEntry, archivePath); | ||||||
|  |     expect(getArchiveFileSizeMock).toHaveBeenCalledWith(archivePath); | ||||||
|  |     expect(mkdirMock).toHaveBeenCalledWith(cachePath); | ||||||
|  | 
 | ||||||
|  |     const IS_WINDOWS = process.platform === "win32"; | ||||||
|  |     const tarArchivePath = IS_WINDOWS | ||||||
|  |         ? archivePath.replace(/\\/g, "/") | ||||||
|  |         : archivePath; | ||||||
|  |     const tarCachePath = IS_WINDOWS ? cachePath.replace(/\\/g, "/") : cachePath; | ||||||
|  |     const args = IS_WINDOWS ? ["-xz", "--force-local"] : ["-xz"]; | ||||||
|  |     args.push(...["-f", tarArchivePath, "-C", tarCachePath]); | ||||||
|  | 
 | ||||||
|  |     expect(execMock).toHaveBeenCalledTimes(1); | ||||||
|  |     expect(execMock).toHaveBeenCalledWith(`"tar"`, args); | ||||||
|  | 
 | ||||||
|  |     expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1); | ||||||
|  |     expect(setCacheHitOutputMock).toHaveBeenCalledWith(true); | ||||||
|  | 
 | ||||||
|  |     expect(infoMock).toHaveBeenCalledWith(`Cache restored from key: ${key}`); | ||||||
|  |     expect(warningMock).toHaveBeenCalledTimes(0); | ||||||
|  |     expect(failedMock).toHaveBeenCalledTimes(0); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("restore with cache found for restore key", async () => { | ||||||
|  |     const key = "node-test"; | ||||||
|  |     const restoreKey = "node-"; | ||||||
|  |     const cachePath = path.resolve("node_modules"); | ||||||
|  |     testUtils.setInputs({ | ||||||
|  |         path: "node_modules", | ||||||
|  |         key, | ||||||
|  |         restoreKeys: [restoreKey] | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     const infoMock = jest.spyOn(core, "info"); | ||||||
|  |     const warningMock = jest.spyOn(core, "warning"); | ||||||
|  |     const failedMock = jest.spyOn(core, "setFailed"); | ||||||
|  |     const stateMock = jest.spyOn(core, "saveState"); | ||||||
|  | 
 | ||||||
|  |     const cacheEntry: ArtifactCacheEntry = { | ||||||
|  |         cacheKey: restoreKey, | ||||||
|  |         scope: "refs/heads/master", | ||||||
|  |         archiveLocation: "https://www.example.com/download" | ||||||
|  |     }; | ||||||
|  |     const getCacheMock = jest.spyOn(cacheHttpClient, "getCacheEntry"); | ||||||
|  |     getCacheMock.mockImplementation(_ => { | ||||||
|  |         return Promise.resolve(cacheEntry); | ||||||
|  |     }); | ||||||
|  |     const tempPath = "/foo/bar"; | ||||||
|  | 
 | ||||||
|  |     const createTempDirectoryMock = jest.spyOn( | ||||||
|  |         actionUtils, | ||||||
|  |         "createTempDirectory" | ||||||
|  |     ); | ||||||
|  |     createTempDirectoryMock.mockImplementation(() => { | ||||||
|  |         return Promise.resolve(tempPath); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     const archivePath = path.join(tempPath, "cache.tgz"); | ||||||
|  |     const setCacheStateMock = jest.spyOn(actionUtils, "setCacheState"); | ||||||
|  |     const downloadCacheMock = jest.spyOn(cacheHttpClient, "downloadCache"); | ||||||
|  | 
 | ||||||
|  |     const fileSize = 142; | ||||||
|  |     const getArchiveFileSizeMock = jest | ||||||
|  |         .spyOn(actionUtils, "getArchiveFileSize") | ||||||
|  |         .mockReturnValue(fileSize); | ||||||
|  | 
 | ||||||
|  |     const mkdirMock = jest.spyOn(io, "mkdirP"); | ||||||
|  |     const execMock = jest.spyOn(exec, "exec"); | ||||||
|  |     const setCacheHitOutputMock = jest.spyOn(actionUtils, "setCacheHitOutput"); | ||||||
|  | 
 | ||||||
|  |     await run(); | ||||||
|  | 
 | ||||||
|  |     expect(stateMock).toHaveBeenCalledWith("CACHE_KEY", key); | ||||||
|  |     expect(getCacheMock).toHaveBeenCalledWith([key, restoreKey]); | ||||||
|  |     expect(setCacheStateMock).toHaveBeenCalledWith(cacheEntry); | ||||||
|  |     expect(createTempDirectoryMock).toHaveBeenCalledTimes(1); | ||||||
|  |     expect(downloadCacheMock).toHaveBeenCalledWith(cacheEntry, archivePath); | ||||||
|  |     expect(getArchiveFileSizeMock).toHaveBeenCalledWith(archivePath); | ||||||
|  |     expect(mkdirMock).toHaveBeenCalledWith(cachePath); | ||||||
|  | 
 | ||||||
|  |     const IS_WINDOWS = process.platform === "win32"; | ||||||
|  |     const tarArchivePath = IS_WINDOWS | ||||||
|  |         ? archivePath.replace(/\\/g, "/") | ||||||
|  |         : archivePath; | ||||||
|  |     const tarCachePath = IS_WINDOWS ? cachePath.replace(/\\/g, "/") : cachePath; | ||||||
|  |     const args = IS_WINDOWS ? ["-xz", "--force-local"] : ["-xz"]; | ||||||
|  |     args.push(...["-f", tarArchivePath, "-C", tarCachePath]); | ||||||
|  | 
 | ||||||
|  |     expect(execMock).toHaveBeenCalledTimes(1); | ||||||
|  |     expect(execMock).toHaveBeenCalledWith(`"tar"`, args); | ||||||
|  | 
 | ||||||
|  |     expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1); | ||||||
|  |     expect(setCacheHitOutputMock).toHaveBeenCalledWith(false); | ||||||
|  | 
 | ||||||
|  |     expect(infoMock).toHaveBeenCalledWith( | ||||||
|  |         `Cache restored from key: ${restoreKey}` | ||||||
|  |     ); | ||||||
|  |     expect(warningMock).toHaveBeenCalledTimes(0); | ||||||
|  |     expect(failedMock).toHaveBeenCalledTimes(0); | ||||||
|  | }); | ||||||
							
								
								
									
										99
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										99
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							|  | @ -517,6 +517,15 @@ | ||||||
|       "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", |       "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "@types/nock": { | ||||||
|  |       "version": "11.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@types/nock/-/nock-11.1.0.tgz", | ||||||
|  |       "integrity": "sha512-jI/ewavBQ7X5178262JQR0ewicPAcJhXS/iFaNJl0VHLfyosZ/kwSrsa6VNQNSO8i9d8SqdRgOtZSOKJ/+iNMw==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "nock": "*" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "@types/node": { |     "@types/node": { | ||||||
|       "version": "12.6.9", |       "version": "12.6.9", | ||||||
|       "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.9.tgz", |       "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.9.tgz", | ||||||
|  | @ -674,6 +683,12 @@ | ||||||
|       "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", |       "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "assertion-error": { | ||||||
|  |       "version": "1.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", | ||||||
|  |       "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "assign-symbols": { |     "assign-symbols": { | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", | ||||||
|  | @ -984,6 +999,20 @@ | ||||||
|       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", |       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "chai": { | ||||||
|  |       "version": "4.2.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", | ||||||
|  |       "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "assertion-error": "^1.1.0", | ||||||
|  |         "check-error": "^1.0.2", | ||||||
|  |         "deep-eql": "^3.0.1", | ||||||
|  |         "get-func-name": "^2.0.0", | ||||||
|  |         "pathval": "^1.1.0", | ||||||
|  |         "type-detect": "^4.0.5" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "chalk": { |     "chalk": { | ||||||
|       "version": "2.4.2", |       "version": "2.4.2", | ||||||
|       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", |       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", | ||||||
|  | @ -995,6 +1024,12 @@ | ||||||
|         "supports-color": "^5.3.0" |         "supports-color": "^5.3.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "check-error": { | ||||||
|  |       "version": "1.0.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", | ||||||
|  |       "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "ci-info": { |     "ci-info": { | ||||||
|       "version": "2.0.0", |       "version": "2.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", |       "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", | ||||||
|  | @ -1234,6 +1269,15 @@ | ||||||
|       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", |       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "deep-eql": { | ||||||
|  |       "version": "3.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", | ||||||
|  |       "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "type-detect": "^4.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "deep-is": { |     "deep-is": { | ||||||
|       "version": "0.1.3", |       "version": "0.1.3", | ||||||
|       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", |       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", | ||||||
|  | @ -2261,6 +2305,12 @@ | ||||||
|       "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", |       "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "get-func-name": { | ||||||
|  |       "version": "2.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", | ||||||
|  |       "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "get-stream": { |     "get-stream": { | ||||||
|       "version": "4.1.0", |       "version": "4.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", |       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", | ||||||
|  | @ -3675,6 +3725,37 @@ | ||||||
|       "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", |       "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "nock": { | ||||||
|  |       "version": "11.7.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/nock/-/nock-11.7.0.tgz", | ||||||
|  |       "integrity": "sha512-7c1jhHew74C33OBeRYyQENT+YXQiejpwIrEjinh6dRurBae+Ei4QjeUaPlkptIF0ZacEiVCnw8dWaxqepkiihg==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "chai": "^4.1.2", | ||||||
|  |         "debug": "^4.1.0", | ||||||
|  |         "json-stringify-safe": "^5.0.1", | ||||||
|  |         "lodash": "^4.17.13", | ||||||
|  |         "mkdirp": "^0.5.0", | ||||||
|  |         "propagate": "^2.0.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "debug": { | ||||||
|  |           "version": "4.1.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", | ||||||
|  |           "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "ms": "^2.1.1" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "ms": { | ||||||
|  |           "version": "2.1.2", | ||||||
|  |           "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | ||||||
|  |           "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", | ||||||
|  |           "dev": true | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node-int64": { |     "node-int64": { | ||||||
|       "version": "0.4.0", |       "version": "0.4.0", | ||||||
|       "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", |       "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", | ||||||
|  | @ -4017,6 +4098,12 @@ | ||||||
|         "pify": "^3.0.0" |         "pify": "^3.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "pathval": { | ||||||
|  |       "version": "1.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", | ||||||
|  |       "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "performance-now": { |     "performance-now": { | ||||||
|       "version": "2.1.0", |       "version": "2.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", |       "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", | ||||||
|  | @ -4090,6 +4177,12 @@ | ||||||
|         "sisteransi": "^1.0.0" |         "sisteransi": "^1.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "propagate": { | ||||||
|  |       "version": "2.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", | ||||||
|  |       "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "psl": { |     "psl": { | ||||||
|       "version": "1.3.0", |       "version": "1.3.0", | ||||||
|       "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", |       "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", | ||||||
|  | @ -4965,6 +5058,12 @@ | ||||||
|         "prelude-ls": "~1.1.2" |         "prelude-ls": "~1.1.2" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "type-detect": { | ||||||
|  |       "version": "4.0.8", | ||||||
|  |       "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", | ||||||
|  |       "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "typed-rest-client": { |     "typed-rest-client": { | ||||||
|       "version": "1.5.0", |       "version": "1.5.0", | ||||||
|       "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.5.0.tgz", |       "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.5.0.tgz", | ||||||
|  |  | ||||||
|  | @ -31,11 +31,13 @@ | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@types/jest": "^24.0.13", |     "@types/jest": "^24.0.13", | ||||||
|  |     "@types/nock": "^11.1.0", | ||||||
|     "@types/node": "^12.0.4", |     "@types/node": "^12.0.4", | ||||||
|     "@types/uuid": "^3.4.5", |     "@types/uuid": "^3.4.5", | ||||||
|     "@zeit/ncc": "^0.20.5", |     "@zeit/ncc": "^0.20.5", | ||||||
|     "jest": "^24.8.0", |     "jest": "^24.8.0", | ||||||
|     "jest-circus": "^24.7.1", |     "jest-circus": "^24.7.1", | ||||||
|  |     "nock": "^11.7.0", | ||||||
|     "prettier": "1.18.2", |     "prettier": "1.18.2", | ||||||
|     "ts-jest": "^24.0.2", |     "ts-jest": "^24.0.2", | ||||||
|     "typescript": "^3.6.4" |     "typescript": "^3.6.4" | ||||||
|  |  | ||||||
|  | @ -1,3 +1,6 @@ | ||||||
|  | import { Inputs } from "../constants"; | ||||||
|  | 
 | ||||||
|  | // See: https://github.com/actions/toolkit/blob/master/packages/core/src/core.ts#L67
 | ||||||
| function getInputName(name: string): string { | function getInputName(name: string): string { | ||||||
|     return `INPUT_${name.replace(/ /g, "_").toUpperCase()}`; |     return `INPUT_${name.replace(/ /g, "_").toUpperCase()}`; | ||||||
| } | } | ||||||
|  | @ -5,3 +8,22 @@ function getInputName(name: string): string { | ||||||
| export function setInput(name: string, value: string) { | export function setInput(name: string, value: string) { | ||||||
|     process.env[getInputName(name)] = value; |     process.env[getInputName(name)] = value; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | interface CacheInput { | ||||||
|  |     path: string; | ||||||
|  |     key: string; | ||||||
|  |     restoreKeys?: string[]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function setInputs(input: CacheInput) { | ||||||
|  |     setInput(Inputs.Path, input.path); | ||||||
|  |     setInput(Inputs.Key, input.key); | ||||||
|  |     input.restoreKeys && | ||||||
|  |         setInput(Inputs.RestoreKeys, input.restoreKeys.join("\n")); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function clearInputs() { | ||||||
|  |     delete process.env[getInputName(Inputs.Path)]; | ||||||
|  |     delete process.env[getInputName(Inputs.Key)]; | ||||||
|  |     delete process.env[getInputName(Inputs.RestoreKeys)]; | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Josh Gross
						Josh Gross