Compare commits

...

1 Commits

Author SHA1 Message Date
Daz DeBoer e0fc67aa64 Render configuration-cache status in the caching Job Summary
Add a ConfigurationCacheStatus type and an optional configurationCache
field to the CacheReport interface, and render a prominent line for it in
renderCachingReport (alongside the cleanup line). This surfaces whether the
configuration cache was restored, not restored, restored incompletely, or
inactive (no encryption key) in the Job Summary.

The field is populated by the gradle-actions-caching provider; it arrives
via the vendored-bundle refresh and renders as nothing until then.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 14:46:37 -06:00
3 changed files with 50 additions and 2 deletions
+3
View File
@@ -27,6 +27,8 @@ export type CacheCleanupStatus =
| 'disabled-config-cache-hit' | 'disabled-config-cache-hit'
| 'disabled-readonly' | 'disabled-readonly'
export type ConfigurationCacheStatus = 'not-active' | 'restored' | 'not-restored' | 'restore-incomplete'
export interface CacheEntryReport { export interface CacheEntryReport {
entryName: string entryName: string
requestedKey?: string requestedKey?: string
@@ -47,6 +49,7 @@ export interface CacheEntryReport {
export interface CacheReport { export interface CacheReport {
status: CacheStatus status: CacheStatus
cleanup?: CacheCleanupStatus cleanup?: CacheCleanupStatus
configurationCache?: ConfigurationCacheStatus
entries: CacheEntryReport[] entries: CacheEntryReport[]
} }
+14 -2
View File
@@ -1,4 +1,4 @@
import {CacheCleanupStatus, CacheEntryReport, CacheReport, CacheStatus} from './cache-service' import {CacheCleanupStatus, CacheEntryReport, CacheReport, CacheStatus, ConfigurationCacheStatus} from './cache-service'
const DOCS = 'https://github.com/gradle/actions/blob/main/docs/setup-gradle.md' const DOCS = 'https://github.com/gradle/actions/blob/main/docs/setup-gradle.md'
const DISTRIBUTION = 'https://github.com/gradle/actions/blob/main/DISTRIBUTION.md' const DISTRIBUTION = 'https://github.com/gradle/actions/blob/main/DISTRIBUTION.md'
@@ -28,6 +28,13 @@ const CLEANUP_COPY: Record<CacheCleanupStatus, string> = {
'disabled-readonly': `[Cache cleanup](${DOCS}#configuring-cache-cleanup) is always disabled when the cache is read-only.` 'disabled-readonly': `[Cache cleanup](${DOCS}#configuring-cache-cleanup) is always disabled when the cache is read-only.`
} }
const CONFIG_CACHE_COPY: Record<ConfigurationCacheStatus, string> = {
'not-active': `Configuration cache state was not cached — set a [cache-encryption-key](${DOCS}#cache-encryption-key) to enable configuration-cache caching.`,
restored: `Configuration cache state was restored from the cache.`,
'not-restored': `Configuration cache state was not restored — no cached data was available (e.g. the first run for this cache key).`,
'restore-incomplete': `Configuration cache state was not restored — the Gradle User Home was not fully restored.`
}
/** /**
* Renders a cache report into the unified Job Summary markdown, with a consistent * Renders a cache report into the unified Job Summary markdown, with a consistent
* skeleton across every variant: a section heading, a status line, an integrated * skeleton across every variant: a section heading, a status line, an integrated
@@ -69,6 +76,10 @@ function renderCleanupLine(cleanup?: CacheCleanupStatus): string | undefined {
return cleanup ? CLEANUP_COPY[cleanup] : undefined return cleanup ? CLEANUP_COPY[cleanup] : undefined
} }
function renderConfigCacheLine(configurationCache?: ConfigurationCacheStatus): string | undefined {
return configurationCache ? CONFIG_CACHE_COPY[configurationCache] : undefined
}
function renderProviderNote(providerNote?: ProviderNote): string | undefined { function renderProviderNote(providerNote?: ProviderNote): string | undefined {
if (!providerNote) { if (!providerNote) {
return undefined return undefined
@@ -88,9 +99,10 @@ function renderDetails(report: CacheReport): string {
: `Entries: ${restored} restored, ${saved} saved - Expand for more details` : `Entries: ${restored} restored, ${saved} saved - Expand for more details`
const cleanup = report.status === 'enabled' ? renderCleanupLine(report.cleanup) : undefined const cleanup = report.status === 'enabled' ? renderCleanupLine(report.cleanup) : undefined
const configCache = renderConfigCacheLine(report.configurationCache)
const table = renderEntryTable(report.entries) const table = renderEntryTable(report.entries)
const pre = `<pre>\n${renderEntryDetails(report.entries)}</pre>` const pre = `<pre>\n${renderEntryDetails(report.entries)}</pre>`
const body = [STATUS_COPY[report.status], cleanup, table, pre].filter(Boolean).join('\n\n') const body = [STATUS_COPY[report.status], cleanup, configCache, table, pre].filter(Boolean).join('\n\n')
return `<details> return `<details>
<summary>${summary}</summary> <summary>${summary}</summary>
+33
View File
@@ -79,6 +79,39 @@ describe('renderCachingReport', () => {
expect(md).toContain('<summary>Entries: 1 restored, 0 saved - Expand for more details</summary>') expect(md).toContain('<summary>Entries: 1 restored, 0 saved - Expand for more details</summary>')
}) })
it('renders the configuration-cache status line inside the details', () => {
const report: CacheReport = {
status: 'enabled',
cleanup: 'enabled',
configurationCache: 'restored',
entries: [entry()]
}
const md = renderCachingReport(report, ENHANCED)
const detailsBody = md.slice(md.indexOf('</summary>'))
expect(detailsBody).toContain('Configuration cache state was restored from the cache.')
})
it('explains an inactive configuration cache with a link to the encryption key docs', () => {
const report: CacheReport = {
status: 'enabled',
cleanup: 'enabled',
configurationCache: 'not-active',
entries: [entry()]
}
const md = renderCachingReport(report, ENHANCED)
expect(md).toContain('Configuration cache state was not cached')
expect(md).toContain('#cache-encryption-key')
})
it('omits the configuration-cache line when the status is absent', () => {
const report: CacheReport = {status: 'enabled', cleanup: 'enabled', entries: [entry()]}
const md = renderCachingReport(report, ENHANCED)
expect(md).not.toContain('Configuration cache state')
})
it('renders a compact disabled report with no note and no details', () => { it('renders a compact disabled report with no note and no details', () => {
const report: CacheReport = {status: 'disabled', entries: []} const report: CacheReport = {status: 'disabled', entries: []}
const md = renderCachingReport(report, undefined) const md = renderCachingReport(report, undefined)