GA for granular cache (#1035)

* Add example for Haskell Stack

* Revert "Add example for Haskell Stack"

* Basic implementation

* Updated variable name

* Adding wrapper class

* Changed logs to warnings

* added debug logs

* experimenting

* Test

* test

* new try

* test

* Impl separated

* Reverted wrapper changes

* Added test cases

* Some cleanup

* Formatted document

* Fixed test cases issues

* Slight modification for test cases check

* Updated new actions' input descriptions

* Reverted custom asks implemented and added wrapper

* refactor into a generic outputter

* Readme draft for new actions

* Generated dist

* Fixed breaking test case

* Removed return type in promise

* Removed commented lines

* Calling methods from same file

* dist

* update save as well

* fix merge

* Changes for beta release

* Update dist folder

* Fixed formatting

* dist

* Add support for gzip fallback for restore of old cache on windows

* Fixed test cases

* Fixed test cases

* Added restore only and save only test cases

* Updated new actions dist files

* Removed comments

* Fixed inputs

* Renamed variables and added tests

* Fixed breaking test case

* Fixed review comments and tests

* added stateprovider changes

* Deleted stateprovider tests until added

* Added stateprovider test cases

* Fixed breaking test case

* Updated outputs of restore action

* Changes for beta release

* Update dist folder

* Add support for gzip fallback for restore of old cache on windows

* update for new beta release

* Update save/action.yml

Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>

* Update restore/action.yml

Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>

* Update restore/action.yml

Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>

* Update restore/action.yml

Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>

* Update restore/action.yml

Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>

* Added more assertions as values can't be checked

* Removed unused code

* Merged beta branch and resolved conflicts

* Added save readme

* Updates to save readme

* Renamed output

* Added cache hit info in readme

* Update restore/README.md

Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>

* Update restore/README.md

Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>

* Update restore/README.md

Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>

* Update save/README.md

Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>

* Update save/README.md

Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>

* Removed verbose statements

* Repositioned new actions introduction

* Added test case for restore state

* Addressed review comments

* nit

* nit: added language to code blocks

* Updated beta version to 3.2.0-beta.1

* Added stateprovider mock implementations

* Linting errors fixed

* Save-only warning added

* Updated return ID to -2

* Removed -2 error code

* Removed comment

* Updated cache npm lib version

* Updated license version

* Updated releases.md

* Updated readme with the new actions in what's new

Co-authored-by: Malo Bourgon <mbourgon@gmail.com>
Co-authored-by: Vipul <vsvipul@github.com>
Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>
Co-authored-by: Tanuj Kumar Mishra <tanuj077@users.noreply.github.com>
Co-authored-by: Sampark Sharma <phantsure@github.com>
This commit is contained in:
Sankalp Kotewar 2022-12-21 19:38:44 +05:30 committed by GitHub
parent ac25611cae
commit c17f4bf466
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 128697 additions and 6094 deletions

View file

@ -1,7 +1,7 @@
import * as cache from "@actions/cache";
import * as core from "@actions/core";
import { Events, Outputs, RefKey, State } from "../src/constants";
import { Events, RefKey } from "../src/constants";
import * as actionUtils from "../src/utils/actionUtils";
import * as testUtils from "../src/utils/testUtils";
@ -79,83 +79,6 @@ test("isExactKeyMatch with same key and different casing returns true", () => {
expect(actionUtils.isExactKeyMatch(key, cacheKey)).toBe(true);
});
test("setOutputAndState with undefined entry to set cache-hit output", () => {
const key = "linux-rust";
const cacheKey = undefined;
const setOutputMock = jest.spyOn(core, "setOutput");
const saveStateMock = jest.spyOn(core, "saveState");
actionUtils.setOutputAndState(key, cacheKey);
expect(setOutputMock).toHaveBeenCalledWith(Outputs.CacheHit, "false");
expect(setOutputMock).toHaveBeenCalledTimes(1);
expect(saveStateMock).toHaveBeenCalledTimes(0);
});
test("setOutputAndState with exact match to set cache-hit output and state", () => {
const key = "linux-rust";
const cacheKey = "linux-rust";
const setOutputMock = jest.spyOn(core, "setOutput");
const saveStateMock = jest.spyOn(core, "saveState");
actionUtils.setOutputAndState(key, cacheKey);
expect(setOutputMock).toHaveBeenCalledWith(Outputs.CacheHit, "true");
expect(setOutputMock).toHaveBeenCalledTimes(1);
expect(saveStateMock).toHaveBeenCalledWith(State.CacheMatchedKey, cacheKey);
expect(saveStateMock).toHaveBeenCalledTimes(1);
});
test("setOutputAndState with no exact match to set cache-hit output and state", () => {
const key = "linux-rust";
const cacheKey = "linux-rust-bb828da54c148048dd17899ba9fda624811cfb43";
const setOutputMock = jest.spyOn(core, "setOutput");
const saveStateMock = jest.spyOn(core, "saveState");
actionUtils.setOutputAndState(key, cacheKey);
expect(setOutputMock).toHaveBeenCalledWith(Outputs.CacheHit, "false");
expect(setOutputMock).toHaveBeenCalledTimes(1);
expect(saveStateMock).toHaveBeenCalledWith(State.CacheMatchedKey, cacheKey);
expect(saveStateMock).toHaveBeenCalledTimes(1);
});
test("getCacheState with no state returns undefined", () => {
const getStateMock = jest.spyOn(core, "getState");
getStateMock.mockImplementation(() => {
return "";
});
const state = actionUtils.getCacheState();
expect(state).toBe(undefined);
expect(getStateMock).toHaveBeenCalledWith(State.CacheMatchedKey);
expect(getStateMock).toHaveBeenCalledTimes(1);
});
test("getCacheState with valid state", () => {
const cacheKey = "Linux-node-bb828da54c148048dd17899ba9fda624811cfb43";
const getStateMock = jest.spyOn(core, "getState");
getStateMock.mockImplementation(() => {
return cacheKey;
});
const state = actionUtils.getCacheState();
expect(state).toEqual(cacheKey);
expect(getStateMock).toHaveBeenCalledWith(State.CacheMatchedKey);
expect(getStateMock).toHaveBeenCalledTimes(1);
});
test("logWarning logs a message with a warning prefix", () => {
const message = "A warning occurred.";