From 73928e2b2573935e753163390d511979f544138a Mon Sep 17 00:00:00 2001 From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Date: Wed, 19 Feb 2025 21:37:28 +0100 Subject: [PATCH] [Fleet] allow alpha, beta, rc suffixes in agent versions (#211787) ## Summary Closes https://github.com/elastic/kibana/issues/211777 Add agent flyout should show `9.0.0-beta1` now: image When `9.0.0` comes out, that should show up as latest. For example, `8.0.0` versions come back in this order: image ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios (cherry picked from commit ba2caf92c6e70d94d9743ff7628400750cb35d51) --- .../server/services/agents/versions.test.ts | 14 +++++++++++++- .../fleet/server/services/agents/versions.ts | 16 +++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) 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)) );