mirror of
https://github.com/gradle/actions.git
synced 2025-08-18 23:01:27 +08:00
Improve build scan badge readability with long tasks (#200)
Improve readability of build scan when requested tasks is very long, as agreed in #175. HTML diff for each case of job summary is clearer in cd62d9c9efc15c90df77242059b98bdaa4f39a43. - Ensure a minimum size for the badge, at least the size of "Build scan®", by preventing a line break with ` ` - Reduce the size of the badge by tweaking the inner text Also fix a typo in the build shell script.
This commit is contained in:
commit
bce7daca54
4
build
4
build
@ -5,7 +5,7 @@ cd sources
|
|||||||
case "$1" in
|
case "$1" in
|
||||||
all)
|
all)
|
||||||
npm clean-install
|
npm clean-install
|
||||||
nprm run all
|
npm run all
|
||||||
;;
|
;;
|
||||||
act)
|
act)
|
||||||
# Build and copy outputs to the dist directory
|
# Build and copy outputs to the dist directory
|
||||||
@ -26,4 +26,4 @@ case "$1" in
|
|||||||
npm install
|
npm install
|
||||||
npm run build
|
npm run build
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -78,7 +78,7 @@ Note that this permission is never available for a workflow triggered from a rep
|
|||||||
return mainWarning
|
return mainWarning
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderSummaryTable(results: BuildResult[]): string {
|
export function renderSummaryTable(results: BuildResult[]): string {
|
||||||
return `${renderDeprecations()}\n${renderBuildResults(results)}`
|
return `${renderDeprecations()}\n${renderBuildResults(results)}`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ function renderBuildResults(results: BuildResult[]): string {
|
|||||||
<th>Requested Tasks</th>
|
<th>Requested Tasks</th>
|
||||||
<th>Gradle Version</th>
|
<th>Gradle Version</th>
|
||||||
<th>Build Outcome</th>
|
<th>Build Outcome</th>
|
||||||
<th>Build Scan®</th>
|
<th>Build Scan®</th>
|
||||||
</tr>${results.map(result => renderBuildResultRow(result)).join('')}
|
</tr>${results.map(result => renderBuildResultRow(result)).join('')}
|
||||||
</table>
|
</table>
|
||||||
`
|
`
|
||||||
@ -134,23 +134,46 @@ function renderOutcome(result: BuildResult): string {
|
|||||||
return result.buildFailed ? ':x:' : ':white_check_mark:'
|
return result.buildFailed ? ':x:' : ':white_check_mark:'
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderBuildScan(result: BuildResult): string {
|
interface BadgeSpec {
|
||||||
if (result.buildScanFailed) {
|
text: string
|
||||||
return renderBuildScanBadge(
|
alt: string
|
||||||
'PUBLISH_FAILED',
|
color: string
|
||||||
'orange',
|
logo: boolean
|
||||||
'https://docs.gradle.com/develocity/gradle-plugin/#troubleshooting'
|
targetUrl: string
|
||||||
)
|
|
||||||
}
|
|
||||||
if (result.buildScanUri) {
|
|
||||||
return renderBuildScanBadge('PUBLISHED', '06A0CE', result.buildScanUri)
|
|
||||||
}
|
|
||||||
return renderBuildScanBadge('NOT_PUBLISHED', 'lightgrey', 'https://scans.gradle.com')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderBuildScanBadge(outcomeText: string, outcomeColor: string, targetUrl: string): string {
|
function renderBuildScan(result: BuildResult): string {
|
||||||
const badgeUrl = `https://img.shields.io/badge/Build%20Scan%C2%AE-${outcomeText}-${outcomeColor}?logo=Gradle`
|
if (result.buildScanFailed) {
|
||||||
const badgeHtml = `<img src="${badgeUrl}" alt="Build Scan ${outcomeText}" />`
|
return renderBuildScanBadge({
|
||||||
|
text: 'Publish failed',
|
||||||
|
alt: 'Build Scan publish failed',
|
||||||
|
color: 'orange',
|
||||||
|
logo: false,
|
||||||
|
targetUrl: 'https://docs.gradle.com/develocity/gradle-plugin/#troubleshooting'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (result.buildScanUri) {
|
||||||
|
return renderBuildScanBadge({
|
||||||
|
text: 'Build Scan®',
|
||||||
|
alt: 'Build Scan published',
|
||||||
|
color: '06A0CE',
|
||||||
|
logo: true,
|
||||||
|
targetUrl: result.buildScanUri
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return renderBuildScanBadge({
|
||||||
|
text: 'Not published',
|
||||||
|
alt: 'Build Scan not published',
|
||||||
|
color: 'lightgrey',
|
||||||
|
logo: false,
|
||||||
|
targetUrl: 'https://scans.gradle.com'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderBuildScanBadge({text, alt, color, logo, targetUrl}: BadgeSpec): string {
|
||||||
|
const encodedText = encodeURIComponent(text)
|
||||||
|
const badgeUrl = `https://img.shields.io/badge/${encodedText}-${color}${logo ? '?logo=Gradle' : ''}`
|
||||||
|
const badgeHtml = `<img src="${badgeUrl}" alt="${alt}" />`
|
||||||
return `<a href="${targetUrl}" rel="nofollow" target="_blank">${badgeHtml}</a>`
|
return `<a href="${targetUrl}" rel="nofollow" target="_blank">${badgeHtml}</a>`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
177
sources/test/jest/job-summary.test.ts
Normal file
177
sources/test/jest/job-summary.test.ts
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
import { BuildResult } from '../../src/build-results'
|
||||||
|
import { renderSummaryTable } from '../../src/job-summary'
|
||||||
|
import dedent from 'dedent'
|
||||||
|
|
||||||
|
|
||||||
|
const successfulHelpBuild: BuildResult = {
|
||||||
|
rootProjectName: 'root',
|
||||||
|
rootProjectDir: '/',
|
||||||
|
requestedTasks: 'help',
|
||||||
|
gradleVersion: '8.0',
|
||||||
|
gradleHomeDir: '/opt/gradle',
|
||||||
|
buildFailed: false,
|
||||||
|
buildScanUri: 'https://scans.gradle.com/s/abc123',
|
||||||
|
buildScanFailed: false
|
||||||
|
}
|
||||||
|
|
||||||
|
const failedHelpBuild: BuildResult = {
|
||||||
|
...successfulHelpBuild,
|
||||||
|
buildFailed: true
|
||||||
|
}
|
||||||
|
|
||||||
|
const longArgsBuild: BuildResult = {
|
||||||
|
...successfulHelpBuild,
|
||||||
|
requestedTasks: 'check publishMyLongNamePluginPublicationToMavenCentral publishMyLongNamePluginPublicationToPluginPortal',
|
||||||
|
}
|
||||||
|
|
||||||
|
const scanPublishDisabledBuild: BuildResult = {
|
||||||
|
...successfulHelpBuild,
|
||||||
|
buildScanUri: '',
|
||||||
|
buildScanFailed: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
const scanPublishFailedBuild: BuildResult = {
|
||||||
|
...successfulHelpBuild,
|
||||||
|
buildScanUri: '',
|
||||||
|
buildScanFailed: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('renderSummaryTable', () => {
|
||||||
|
describe('renders', () => {
|
||||||
|
it('successful build', () => {
|
||||||
|
const table = renderSummaryTable([successfulHelpBuild])
|
||||||
|
expect(table.trim()).toBe(dedent`
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Gradle Root Project</th>
|
||||||
|
<th>Requested Tasks</th>
|
||||||
|
<th>Gradle Version</th>
|
||||||
|
<th>Build Outcome</th>
|
||||||
|
<th>Build Scan®</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root</td>
|
||||||
|
<td>help</td>
|
||||||
|
<td align='center'>8.0</td>
|
||||||
|
<td align='center'>:white_check_mark:</td>
|
||||||
|
<td><a href="https://scans.gradle.com/s/abc123" rel="nofollow" target="_blank"><img src="https://img.shields.io/badge/Build%20Scan%C2%AE-06A0CE?logo=Gradle" alt="Build Scan published" /></a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
`);
|
||||||
|
})
|
||||||
|
it('failed build', () => {
|
||||||
|
const table = renderSummaryTable([failedHelpBuild])
|
||||||
|
expect(table.trim()).toBe(dedent`
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Gradle Root Project</th>
|
||||||
|
<th>Requested Tasks</th>
|
||||||
|
<th>Gradle Version</th>
|
||||||
|
<th>Build Outcome</th>
|
||||||
|
<th>Build Scan®</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root</td>
|
||||||
|
<td>help</td>
|
||||||
|
<td align='center'>8.0</td>
|
||||||
|
<td align='center'>:x:</td>
|
||||||
|
<td><a href="https://scans.gradle.com/s/abc123" rel="nofollow" target="_blank"><img src="https://img.shields.io/badge/Build%20Scan%C2%AE-06A0CE?logo=Gradle" alt="Build Scan published" /></a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
`);
|
||||||
|
})
|
||||||
|
describe('when build scan', () => {
|
||||||
|
it('publishing disabled', () => {
|
||||||
|
const table = renderSummaryTable([scanPublishDisabledBuild])
|
||||||
|
expect(table.trim()).toBe(dedent`
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Gradle Root Project</th>
|
||||||
|
<th>Requested Tasks</th>
|
||||||
|
<th>Gradle Version</th>
|
||||||
|
<th>Build Outcome</th>
|
||||||
|
<th>Build Scan®</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root</td>
|
||||||
|
<td>help</td>
|
||||||
|
<td align='center'>8.0</td>
|
||||||
|
<td align='center'>:white_check_mark:</td>
|
||||||
|
<td><a href="https://scans.gradle.com" rel="nofollow" target="_blank"><img src="https://img.shields.io/badge/Not%20published-lightgrey" alt="Build Scan not published" /></a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
`);
|
||||||
|
})
|
||||||
|
it('publishing failed', () => {
|
||||||
|
const table = renderSummaryTable([scanPublishFailedBuild])
|
||||||
|
expect(table.trim()).toBe(dedent`
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Gradle Root Project</th>
|
||||||
|
<th>Requested Tasks</th>
|
||||||
|
<th>Gradle Version</th>
|
||||||
|
<th>Build Outcome</th>
|
||||||
|
<th>Build Scan®</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root</td>
|
||||||
|
<td>help</td>
|
||||||
|
<td align='center'>8.0</td>
|
||||||
|
<td align='center'>:white_check_mark:</td>
|
||||||
|
<td><a href="https://docs.gradle.com/develocity/gradle-plugin/#troubleshooting" rel="nofollow" target="_blank"><img src="https://img.shields.io/badge/Publish%20failed-orange" alt="Build Scan publish failed" /></a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
`);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
it('multiple builds', () => {
|
||||||
|
const table = renderSummaryTable([successfulHelpBuild, failedHelpBuild])
|
||||||
|
expect(table.trim()).toBe(dedent`
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Gradle Root Project</th>
|
||||||
|
<th>Requested Tasks</th>
|
||||||
|
<th>Gradle Version</th>
|
||||||
|
<th>Build Outcome</th>
|
||||||
|
<th>Build Scan®</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root</td>
|
||||||
|
<td>help</td>
|
||||||
|
<td align='center'>8.0</td>
|
||||||
|
<td align='center'>:white_check_mark:</td>
|
||||||
|
<td><a href="https://scans.gradle.com/s/abc123" rel="nofollow" target="_blank"><img src="https://img.shields.io/badge/Build%20Scan%C2%AE-06A0CE?logo=Gradle" alt="Build Scan published" /></a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root</td>
|
||||||
|
<td>help</td>
|
||||||
|
<td align='center'>8.0</td>
|
||||||
|
<td align='center'>:x:</td>
|
||||||
|
<td><a href="https://scans.gradle.com/s/abc123" rel="nofollow" target="_blank"><img src="https://img.shields.io/badge/Build%20Scan%C2%AE-06A0CE?logo=Gradle" alt="Build Scan published" /></a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
`);
|
||||||
|
})
|
||||||
|
it('truncating long requested tasks', () => {
|
||||||
|
const table = renderSummaryTable([longArgsBuild])
|
||||||
|
expect(table.trim()).toBe(dedent`
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Gradle Root Project</th>
|
||||||
|
<th>Requested Tasks</th>
|
||||||
|
<th>Gradle Version</th>
|
||||||
|
<th>Build Outcome</th>
|
||||||
|
<th>Build Scan®</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root</td>
|
||||||
|
<td><div title='check publishMyLongNamePluginPublicationToMavenCentral publishMyLongNamePluginPublicationToPluginPortal'>check publishMyLongNamePluginPublicationToMavenCentral publ…</div></td>
|
||||||
|
<td align='center'>8.0</td>
|
||||||
|
<td align='center'>:white_check_mark:</td>
|
||||||
|
<td><a href="https://scans.gradle.com/s/abc123" rel="nofollow" target="_blank"><img src="https://img.shields.io/badge/Build%20Scan%C2%AE-06A0CE?logo=Gradle" alt="Build Scan published" /></a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
`);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
Loading…
x
Reference in New Issue
Block a user