From 9d6738618de819e53a7bf37a8f42a576ca94314b Mon Sep 17 00:00:00 2001 From: daz Date: Wed, 20 Dec 2023 10:05:25 -0700 Subject: [PATCH] Support wildcards in cache-excludes --- .../integ-test-action-inputs-caching.yml | 6 ++++-- src/cache-base.ts | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/workflows/integ-test-action-inputs-caching.yml b/.github/workflows/integ-test-action-inputs-caching.yml index ba4bed4..13c69d1 100644 --- a/.github/workflows/integ-test-action-inputs-caching.yml +++ b/.github/workflows/integ-test-action-inputs-caching.yml @@ -38,7 +38,8 @@ jobs: enterprise # Exclude build-cache from main cache entry gradle-home-cache-excludes: | - caches/build-cache-1 + caches/build-cache-* + caches/*/executionHistory/** - name: Build using Gradle wrapper working-directory: .github/workflow-samples/groovy-dsl run: ./gradlew test @@ -63,7 +64,8 @@ jobs: caches enterprise gradle-home-cache-excludes: | - caches/build-cache-1 + caches/build-cache-* + caches/*/executionHistory/** cache-read-only: true - name: Execute Gradle build with --offline working-directory: .github/workflow-samples/groovy-dsl diff --git a/src/cache-base.ts b/src/cache-base.ts index 83d6e91..5b4cb57 100644 --- a/src/cache-base.ts +++ b/src/cache-base.ts @@ -1,5 +1,7 @@ import * as core from '@actions/core' import * as exec from '@actions/exec' +import * as glob from '@actions/glob' + import path from 'path' import fs from 'fs' import * as params from './input-params' @@ -127,7 +129,7 @@ export class GradleStateCache { */ async beforeSave(listener: CacheListener): Promise { await this.debugReportGradleUserHomeSize('before saving common artifacts') - this.deleteExcludedPaths() + await this.deleteExcludedPaths() await Promise.all([ new GradleHomeEntryExtractor(this.gradleUserHome).extract(listener) // new ConfigurationCacheEntryExtractor(this.gradleUserHome).extract(listener) @@ -140,13 +142,21 @@ export class GradleStateCache { /** * Delete any file paths that are excluded by the `gradle-home-cache-excludes` parameter. */ - private deleteExcludedPaths(): void { + private async deleteExcludedPaths(): Promise { const rawPaths: string[] = params.getCacheExcludes() + // rawPaths.push('caches/*/cc-keystore') const resolvedPaths = rawPaths.map(x => path.resolve(this.gradleUserHome, x)) for (const p of resolvedPaths) { - cacheDebug(`Deleting excluded path: ${p}`) - tryDelete(p) + cacheDebug(`Removing excluded path: ${p}`) + const globber = await glob.create(p, { + implicitDescendants: false + }) + + for (const toDelete of await globber.glob()) { + cacheDebug(`Removing excluded file: ${toDelete}`) + await tryDelete(toDelete) + } } }