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:
When `9.0.0` comes out, that should show up as latest. For example,
`8.0.0` versions come back in this order:
### 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))
);