mirror of
https://github.com/gradle/actions.git
synced 2025-04-20 09:49:19 +08:00
Handle snapshots when comparing Gradle versions
This commit is contained in:
parent
9291ac6ca5
commit
05bf82e720
@ -2,7 +2,6 @@ import path from 'path'
|
||||
import fs from 'fs'
|
||||
import * as core from '@actions/core'
|
||||
import * as glob from '@actions/glob'
|
||||
import * as semver from 'semver'
|
||||
|
||||
import {CacheEntryListener, CacheListener} from './cache-reporting'
|
||||
import {cacheDebug, hashFileNames, isCacheDebuggingEnabled, restoreCache, saveCache, tryDelete} from './cache-utils'
|
||||
@ -10,6 +9,7 @@ import {cacheDebug, hashFileNames, isCacheDebuggingEnabled, restoreCache, saveCa
|
||||
import {BuildResult, loadBuildResults} from '../build-results'
|
||||
import {CacheConfig, ACTION_METADATA_DIR} from '../configuration'
|
||||
import {getCacheKeyBase} from './cache-key'
|
||||
import { versionIsAtLeast } from '../execution/gradle'
|
||||
|
||||
const SKIP_RESTORE_VAR = 'GRADLE_BUILD_ACTION_SKIP_RESTORE'
|
||||
const CACHE_PROTOCOL_VERSION = 'v1'
|
||||
@ -434,8 +434,7 @@ export class ConfigurationCacheEntryExtractor extends AbstractEntryExtractor {
|
||||
// If any associated build result used Gradle < 8.6, then mark it as not cacheable
|
||||
if (
|
||||
pathResults.find(result => {
|
||||
const gradleVersion = semver.coerce(result.gradleVersion)
|
||||
return gradleVersion && semver.lt(gradleVersion, '8.6.0')
|
||||
return !versionIsAtLeast(result.gradleVersion, '8.6.0')
|
||||
})
|
||||
) {
|
||||
core.info(
|
||||
|
@ -1,6 +1,8 @@
|
||||
import * as core from '@actions/core'
|
||||
import * as exec from '@actions/exec'
|
||||
|
||||
import * as semver from 'semver'
|
||||
|
||||
import * as provisioner from './provision'
|
||||
import * as gradlew from './gradlew'
|
||||
|
||||
@ -31,3 +33,18 @@ async function executeGradleBuild(executable: string | undefined, root: string,
|
||||
core.setFailed(`Gradle build failed: see console output for details`)
|
||||
}
|
||||
}
|
||||
|
||||
export function versionIsAtLeast(actualVersion: string, requiredVersion: string): boolean {
|
||||
const splitVersion = actualVersion.split('-')
|
||||
const coreVersion = splitVersion[0]
|
||||
const prerelease = splitVersion.length > 1
|
||||
|
||||
const actualSemver = semver.coerce(coreVersion)!
|
||||
const comparisonSemver = semver.coerce(requiredVersion)!
|
||||
|
||||
if (prerelease) {
|
||||
return semver.gt(actualSemver, comparisonSemver)
|
||||
} else {
|
||||
return semver.gte(actualSemver, comparisonSemver)
|
||||
}
|
||||
}
|
||||
|
41
sources/test/jest/gradle-version.test.ts
Normal file
41
sources/test/jest/gradle-version.test.ts
Normal file
@ -0,0 +1,41 @@
|
||||
import { versionIsAtLeast } from '../../src/execution/gradle'
|
||||
|
||||
describe('gradle-version', () => {
|
||||
describe('can compare to', () => {
|
||||
it('same version', async () => {
|
||||
expect(versionIsAtLeast('6.7.1', '6.7.1')).toBe(true)
|
||||
expect(versionIsAtLeast('7.0', '7.0')).toBe(true)
|
||||
expect(versionIsAtLeast('7.0', '7.0.0')).toBe(true)
|
||||
})
|
||||
it('newer version', async () => {
|
||||
expect(versionIsAtLeast('6.7.1', '6.7.2')).toBe(false)
|
||||
expect(versionIsAtLeast('7.0', '8.0')).toBe(false)
|
||||
expect(versionIsAtLeast('7.0', '7.0.1')).toBe(false)
|
||||
})
|
||||
it('older version', async () => {
|
||||
expect(versionIsAtLeast('6.7.2', '6.7.1')).toBe(true)
|
||||
expect(versionIsAtLeast('8.0', '7.0')).toBe(true)
|
||||
expect(versionIsAtLeast('7.0.1', '7.0')).toBe(true)
|
||||
})
|
||||
it('rc version', async () => {
|
||||
expect(versionIsAtLeast('8.0.2-rc-1', '8.0.1')).toBe(true)
|
||||
expect(versionIsAtLeast('8.0.2-rc-1', '8.0.2')).toBe(false)
|
||||
expect(versionIsAtLeast('8.1-rc-1', '8.0')).toBe(true)
|
||||
expect(versionIsAtLeast('8.0-rc-1', '8.0')).toBe(false)
|
||||
})
|
||||
it('snapshot version', async () => {
|
||||
expect(versionIsAtLeast('8.11-20240829002031+0000', '8.10')).toBe(true)
|
||||
expect(versionIsAtLeast('8.11-20240829002031+0000', '8.10.1')).toBe(true)
|
||||
expect(versionIsAtLeast('8.11-20240829002031+0000', '8.11')).toBe(false)
|
||||
|
||||
expect(versionIsAtLeast('8.10.2-20240828012138+0000', '8.10')).toBe(true)
|
||||
expect(versionIsAtLeast('8.10.2-20240828012138+0000', '8.10.1')).toBe(true)
|
||||
expect(versionIsAtLeast('8.10.2-20240828012138+0000', '8.10.2')).toBe(false)
|
||||
expect(versionIsAtLeast('8.10.2-20240828012138+0000', '8.11')).toBe(false)
|
||||
|
||||
expect(versionIsAtLeast('9.1-branch-provider_api_migration_public_api_changes-20240826121451+0000', '9.0')).toBe(true)
|
||||
expect(versionIsAtLeast('9.1-branch-provider_api_migration_public_api_changes-20240826121451+0000', '9.0.1')).toBe(true)
|
||||
expect(versionIsAtLeast('9.1-branch-provider_api_migration_public_api_changes-20240826121451+0000', '9.1')).toBe(false)
|
||||
})
|
||||
})
|
||||
})
|
Loading…
x
Reference in New Issue
Block a user