Simplify version status reporting: drop the output and move the check back to post-job

This commit is contained in:
Vlad Chesnokov
2026-08-26 12:59:43 +02:00
parent dfc644bc4a
commit 78c57b83ad
14 changed files with 113 additions and 226 deletions
-1
View File
@@ -6,7 +6,6 @@ export interface BuildResult {
get rootProjectDir(): string
get requestedTasks(): string
get gradleVersion(): string
get versionStatus(): string | undefined
get gradleHomeDir(): string
get buildFailed(): boolean
get configCacheHit(): boolean
+14 -16
View File
@@ -1,13 +1,13 @@
import * as core from '@actions/core'
import {BuildResult} from './build-results'
import {GradleVersion} from './execution/gradle-version'
import wrapperChecksums from './wrapper-validation/wrapper-checksums.json'
const FEATURE_LIFECYCLE_DOC = 'https://docs.gradle.org/current/userguide/feature_lifecycle.html'
const FEATURE_LIFECYCLE_DOC = 'https://docs.gradle.org/current/userguide/feature_lifecycle.html#eol_support'
const LATEST_RELEASED_MAJOR = determineLatestReleasedMajor(wrapperChecksums.map(entry => entry.version))
const LATEST_MAJOR_VERSION_ENV = 'GRADLE_ACTIONS_LATEST_GRADLE_MAJOR'
export type SupportStatus = 'active' | 'maintenance' | 'eol'
export function determineLatestReleasedMajor(versions: string[]): number | undefined {
const releasedMajors = versions
@@ -17,27 +17,25 @@ export function determineLatestReleasedMajor(versions: string[]): number | undef
return releasedMajors.length > 0 ? Math.max(...releasedMajors) : undefined
}
export function exportLatestReleasedMajor(): void {
if (LATEST_RELEASED_MAJOR !== undefined) {
core.exportVariable(LATEST_MAJOR_VERSION_ENV, LATEST_RELEASED_MAJOR)
export function getSupportStatus(version: GradleVersion, latestMajor: number): SupportStatus {
switch (Math.max(0, latestMajor - version.major)) {
case 0:
return 'active'
case 1:
return 'maintenance'
default:
return 'eol'
}
}
export function reportSupportStatus(buildResults: BuildResult[]): void {
export function reportSupportStatus(gradleVersions: string[]): void {
if (LATEST_RELEASED_MAJOR === undefined) {
return
}
const statusByVersion = new Map<string, string>()
for (const {gradleVersion, versionStatus} of buildResults) {
if (versionStatus) {
statusByVersion.set(gradleVersion, versionStatus)
}
}
for (const [gradleVersion, status] of statusByVersion) {
for (const gradleVersion of new Set(gradleVersions)) {
const version = new GradleVersion(gradleVersion)
switch (status) {
switch (getSupportStatus(version, LATEST_RELEASED_MAJOR)) {
case 'eol':
core.warning(eolMessage(version, LATEST_RELEASED_MAJOR), {title: 'Gradle version at end-of-life'})
break
@@ -15,7 +15,6 @@ settingsEvaluated { settings ->
spec.getParameters().getRequestedTasks().set(gradle.startParameter.taskNames.join(" "))
spec.getParameters().getGradleHomeDir().set(gradle.gradleHomeDir.absolutePath)
spec.getParameters().getInvocationId().set(gradle.ext.invocationId)
spec.getParameters().getVersionStatus().set(gradle.ext.gradleVersionStatus ?: "")
})
gradle.services.get(BuildEventListenerRegistryInternal).onOperationCompletion(projectTracker)
@@ -31,7 +30,6 @@ abstract class BuildResultsRecorder implements BuildService<BuildResultsRecorder
Property<String> getRequestedTasks()
Property<String> getGradleHomeDir()
Property<String> getInvocationId()
Property<String> getVersionStatus()
}
void started(BuildOperationDescriptor buildOperation, OperationStartEvent startEvent) {}
@@ -51,16 +49,6 @@ abstract class BuildResultsRecorder implements BuildService<BuildResultsRecorder
}
}
private static void setStepOutput(String name, String value) {
def githubOutput = System.getenv("GITHUB_OUTPUT")
if (githubOutput) {
new File(githubOutput) << "${name}=${value}\n"
} else {
// Retained for compatibility with older GHES versions
println("::set-output name=${name}::${value}")
}
}
@Override
public void close() {
def buildResults = [
@@ -68,17 +56,11 @@ abstract class BuildResultsRecorder implements BuildService<BuildResultsRecorder
rootProjectDir: getParameters().getRootProjectDir().get(),
requestedTasks: getParameters().getRequestedTasks().get(),
gradleVersion: GradleVersion.current().version,
versionStatus: getParameters().getVersionStatus().getOrElse("") ?: null,
gradleHomeDir: getParameters().getGradleHomeDir().get(),
buildFailed: buildFailed,
configCacheHit: configCacheHit
]
def versionStatus = getParameters().getVersionStatus().getOrElse("")
if (versionStatus) {
setStepOutput("gradle-version-status", versionStatus)
}
def runnerTempDir = System.getProperty("RUNNER_TEMP") ?: System.getenv("RUNNER_TEMP")
def githubActionStep = System.getProperty("GITHUB_ACTION") ?: System.getenv("GITHUB_ACTION")
if (!runnerTempDir || !githubActionStep) {
@@ -5,7 +5,6 @@ import org.gradle.util.GradleVersion
import org.slf4j.LoggerFactory
def SKIP_BUILD_CAPTURE = "GRADLE_ACTIONS_SKIP_BUILD_RESULT_CAPTURE"
def LATEST_GRADLE_MAJOR_ENV = "GRADLE_ACTIONS_LATEST_GRADLE_MAJOR"
def BUILD_SCAN_PLUGIN_ID = "com.gradle.build-scan"
def BUILD_SCAN_EXTENSION = "buildScan"
def DEVELOCITY_PLUGIN_ID = "com.gradle.develocity"
@@ -24,8 +23,6 @@ if (isTopLevelBuild) {
def resultsWriter = new ResultsWriter()
def version = GradleVersion.current().baseVersion
gradle.ext.gradleVersionStatus = supportStatusOf(version, System.getenv(LATEST_GRADLE_MAJOR_ENV))
def atLeastGradle3 = version >= GradleVersion.version("3.0")
def atLeastGradle6 = version >= GradleVersion.version("6.0")
def atLeastGradle7 = version >= GradleVersion.version("7.0")
@@ -87,46 +84,13 @@ def captureUsingBuildService(invocationId) {
apply from: 'gradle-actions.build-result-capture-service.plugin.groovy'
}
String supportStatusOf(version, String latestGradleMajor) {
def latestMajor = latestGradleMajor?.find(/^\d+$/)?.toInteger()
def currentMajor = version.version.find(/^\d+/)?.toInteger()
if (!latestMajor || !currentMajor) {
return null
}
switch (Math.max(0, latestMajor - currentMajor)) {
case 0:
return "active"
case 1:
return "maintenance"
default:
return "eol"
}
}
void setStepOutput(String name, String value) {
def githubOutput = System.getenv("GITHUB_OUTPUT")
if (githubOutput) {
new File(githubOutput) << "${name}=${value}\n"
} else {
// Retained for compatibility with older GHES versions
println("::set-output name=${name}::${value}")
}
}
void captureUsingBuildFinished(gradle, String invocationId, ResultsWriter resultsWriter) {
gradle.buildFinished { result ->
def versionStatus = gradle.ext.gradleVersionStatus
if (versionStatus) {
setStepOutput("gradle-version-status", versionStatus)
}
def buildResults = [
rootProjectName: rootProject.name,
rootProjectDir: rootProject.projectDir.absolutePath,
requestedTasks: gradle.startParameter.taskNames.join(" "),
gradleVersion: GradleVersion.current().version,
versionStatus: versionStatus,
gradleHomeDir: gradle.gradleHomeDir.absolutePath,
buildFailed: result.failure != null,
configCacheHit: false
@@ -146,7 +110,13 @@ void captureUsingBuildScanPublished(buildScanExtension, String invocationId, Res
]
resultsWriter.writeToResultsFile("build-scans", invocationId, scanResults)
setStepOutput("build-scan-url", buildScan.buildScanUri.toString())
def githubOutput = System.getenv("GITHUB_OUTPUT")
if (githubOutput) {
new File(githubOutput) << "build-scan-url=${buildScan.buildScanUri}\n"
} else {
// Retained for compatibility with older GHES versions
println("::set-output name=build-scan-url::${buildScan.buildScanUri}")
}
}
onError { error ->
+2 -3
View File
@@ -19,7 +19,7 @@ import {
} from './configuration'
import * as wrapperValidator from './wrapper-validation/wrapper-validator'
import {initializeGradleUserHome} from './gradle-user-home'
import {exportLatestReleasedMajor, reportSupportStatus} from './gradle-support-status'
import {reportSupportStatus} from './gradle-support-status'
const GRADLE_SETUP_VAR = 'GRADLE_BUILD_ACTION_SETUP_COMPLETED'
const GRADLE_USER_HOME = 'GRADLE_USER_HOME'
@@ -47,7 +47,6 @@ export async function setup(
core.saveState(GRADLE_USER_HOME, gradleUserHome)
initializeGradleUserHome(userHome, gradleUserHome, cacheConfig.getCacheEncryptionKey())
exportLatestReleasedMajor()
// Exchange the long-lived access key(s) for short-lived tokens, resolving the token for the
// configured Develocity server and retaining it for the post-action (save) step.
@@ -91,7 +90,7 @@ export async function complete(
markBuildResultsProcessed()
reportSupportStatus(buildResults)
reportSupportStatus(buildResults.map(result => result.gradleVersion))
core.info('Completed post-action step')