Write job summary to logs when feature not available

This commit is contained in:
Daz DeBoer 2022-06-20 17:53:30 -06:00
parent ec939a8c10
commit eaed5520c4
No known key found for this signature in database
GPG key ID: DD6B9F0B06683D5D
3 changed files with 60 additions and 14 deletions

View file

@ -104,7 +104,7 @@ export class CacheEntryListener {
} }
} }
export function logCachingReport(listener: CacheListener): void { export function writeCachingReport(listener: CacheListener): void {
const entries = listener.cacheEntries const entries = listener.cacheEntries
core.summary.addRaw( core.summary.addRaw(
@ -123,10 +123,34 @@ export function logCachingReport(listener: CacheListener): void {
core.summary.addHeading('Cache Entry Details', 5) core.summary.addHeading('Cache Entry Details', 5)
const entryDetails = listener.cacheEntries const entryDetails = renderEntryDetails(listener)
core.summary.addRaw(`<pre>
${entryDetails}
</pre>
</details>
`)
}
export function logCachingReport(listener: CacheListener): void {
const entries = listener.cacheEntries
core.startGroup(`Caching for gradle-build-action was ${listener.cacheStatus} - expand for details`)
core.info(
`Entries Restored: ${getCount(entries, e => e.restoredSize)} (${getSize(entries, e => e.restoredSize)} Mb)`
)
core.info(`Entries Saved : ${getCount(entries, e => e.savedSize)} (${getSize(entries, e => e.savedSize)} Mb)`)
core.info(`Cache Entry Details`)
core.info(renderEntryDetails(listener))
core.endGroup()
}
function renderEntryDetails(listener: CacheListener): string {
return listener.cacheEntries
.map( .map(
entry => entry => `Entry: ${entry.entryName}
`Entry: ${entry.entryName}
Requested Key : ${entry.requestedKey ?? ''} Requested Key : ${entry.requestedKey ?? ''}
Restored Key : ${entry.restoredKey ?? ''} Restored Key : ${entry.restoredKey ?? ''}
Size: ${formatSize(entry.restoredSize)} Size: ${formatSize(entry.restoredSize)}
@ -137,12 +161,6 @@ export function logCachingReport(listener: CacheListener): void {
` `
) )
.join('---\n') .join('---\n')
core.summary.addRaw(`<pre>
${entryDetails}
</pre>
</details>
`)
} }
function getRestoredMessage(entry: CacheEntryListener, isCacheWriteOnly: boolean): string { function getRestoredMessage(entry: CacheEntryListener, isCacheWriteOnly: boolean): string {

View file

@ -1,7 +1,7 @@
import * as core from '@actions/core' import * as core from '@actions/core'
import fs from 'fs' import fs from 'fs'
import path from 'path' import path from 'path'
import {logCachingReport, CacheListener} from './cache-reporting' import {writeCachingReport, CacheListener, logCachingReport} from './cache-reporting'
export interface BuildResult { export interface BuildResult {
get rootProjectName(): string get rootProjectName(): string
@ -23,11 +23,21 @@ export async function writeJobSummary(buildResults: BuildResult[], cacheListener
writeSummaryTable(buildResults) writeSummaryTable(buildResults)
} }
logCachingReport(cacheListener) writeCachingReport(cacheListener)
await core.summary.write() await core.summary.write()
} }
export async function logJobSummary(buildResults: BuildResult[], cacheListener: CacheListener): Promise<void> {
if (buildResults.length === 0) {
core.debug('No Gradle build results found. Summary table will not be logged.')
} else {
logSummaryTable(buildResults)
}
logCachingReport(cacheListener)
}
export function loadBuildResults(): BuildResult[] { export function loadBuildResults(): BuildResult[] {
const buildResultsDir = path.resolve(process.env['RUNNER_TEMP']!, '.build-results') const buildResultsDir = path.resolve(process.env['RUNNER_TEMP']!, '.build-results')
if (!fs.existsSync(buildResultsDir)) { if (!fs.existsSync(buildResultsDir)) {
@ -92,3 +102,19 @@ function renderBuildScanBadge(outcomeText: string, outcomeColor: string, targetU
const badgeHtml = `<img src="${badgeUrl}" alt="Build Scan ${outcomeText}" />` const badgeHtml = `<img src="${badgeUrl}" alt="Build Scan ${outcomeText}" />`
return `<a href="${targetUrl}" rel="nofollow">${badgeHtml}</a>` return `<a href="${targetUrl}" rel="nofollow">${badgeHtml}</a>`
} }
function logSummaryTable(results: BuildResult[]): void {
core.info('============================')
core.info('Gradle Builds')
core.info('----------------------------')
core.info('Root Project | Requested Tasks | Gradle Version | Build Outcome | Build Scan™')
core.info('----------------------------')
for (const result of results) {
core.info(
`${result.rootProjectName} | ${result.requestedTasks} | ${result.gradleVersion} | ${
result.buildFailed ? 'FAILED' : 'SUCCESS'
} | ${result.buildScanFailed ? 'Publish failed' : result.buildScanUri}`
)
}
core.info('============================')
}

View file

@ -7,7 +7,7 @@ import * as os from 'os'
import * as caches from './caches' import * as caches from './caches'
import {CacheListener} from './cache-reporting' import {CacheListener} from './cache-reporting'
import {BuildResult, loadBuildResults, writeJobSummary} from './job-summary' import {BuildResult, loadBuildResults, logJobSummary, writeJobSummary} from './job-summary'
const GRADLE_SETUP_VAR = 'GRADLE_BUILD_ACTION_SETUP_COMPLETED' const GRADLE_SETUP_VAR = 'GRADLE_BUILD_ACTION_SETUP_COMPLETED'
const GRADLE_USER_HOME = 'GRADLE_USER_HOME' const GRADLE_USER_HOME = 'GRADLE_USER_HOME'
@ -63,7 +63,9 @@ export async function complete(): Promise<void> {
await caches.save(gradleUserHome, cacheListener) await caches.save(gradleUserHome, cacheListener)
if (shouldGenerateJobSummary()) { if (shouldGenerateJobSummary()) {
writeJobSummary(buildResults, cacheListener) await writeJobSummary(buildResults, cacheListener)
} else {
logJobSummary(buildResults, cacheListener)
} }
} }