From 1113cb87cb559686abd0cec17719c470750da167 Mon Sep 17 00:00:00 2001 From: Daz DeBoer Date: Wed, 20 Oct 2021 15:01:36 -0600 Subject: [PATCH] Allow cache-exclude-paths to be configured for action All excluded paths are deleted prior to caching the Gradle User Home. --- action.yml | 16 +++++++++++++++- src/cache-gradle-user-home.ts | 21 +++++++++++++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/action.yml b/action.yml index a5274db..9a6bca8 100644 --- a/action.yml +++ b/action.yml @@ -7,25 +7,30 @@ inputs: gradle-executable: description: Path to the Gradle executable required: false + gradle-version: description: Gradle version to use required: false + build-root-directory: description: Path to the root directory of the build required: false + arguments: description: Gradle command line arguments (supports multi-line input) required: false + cache-disabled: description: When 'true', all caching is disabled. No entries will be written to or read from the cache. required: false default: false + cache-read-only: description: When 'true', existing entries will be read from the cache but no entries will be written required: false # 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. @@ -35,11 +40,20 @@ inputs: 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-exclude-paths: + description: Paths in Gradle User Home to exclude from cache. (EXPERIMENTAL - may be changed/removed without notice) + required: false + # eg ["caches/build-cache-1"] will prevent the local build cache from being saved/restored. + default: | + [] + cache-artifact-bundles: description: Names and patterns of artifact bundles to cache separately. (EXPERIMENTAL - may be changed/removed without notice) required: false diff --git a/src/cache-gradle-user-home.ts b/src/cache-gradle-user-home.ts index cb6485a..3ebbf4e 100644 --- a/src/cache-gradle-user-home.ts +++ b/src/cache-gradle-user-home.ts @@ -74,12 +74,27 @@ export class GradleUserHomeCache extends AbstractCache { async beforeSave(): Promise { await this.reportGradleUserHomeSize('before saving common artifacts') + this.removeExcludedPaths() await this.saveArtifactBundles() await this.reportGradleUserHomeSize( - 'after saving common artifacts (./wrapper dir is not cached)' + "after saving common artifacts (only 'caches' and 'notifications' will be stored)" ) } + private removeExcludedPaths(): void { + const rawPaths: string[] = JSON.parse( + core.getInput('cache-exclude-paths') + ) + const resolvedPaths = rawPaths.map(x => + path.resolve(this.gradleUserHome, x) + ) + + for (const p of resolvedPaths) { + this.debug(`Deleting excluded path: ${p}`) + tryDelete(p) + } + } + private async saveArtifactBundles(): Promise { const processes: Promise[] = [] for (const [bundle, pattern] of this.getArtifactBundles()) { @@ -177,9 +192,7 @@ export class GradleUserHomeCache extends AbstractCache { 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 `!${resolved}` } return path.resolve(this.gradleUserHome, rawPath) }