Skip to content

Commit 4d271c1

Browse files
feat: add EOL date to notification
1 parent a0abeb9 commit 4d271c1

File tree

4 files changed

+91
-32
lines changed

4 files changed

+91
-32
lines changed

src/upgrade/assessmentManager.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,48 +13,47 @@ import { sendInfo } from 'vscode-extension-telemetry-wrapper';
1313

1414
function getJavaIssues(data: INodeData): UpgradeIssue[] {
1515
const javaVersion = data.metaData?.MaxSourceVersion as number | undefined;
16-
const { name, reason, supportedVersion, suggestedVersion } = DEPENDENCY_JAVA_RUNTIME;
16+
const { name, supportedVersion } = DEPENDENCY_JAVA_RUNTIME;
1717
if (!javaVersion) {
1818
return [];
1919
}
2020
const currentSemVer = semver.coerce(javaVersion);
2121
if (currentSemVer && !semver.satisfies(currentSemVer, supportedVersion)) {
2222
return [{
23+
...DEPENDENCY_JAVA_RUNTIME,
2324
packageId: Upgrade.PACKAGE_ID_FOR_JAVA_RUNTIME,
2425
packageDisplayName: name,
2526
currentVersion: String(javaVersion),
26-
reason,
27-
suggestedVersion,
2827
}];
2928
}
3029

3130
return [];
3231
}
3332

34-
function getUpgradeForDependency(versionString: string, supportedVersionDefinition: DependencyCheckItem): Omit<UpgradeIssue, "packageId"> | null {
33+
function getUpgradeForDependency(versionString: string, supportedVersionDefinition: DependencyCheckItem, packageId: string): UpgradeIssue | null {
3534
const { reason } = supportedVersionDefinition;
3635
switch (reason) {
3736
case UpgradeReason.DEPRECATED: {
38-
const { alternative } = supportedVersionDefinition;
3937
return {
38+
...supportedVersionDefinition,
4039
packageDisplayName: supportedVersionDefinition.name,
4140
reason,
4241
currentVersion: versionString,
43-
suggestedVersion: alternative,
42+
packageId,
4443
};
4544
}
4645
case UpgradeReason.END_OF_LIFE: {
4746
const currentSemVer = semver.coerce(versionString);
4847
if (currentSemVer && !semver.satisfies(currentSemVer, supportedVersionDefinition.supportedVersion)) {
4948
return {
49+
...supportedVersionDefinition,
5050
packageDisplayName: supportedVersionDefinition.name,
5151
reason,
5252
currentVersion: versionString,
53-
suggestedVersion: supportedVersionDefinition.suggestedVersion,
53+
packageId,
5454
};
5555
}
5656
}
57-
5857
}
5958

6059
return null;
@@ -70,11 +69,7 @@ function getDependencyIssue(data: INodeData): UpgradeIssue | null {
7069
return null;
7170
}
7271

73-
const upgrade = getUpgradeForDependency(versionString, supportedVersionDefinition);
74-
if (upgrade) {
75-
return { ...upgrade, packageId };
76-
}
77-
return null;
72+
return getUpgradeForDependency(versionString, supportedVersionDefinition, packageId);
7873
}
7974

8075
async function getDependencyIssues(projectNode: INodeData): Promise<UpgradeIssue[]> {

src/upgrade/dependency.metadata.ts

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,24 @@ const DEPENDENCIES_TO_SCAN: DependencyCheckMetadata = {
2121
"reason": UpgradeReason.END_OF_LIFE,
2222
"name": "Spring Boot",
2323
"supportedVersion": "2.7.x || >=3.2.x",
24+
"eolDate": {
25+
"4.0.x": "2027-12",
26+
"3.5.x": "2032-06",
27+
"3.4.x": "2026-12",
28+
"3.3.x": "2026-06",
29+
"3.2.x": "2025-12",
30+
"3.1.x": "2025-06",
31+
"3.0.x": "2024-12",
32+
"2.7.x": "2029-06",
33+
"2.6.x": "2024-02",
34+
"2.5.x": "2023-08",
35+
"2.4.x": "2023-02",
36+
"2.3.x": "2022-08",
37+
"2.2.x": "2022-01",
38+
"2.1.x": "2021-01",
39+
"2.0.x": "2020-06",
40+
"1.5.x": "2020-11",
41+
},
2442
"suggestedVersion": {
2543
"name": "3.5",
2644
"description": "latest stable release",
@@ -30,6 +48,17 @@ const DEPENDENCIES_TO_SCAN: DependencyCheckMetadata = {
3048
"reason": UpgradeReason.END_OF_LIFE,
3149
"name": "Spring Framework",
3250
"supportedVersion": "5.3.x || >=6.2.x",
51+
"eolDate": {
52+
"7.0.x": "2028-06",
53+
"6.2.x": "2032-06",
54+
"6.1.x": "2026-06",
55+
"6.0.x": "2025-08",
56+
"5.3.x": "2029-06",
57+
"5.2.x": "2023-12",
58+
"5.1.x": "2022-12",
59+
"5.0.x": "2022-12",
60+
"4.3.x": "2020-12",
61+
},
3362
"suggestedVersion": {
3463
"name": "3.5",
3564
"description": "latest stable release",
@@ -39,6 +68,25 @@ const DEPENDENCIES_TO_SCAN: DependencyCheckMetadata = {
3968
"reason": UpgradeReason.END_OF_LIFE,
4069
"name": "Spring Security",
4170
"supportedVersion": "5.7.x || 5.8.x || >=6.2.x",
71+
"eolDate": {
72+
"7.0.x": "2027-12",
73+
"6.5.x": "2032-06",
74+
"6.4.x": "2026-12",
75+
"6.3.x": "2026-06",
76+
"6.2.x": "2025-12",
77+
"6.1.x": "2025-06",
78+
"6.0.x": "2024-12",
79+
"5.8.x": "2029-06",
80+
"5.7.x": "2029-06",
81+
"5.6.x": "2024-02",
82+
"5.5.x": "2023-08",
83+
"5.4.x": "2023-02",
84+
"5.3.x": "2022-08",
85+
"5.2.x": "2022-01",
86+
"5.1.x": "2021-01",
87+
"5.0.x": "2020-06",
88+
"4.2.x": "2020-11",
89+
},
4290
"suggestedVersion": {
4391
"name": "3.5",
4492
"description": "latest stable release",
@@ -47,7 +95,7 @@ const DEPENDENCIES_TO_SCAN: DependencyCheckMetadata = {
4795
"javax:*": {
4896
"reason": UpgradeReason.DEPRECATED,
4997
"name": "Java EE",
50-
"alternative": {
98+
"suggestedVersion": {
5199
"name": "Jakarta EE 10",
52100
"description": "latest release with wide Java runtime version support",
53101

src/upgrade/type.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
// Licensed under the MIT license.
33

44
export type UpgradeTarget = { name: string; description: string };
5-
export type DependencyCheckItemBase = { name: string, reason: UpgradeReason };
6-
export type DependencyCheckItemEol = DependencyCheckItemBase
7-
& { reason: UpgradeReason.END_OF_LIFE | UpgradeReason.JRE_TOO_OLD, supportedVersion: string, suggestedVersion: UpgradeTarget };
8-
export type DependencyCheckItemDeprecated = DependencyCheckItemBase & { reason: UpgradeReason.DEPRECATED, alternative: UpgradeTarget };
9-
export type DependencyCheckItem = (DependencyCheckItemEol | DependencyCheckItemDeprecated);
5+
export type DependencyCheckItemBase = { name: string, reason: UpgradeReason, suggestedVersion: UpgradeTarget };
6+
export type DependencyCheckItemEol = DependencyCheckItemBase & { reason: UpgradeReason.END_OF_LIFE, supportedVersion: string, eolDate: Record<string, string> };
7+
export type DependencyCheckItemJreTooOld = DependencyCheckItemBase & { reason: UpgradeReason.JRE_TOO_OLD };
8+
export type DependencyCheckItemDeprecated = DependencyCheckItemBase & { reason: UpgradeReason.DEPRECATED };
9+
export type DependencyCheckItem = (DependencyCheckItemEol | DependencyCheckItemJreTooOld | DependencyCheckItemDeprecated);
1010
export type DependencyCheckMetadata = Record<string, DependencyCheckItem>;
1111

1212
export enum UpgradeReason {
@@ -19,10 +19,8 @@ export enum UpgradeReason {
1919
export type UpgradeIssue = {
2020
packageId: string;
2121
packageDisplayName: string;
22-
reason: UpgradeReason;
2322
currentVersion: string;
24-
suggestedVersion: UpgradeTarget;
25-
};
23+
} & DependencyCheckItem;
2624

2725
export interface IUpgradeIssuesRenderer {
2826
render(issues: UpgradeIssue[]): void;

src/upgrade/utility.ts

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,24 @@
22
// Licensed under the MIT license.
33

44
import { Uri } from "vscode";
5+
import * as semver from "semver";
56
import { UpgradeReason, type UpgradeIssue } from "./type";
67
import { Upgrade } from "../constants";
78

9+
10+
function findEolDate(currentVersion: string, eolDate: Record<string, string>): string | null {
11+
const currentVersionSemVer = semver.coerce(currentVersion);
12+
if (!currentVersionSemVer) {
13+
return null;
14+
}
15+
for (const [versionRange, date] of Object.entries(eolDate)) {
16+
if (semver.satisfies(currentVersionSemVer, versionRange)) {
17+
return date;
18+
}
19+
}
20+
return null;
21+
}
22+
823
export function buildNotificationMessage(issue: UpgradeIssue): string {
924
const {
1025
packageId,
@@ -20,29 +35,31 @@ export function buildNotificationMessage(issue: UpgradeIssue): string {
2035
}
2136

2237
switch (reason) {
23-
case UpgradeReason.CVE: {
24-
return `The current project is using ${packageDisplayName} ${currentVersion}, which has CVE issues. Do you want to upgrade to ${suggestedVersionName} (${suggestedVersionDescription})?`;
38+
case UpgradeReason.END_OF_LIFE: {
39+
const { eolDate } = issue;
40+
const versionEolDate = findEolDate(currentVersion, eolDate);
41+
return `The current project is using ${packageDisplayName} ${currentVersion}, which has reached end of life${versionEolDate ? ` in ${versionEolDate}` : ""
42+
}. Do you want to upgrade to ${suggestedVersionName} (${suggestedVersionDescription})?`;
2543
}
2644
case UpgradeReason.DEPRECATED:
27-
case UpgradeReason.END_OF_LIFE:
2845
default: {
29-
return `The current project is using ${packageDisplayName} ${currentVersion}, which has reached end of life. Do you want to upgrade to ${suggestedVersionName} (${suggestedVersionDescription})?`;
46+
return `The current project is using ${packageDisplayName} ${currentVersion}, which has been deprecated. Do you want to upgrade to ${suggestedVersionName} (${suggestedVersionDescription})?`;
3047
}
3148
}
3249
}
3350

3451

3552
export function buildFixPrompt(issue: UpgradeIssue): string {
36-
const { packageDisplayName, reason, suggestedVersion: { name: suggestedVersionName } } = issue;
53+
const { packageDisplayName, reason } = issue;
3754

3855
switch (reason) {
39-
case UpgradeReason.CVE: {
40-
return `upgrade ${packageDisplayName} to ${suggestedVersionName} to address CVE issues using java upgrade tools`;
41-
}
4256
case UpgradeReason.JRE_TOO_OLD: {
57+
const { suggestedVersion: { name: suggestedVersionName } } = issue;
4358
return `upgrade java runtime to the latest LTS version ${suggestedVersionName} using java upgrade tools`;
4459
}
45-
default: {
60+
case UpgradeReason.END_OF_LIFE:
61+
case UpgradeReason.DEPRECATED: {
62+
const { suggestedVersion: { name: suggestedVersionName } } = issue;
4663
return `upgrade ${packageDisplayName} to ${suggestedVersionName} using java upgrade tools`;
4764
}
4865
}
@@ -54,4 +71,5 @@ export function buildPackageId(groupId: string, artifactId: string): string {
5471

5572
export function normalizePath(path: string): string {
5673
return Uri.parse(path).toString();
57-
}
74+
}
75+

0 commit comments

Comments
 (0)