import dedent from 'dedent' import * as github from '@actions/github' import {afterEach, beforeEach, describe, expect, it, jest} from '@jest/globals' import {BuildResult} from '../../src/build-results' let releasedVersions = [{version: '8.0', checksum: ''}] jest.unstable_mockModule('../../src/wrapper-validation/wrapper-checksums.json', () => ({ get default() { return releasedVersions } })) const {jobMarker, renderSummaryTable} = await import('../../src/job-summary') async function renderWith(versions: string[], results: BuildResult[]): Promise { releasedVersions = versions.map(version => ({version, checksum: ''})) jest.resetModules() const {renderSummaryTable: render} = await import('../../src/job-summary') return render(results) } const MATRIX_INPUT_ENV = 'INPUT_WORKFLOW-JOB-CONTEXT' function fakeContext(workflow: string, job: string): typeof github.context { return {workflow, job} as unknown as typeof github.context } const successfulHelpBuild: BuildResult = { rootProjectName: 'root', rootProjectDir: '/', requestedTasks: 'help', gradleVersion: '8.0', gradleHomeDir: '/opt/gradle', buildFailed: false, configCacheHit: 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`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :white_check_mark: Build Scan published
`); }) it('failed build', () => { const table = renderSummaryTable([failedHelpBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :x: Build Scan published
`); }) describe('when build scan', () => { it('publishing disabled', () => { const table = renderSummaryTable([scanPublishDisabledBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :white_check_mark: Build Scan not published
`); }) it('publishing failed', () => { const table = renderSummaryTable([scanPublishFailedBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :white_check_mark: Build Scan publish failed
`); }) }) it('multiple builds', () => { const table = renderSummaryTable([successfulHelpBuild, failedHelpBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :white_check_mark: Build Scan published
root help 8.0 :x: Build Scan published
`); }) it('truncating long requested tasks', () => { const table = renderSummaryTable([longArgsBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root
check publishMyLongNamePluginPublicationToMavenCentral publ…
8.0 :white_check_mark: Build Scan published
`); }) }) }) describe('Gradle version support status', () => { it('marks an outdated version and adds a details section', async () => { const table = await renderWith(['10.0.0', '8.0'], [successfulHelpBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :warning: :white_check_mark: Build Scan published

:warning: This Job uses an outdated Gradle version

Gradle release end-of-life policy

For major versions, Gradle will backport critical fixes and security fixes to the last minor in the previous major version. As such, each major Gradle release causes:

Gradle feature lifecycle
`); }) it('marks a maintenance-only version', async () => { const table = await renderWith(['9.0.0', '8.0'], [successfulHelpBuild]) expect(table).toContain( `8.0 :information_source:` ) expect(table).toContain('This Job uses an outdated Gradle version') }) it('marks a version with a newer patch release available', async () => { const table = await renderWith(['8.0.1', '8.0'], [successfulHelpBuild]) expect(table).toContain( `8.0 :information_source:` ) expect(table).not.toContain('outdated Gradle version') }) }) describe('jobMarker', () => { const original = process.env[MATRIX_INPUT_ENV] afterEach(() => { if (original === undefined) { delete process.env[MATRIX_INPUT_ENV] } else { process.env[MATRIX_INPUT_ENV] = original } }) it('builds a hidden marker from the workflow and job', () => { process.env[MATRIX_INPUT_ENV] = 'null' const marker = jobMarker(fakeContext('CI', 'build')) expect(marker).toBe('') }) it('includes the job matrix in the marker', () => { process.env[MATRIX_INPUT_ENV] = JSON.stringify({os: 'ubuntu', java: '17'}) const marker = jobMarker(fakeContext('CI', 'build')) expect(marker).toBe('') }) })