diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agents/versions.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/agents/versions.test.ts index b3dc82008f812..b1710f505acbc 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agents/versions.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agents/versions.test.ts @@ -229,14 +229,26 @@ describe('getAvailableVersions', () => { text: jest.fn().mockResolvedValue( JSON.stringify([ [ + { + title: 'Elastic Agent 9.0.0', + version_number: '9.0.0-rc1', + }, { title: 'Elastic Agent 8.0.0', - version_number: '8.0.0-rc1', + version_number: '8.0.0-rc2', }, { title: 'Elastic Agent 8.0.0', version_number: '8.0.0-beta1', }, + { + title: 'Elastic Agent 8.0.0', + version_number: '8.0.0-alpha1', + }, + { + title: 'Elastic Agent 8.0.0', + version_number: '8.0.0-unkown', + }, ], ]) ), diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agents/versions.ts b/x-pack/platform/plugins/shared/fleet/server/services/agents/versions.ts index 7cdfb9c1a5543..3e6a8bb94a8e2 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agents/versions.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agents/versions.ts @@ -15,7 +15,7 @@ import semverGte from 'semver/functions/gte'; import semverGt from 'semver/functions/gt'; import semverRcompare from 'semver/functions/rcompare'; import semverLt from 'semver/functions/lt'; -import semverCoerce from 'semver/functions/coerce'; +import semverParse from 'semver/functions/parse'; import { REPO_ROOT } from '@kbn/repo-info'; @@ -114,8 +114,18 @@ export const getAvailableVersions = async ({ // only want support versions in the final result. We'll also sort by newest version first. availableVersions = uniq( [...availableVersions, ...apiVersions] - .map((item: any) => (item.includes('+build') ? item : semverCoerce(item)?.version || '')) - .filter((v: any) => semverGte(v, MINIMUM_SUPPORTED_VERSION)) + .filter((v: any) => { + const parsedVersion = semverParse(v); + if ( + parsedVersion?.prerelease?.length && + !parsedVersion.prerelease.some( + (prerelease) => typeof prerelease === 'string' && prerelease.includes('+build') + ) + ) { + return false; + } + return semverGte(v, MINIMUM_SUPPORTED_VERSION); + }) .sort((a: any, b: any) => (semverGt(a, b) ? -1 : 1)) );