Allow use of caches 'read-only'

To avoid evicting useful entries, some pipeline may benefit from using existing
cache entries without writing any changes back to the cache.

Fixes #62
This commit is contained in:
Daz DeBoer 2021-08-17 16:15:28 -06:00
parent 543cacb256
commit a693ccda4b
No known key found for this signature in database
GPG key ID: DD6B9F0B06683D5D
4 changed files with 31 additions and 0 deletions

View file

@ -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:

View file

@ -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`.

View file

@ -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:

View file

@ -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<void> {
if (isCacheReadOnly()) return
await cacheWrapper.cacheWrapperDist()
await cacheDependencies.cacheDependencies()
await cacheConfiguration.cacheConfiguration()
}
function isCacheReadOnly(): boolean {
return core.getBooleanInput('cache-read-only')
}
run()