diff --git a/.github/workflows/prod.yml b/.github/workflows/prod.yml index 65163d0..5cd9f46 100644 --- a/.github/workflows/prod.yml +++ b/.github/workflows/prod.yml @@ -62,6 +62,13 @@ jobs: build-root-directory: __tests__/samples/basic arguments: test --no-daemon dependencies-cache-enabled: true + - name: Test dependencies-cache-enabled + uses: ./ + with: + build-root-directory: __tests__/samples/basic + arguments: test --no-daemon + dependencies-cache-enabled: true + cache-read-only: true configuration-cache: strategy: diff --git a/README.md b/README.md index 2a4b1f2..a79fb7a 100644 --- a/README.md +++ b/README.md @@ -187,6 +187,18 @@ dependencies-cache-key: gradle/dependency-locks/** dependencies-cache-exact: true ``` +### Using the caches read-only + +Cache storage space is limited for GitHub actions, and writing new cache entries can trigger the deletion of exising entries. +In some circumstances, it makes sense for a Gradle invocation to use any existing cache entries but not to write and changes back. +For example, you may want to write cache entries for builds on your `main` branch, but not for any PR build invocations. + +Use the following configuration to avoid writing cache entries for the action invocation: + +```yaml +cache-read-only: true +``` + ## Build scans If your build publishes a [build scan](https://gradle.com/build-scans/) the `gradle-build-action` action will emit the link to the published build scan as an output named `build-scan-url`. diff --git a/action.yml b/action.yml index a91228e..b6b641a 100644 --- a/action.yml +++ b/action.yml @@ -51,6 +51,10 @@ inputs: description: Whether to restore only if exact match, default to 'false' 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 + default: false outputs: build-scan-url: diff --git a/src/post.ts b/src/post.ts index 6119183..d119ceb 100644 --- a/src/post.ts +++ b/src/post.ts @@ -1,12 +1,20 @@ +import * as core from '@actions/core' + import * as cacheWrapper from './cache-wrapper' import * as cacheDependencies from './cache-dependencies' import * as cacheConfiguration from './cache-configuration' // Invoked by GitHub Actions export async function run(): Promise { + if (isCacheReadOnly()) return + await cacheWrapper.cacheWrapperDist() await cacheDependencies.cacheDependencies() await cacheConfiguration.cacheConfiguration() } +function isCacheReadOnly(): boolean { + return core.getBooleanInput('cache-read-only') +} + run()