Extract cache key generation into common function

This commit is contained in:
Daz DeBoer 2021-09-05 17:10:47 -06:00
parent 0ecbac99f3
commit d7ed6d7e8d
No known key found for this signature in database
GPG key ID: DD6B9F0B06683D5D
3 changed files with 42 additions and 34 deletions

View file

@ -4,11 +4,10 @@ import os from 'os'
import * as core from '@actions/core' import * as core from '@actions/core'
import * as cache from '@actions/cache' import * as cache from '@actions/cache'
import * as github from '@actions/github'
import { import {
generateCacheKey,
isCacheReadEnabled, isCacheReadEnabled,
isCacheSaveEnabled, isCacheSaveEnabled
truncateArgs
} from './cache-utils' } from './cache-utils'
const CACHE_NAME = 'gradle-user-home' const CACHE_NAME = 'gradle-user-home'
@ -28,21 +27,15 @@ export async function restore(): Promise<void> {
return return
} }
const cacheKeySeed = process.env[`CACHE_KEY_SEED`] || '' const cacheKey = generateCacheKey('gradle')
const runnerOs = process.env[`RUNNER_OS`] || ''
const cacheKeyPrefix = `${cacheKeySeed}${runnerOs}|gradle|`
const args = truncateArgs(core.getInput('arguments')) core.saveState(CACHE_KEY, cacheKey.key)
const cacheKeyWithArgs = `${cacheKeyPrefix}${args}|`
const cacheKey = `${cacheKeyWithArgs}${github.context.sha}` const cacheResult = await cache.restoreCache(
CACHE_PATH,
core.saveState(CACHE_KEY, cacheKey) cacheKey.key,
cacheKey.restoreKeys
const cacheResult = await cache.restoreCache(CACHE_PATH, cacheKey, [ )
cacheKeyWithArgs,
cacheKeyPrefix
])
if (!cacheResult) { if (!cacheResult) {
core.info( core.info(

View file

@ -3,11 +3,10 @@ import fs from 'fs'
import * as core from '@actions/core' import * as core from '@actions/core'
import * as cache from '@actions/cache' import * as cache from '@actions/cache'
import * as github from '@actions/github'
import { import {
generateCacheKey,
isCacheReadEnabled, isCacheReadEnabled,
isCacheSaveEnabled, isCacheSaveEnabled
truncateArgs
} from './cache-utils' } from './cache-utils'
const CACHE_NAME = 'project-dot-gradle' const CACHE_NAME = 'project-dot-gradle'
@ -27,21 +26,14 @@ export async function restore(rootDir: string): Promise<void> {
return return
} }
const cacheKeySeed = process.env[`CACHE_KEY_SEED`] || '' const cacheKey = generateCacheKey('project')
const runnerOs = process.env[`RUNNER_OS`] || ''
const cacheKeyPrefix = `${cacheKeySeed}${runnerOs}|project|`
const args = truncateArgs(core.getInput('arguments')) core.saveState(CACHE_KEY, cacheKey.key)
const cacheKeyWithArgs = `${cacheKeyPrefix}${args}|`
const cacheKey = `${cacheKeyWithArgs}${github.context.sha}`
core.saveState(CACHE_KEY, cacheKey)
const cacheResult = await cache.restoreCache( const cacheResult = await cache.restoreCache(
getCachePath(rootDir), getCachePath(rootDir),
cacheKey, cacheKey.key,
[cacheKeyWithArgs, cacheKeyPrefix] cacheKey.restoreKeys
) )
if (!cacheResult) { if (!cacheResult) {

View file

@ -1,8 +1,5 @@
import * as core from '@actions/core' import * as core from '@actions/core'
import * as github from '@actions/github'
export function truncateArgs(args: string): string {
return args.trim().replace(/\s+/g, ' ').substr(0, 400)
}
export function isCacheReadEnabled(cacheName: string): boolean { export function isCacheReadEnabled(cacheName: string): boolean {
const configValue = getCacheEnabledValue(cacheName) const configValue = getCacheEnabledValue(cacheName)
@ -26,3 +23,29 @@ function getCacheEnabledValue(cacheName: string): string {
`Invalid cache-enabled parameter '${configValue}'. Valid values are ['true', 'false', 'read-only']` `Invalid cache-enabled parameter '${configValue}'. Valid values are ['true', 'false', 'read-only']`
) )
} }
export function generateCacheKey(cacheName: string): CacheKey {
const cacheKeySeed = process.env[`CACHE_KEY_SEED`] || ''
const runnerOs = process.env[`RUNNER_OS`] || ''
const cacheKeyPrefix = `${cacheKeySeed}${runnerOs}|${cacheName}|`
const args = truncateArgs(core.getInput('arguments'))
const cacheKeyWithArgs = `${cacheKeyPrefix}${args}|`
const cacheKey = `${cacheKeyWithArgs}${github.context.sha}`
return new CacheKey(cacheKey, [cacheKeyWithArgs, cacheKeyPrefix])
}
function truncateArgs(args: string): string {
return args.trim().replace(/\s+/g, ' ').substr(0, 400)
}
export class CacheKey {
key: string
restoreKeys: string[]
constructor(key: string, restoreKeys: string[]) {
this.key = key
this.restoreKeys = restoreKeys
}
}