From 9c9529420976617da36f316dd70ee885ddf62c57 Mon Sep 17 00:00:00 2001 From: Daz DeBoer Date: Wed, 20 Oct 2021 09:52:04 -0600 Subject: [PATCH] Allow cache-paths to be set via action config --- action.yml | 14 ++++++++++++-- src/cache-gradle-user-home.ts | 19 +++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/action.yml b/action.yml index 03c0186..a5274db 100644 --- a/action.yml +++ b/action.yml @@ -26,12 +26,22 @@ inputs: # TODO: It might be useful to default to read-only for PRs, or non-main branch. default: false + + # EXPERIMENTAL & INTERNAL CONFIGURATION PROPERTIES + # The following action properties allow fine-grained tweaking of the action caching behaviour. + # These properties are not designed for production use, and may change without notice in a subsequent release of `gradle-build-action`. + # Use at your own risk! workflow-job-context: - description: Used to uniquely identify the current job invocation. Defaults to the matrix values for this job; this should not be overridden by users. + description: Used to uniquely identify the current job invocation. Defaults to the matrix values for this job; this should not be overridden by users (INTERNAL). required: false default: ${{ toJSON(matrix) }} + cache-paths: + description: Paths in Gradle User Home to cache. (EXPERIMENTAL - may be changed/removed without notice) + required: false + default: | + ["caches", "notifications"] cache-artifact-bundles: - description: Names and patterns of artifact bundles to cache separately. For internal use only. + description: Names and patterns of artifact bundles to cache separately. (EXPERIMENTAL - may be changed/removed without notice) required: false default: | [ diff --git a/src/cache-gradle-user-home.ts b/src/cache-gradle-user-home.ts index 981bf4f..cb6485a 100644 --- a/src/cache-gradle-user-home.ts +++ b/src/cache-gradle-user-home.ts @@ -12,9 +12,6 @@ import { tryDelete } from './cache-utils' -// Which paths under Gradle User Home should be cached -const CACHE_PATH = ['caches', 'notifications'] - export class GradleUserHomeCache extends AbstractCache { private gradleUserHome: string @@ -170,7 +167,21 @@ export class GradleUserHomeCache extends AbstractCache { } protected getCachePath(): string[] { - return CACHE_PATH.map(x => path.resolve(this.gradleUserHome, x)) + const rawPaths: string[] = JSON.parse(core.getInput('cache-paths')) + rawPaths.push(META_FILE_DIR) + const resolvedPaths = rawPaths.map(x => this.resolveCachePath(x)) + this.debug(`Using cache paths: ${resolvedPaths}`) + return resolvedPaths + } + + private resolveCachePath(rawPath: string): string { + if (rawPath.startsWith('!')) { + const resolved = this.resolveCachePath(rawPath.substring(1)) + const negated = `!${resolved}` + this.debug(`Negate cache path: ${negated}`) + return negated + } + return path.resolve(this.gradleUserHome, rawPath) } private getArtifactBundles(): Map {