Cache wrapper installation

This commit is contained in:
Paul Merlin 2020-06-13 16:02:48 +02:00
parent 9675f09de6
commit 1c1db193aa
5 changed files with 55 additions and 11 deletions

2
dist/main/index.js vendored

File diff suppressed because one or more lines are too long

2
dist/post/index.js vendored

File diff suppressed because one or more lines are too long

View file

@ -1,9 +1,11 @@
import * as core from '@actions/core' import * as core from '@actions/core'
import * as cache from '@actions/cache'
import * as path from 'path' import * as path from 'path'
import * as fs from 'fs' import * as fs from 'fs'
const WRAPPER_CACHE_KEY = 'WRAPPER_CACHE_KEY' const WRAPPER_CACHE_KEY = 'WRAPPER_CACHE_KEY'
const WRAPPER_CACHE_PATH = 'WRAPPER_CACHE_PATH' const WRAPPER_CACHE_PATH = 'WRAPPER_CACHE_PATH'
const WRAPPER_CACHE_RESULT = 'WRAPPER_CACHE_RESULT'
export async function restoreCachedWrapperDist( export async function restoreCachedWrapperDist(
executableDirectory: string executableDirectory: string
@ -14,21 +16,63 @@ export async function restoreCachedWrapperDist(
'gradle/wrapper/gradle-wrapper.properties' 'gradle/wrapper/gradle-wrapper.properties'
) )
) )
if (!wrapperSlug) return
const wrapperCacheKey = `wrapper-${wrapperSlug}` const wrapperCacheKey = `wrapper-${wrapperSlug}`
const wrapperCachePath = path.join( const wrapperCachePath = path.join(
process.env.HOME!, process.env.HOME!,
`.gradle/wrapper/dists/gradle-${wrapperSlug}` `.gradle/wrapper/dists/gradle-${wrapperSlug}`
) )
core.info(`${WRAPPER_CACHE_KEY} = ${wrapperCacheKey}`)
core.info(`${WRAPPER_CACHE_PATH} = ${wrapperCachePath}`)
core.saveState(WRAPPER_CACHE_KEY, wrapperCacheKey) core.saveState(WRAPPER_CACHE_KEY, wrapperCacheKey)
core.saveState(WRAPPER_CACHE_PATH, wrapperCachePath) core.saveState(WRAPPER_CACHE_PATH, wrapperCachePath)
const restoredKey = await cache.restoreCache(
[wrapperCachePath],
wrapperCacheKey
)
if (!restoredKey) {
core.info(
'Wrapper installation cache not found, expect a Gradle distribution download.'
)
return
}
core.saveState(WRAPPER_CACHE_RESULT, restoredKey)
core.info(`Wrapper installation restored from cache key: ${restoredKey}`)
return return
} }
export async function cacheWrapperDist(): Promise<void> { export async function cacheWrapperDist(): Promise<void> {
core.info(`${WRAPPER_CACHE_KEY} = ${core.getState(WRAPPER_CACHE_KEY)}`) const cacheKey = core.getState(WRAPPER_CACHE_KEY)
core.info(`${WRAPPER_CACHE_PATH} = ${core.getState(WRAPPER_CACHE_PATH)}`) const cachePath = core.getState(WRAPPER_CACHE_PATH)
const cacheResult = core.getState(WRAPPER_CACHE_RESULT)
if (!cachePath) {
core.debug('No wrapper installation to cache.')
return
}
if (cacheResult && cacheKey === cacheResult) {
core.info(
`Wrapper installation cache hit occurred on the cache key ${cacheKey}, not saving cache.`
)
return
}
try {
await cache.saveCache([cachePath], cacheKey)
} catch (error) {
if (error.name === cache.ValidationError.name) {
throw error
} else if (error.name === cache.ReserveCacheError.name) {
core.info(error.message)
} else {
core.info(`[warning] ${error.message}`)
}
}
return return
} }

View file

@ -56,9 +56,11 @@ async function resolveGradleExecutable(baseDirectory: string): Promise<string> {
function resolveBuildRootDirectory(baseDirectory: string): string { function resolveBuildRootDirectory(baseDirectory: string): string {
const buildRootDirectory = inputOrNull('build-root-directory') const buildRootDirectory = inputOrNull('build-root-directory')
return buildRootDirectory === null const resolvedBuildRootDirectory =
buildRootDirectory === null
? path.resolve(baseDirectory) ? path.resolve(baseDirectory)
: path.resolve(baseDirectory, buildRootDirectory) : path.resolve(baseDirectory, buildRootDirectory)
return resolvedBuildRootDirectory
} }
function parseCommandLineArguments(): string[] { function parseCommandLineArguments(): string[] {

View file

@ -1,9 +1,7 @@
import * as core from '@actions/core'
import * as cache from './cache' import * as cache from './cache'
// Invoked by GitHub Actions // Invoked by GitHub Actions
export async function run(): Promise<void> { export async function run(): Promise<void> {
core.info('POST Gradle Command Action')
await cache.cacheWrapperDist() await cache.cacheWrapperDist()
} }