mirror of
				https://github.com/actions/cache.git
				synced 2025-11-04 00:10:55 +00:00 
			
		
		
		
	refactor into a generic outputter
This commit is contained in:
		
					parent
					
						
							
								706c369cf1
							
						
					
				
			
			
				commit
				
					
						d95c048983
					
				
			
		
					 4 changed files with 36 additions and 30 deletions
				
			
		
							
								
								
									
										16
									
								
								src/outputSetter.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/outputSetter.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					import * as core from "@actions/core";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IOutputSetter {
 | 
				
			||||||
 | 
					    setOutput(key: string, value: string): void;
 | 
				
			||||||
 | 
					    setState(key: string, value: string): void;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class StateOutputSetter implements IOutputSetter {
 | 
				
			||||||
 | 
					    setOutput = core.setOutput;
 | 
				
			||||||
 | 
					    setState = core.saveState;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class NonStateOuputSetter implements IOutputSetter {
 | 
				
			||||||
 | 
					    setOutput = core.setOutput;
 | 
				
			||||||
 | 
					    setState = core.setOutput;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,22 +1,8 @@
 | 
				
			||||||
import * as core from "@actions/core";
 | 
					import { StateOutputSetter } from "./outputSetter";
 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Inputs } from "./constants";
 | 
					 | 
				
			||||||
import run from "./restoreImpl";
 | 
					import run from "./restoreImpl";
 | 
				
			||||||
import * as utils from "./utils/actionUtils";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function restore(): Promise<void> {
 | 
					async function restore(): Promise<void> {
 | 
				
			||||||
    const cacheKey = await run();
 | 
					    await run(new StateOutputSetter());
 | 
				
			||||||
    if (cacheKey) {
 | 
					 | 
				
			||||||
        // Store the matched cache key in states
 | 
					 | 
				
			||||||
        utils.setCacheState(cacheKey);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const isExactKeyMatch = utils.isExactKeyMatch(
 | 
					 | 
				
			||||||
            core.getInput(Inputs.Key, { required: true }),
 | 
					 | 
				
			||||||
            cacheKey
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
        utils.setCacheHitOutput(isExactKeyMatch);
 | 
					 | 
				
			||||||
        core.info(`Cache restored from key: ${cacheKey}`);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default restore;
 | 
					export default restore;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,11 @@
 | 
				
			||||||
import * as cache from "@actions/cache";
 | 
					import * as cache from "@actions/cache";
 | 
				
			||||||
import * as core from "@actions/core";
 | 
					import * as core from "@actions/core";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Events, Inputs, State } from "./constants";
 | 
					import { Events, Inputs, Outputs, State } from "./constants";
 | 
				
			||||||
 | 
					import { IOutputSetter } from "./outputSetter";
 | 
				
			||||||
import * as utils from "./utils/actionUtils";
 | 
					import * as utils from "./utils/actionUtils";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function run(): Promise<string | undefined> {
 | 
					async function run(outputter: IOutputSetter): Promise<string | undefined> {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
        if (!utils.isCacheFeatureAvailable()) {
 | 
					        if (!utils.isCacheFeatureAvailable()) {
 | 
				
			||||||
            utils.setCacheHitOutput(false);
 | 
					            utils.setCacheHitOutput(false);
 | 
				
			||||||
| 
						 | 
					@ -22,7 +23,7 @@ async function run(): Promise<string | undefined> {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const primaryKey = core.getInput(Inputs.Key, { required: true });
 | 
					        const primaryKey = core.getInput(Inputs.Key, { required: true });
 | 
				
			||||||
        core.saveState(State.CachePrimaryKey, primaryKey);
 | 
					        outputter.setState(State.CachePrimaryKey, primaryKey);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const restoreKeys = utils.getInputAsArray(Inputs.RestoreKeys);
 | 
					        const restoreKeys = utils.getInputAsArray(Inputs.RestoreKeys);
 | 
				
			||||||
        const cachePaths = utils.getInputAsArray(Inputs.Path, {
 | 
					        const cachePaths = utils.getInputAsArray(Inputs.Path, {
 | 
				
			||||||
| 
						 | 
					@ -46,6 +47,18 @@ async function run(): Promise<string | undefined> {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Store the matched cache key in states
 | 
				
			||||||
 | 
					        //utils.setCacheState(cacheKey);
 | 
				
			||||||
 | 
					        outputter.setState(State.CacheMatchedKey, cacheKey);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const isExactKeyMatch = utils.isExactKeyMatch(
 | 
				
			||||||
 | 
					            core.getInput(Inputs.Key, { required: true }),
 | 
				
			||||||
 | 
					            cacheKey
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        //utils.setCacheHitOutput(isExactKeyMatch);
 | 
				
			||||||
 | 
					        outputter.setOutput(Outputs.CacheHit, isExactKeyMatch.toString());
 | 
				
			||||||
 | 
					        core.info(`Cache restored from key: ${cacheKey}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return cacheKey;
 | 
					        return cacheKey;
 | 
				
			||||||
    } catch (error: unknown) {
 | 
					    } catch (error: unknown) {
 | 
				
			||||||
        core.setFailed((error as Error).message);
 | 
					        core.setFailed((error as Error).message);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,17 +1,8 @@
 | 
				
			||||||
import * as core from "@actions/core";
 | 
					import { NonStateOuputSetter } from "./outputSetter";
 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Outputs } from "./constants";
 | 
					 | 
				
			||||||
import run from "./restoreImpl";
 | 
					import run from "./restoreImpl";
 | 
				
			||||||
import * as utils from "./utils/actionUtils";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function restoreOnly(): Promise<void> {
 | 
					async function restoreOnly(): Promise<void> {
 | 
				
			||||||
    const cacheKey = await run();
 | 
					    await run(new NonStateOuputSetter());
 | 
				
			||||||
    if (cacheKey) {
 | 
					 | 
				
			||||||
        // Store the matched cache key in output
 | 
					 | 
				
			||||||
        core.setOutput(Outputs.Key, utils.getCacheState());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        core.info(`Cache restored from key: ${cacheKey}`);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default restoreOnly;
 | 
					export default restoreOnly;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue