Verify SQL Server lifecycle dates and add SQL Server 2025
Some checks are pending
CI / Integration (mcr.microsoft.com/mssql/server:2017-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2019-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2022-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2025-latest) (push) Blocked by required conditions
CI / Build og unit tests (push) Waiting to run

All mainstream and extended support end dates checked against Microsoft
sources. SQL Server 2025 added (mainstream ends 2031-01-06, extended
2036-01-06), so the lifecycle rule now evaluates 2025 instead of reporting
it as not measurable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
This commit is contained in:
Claude 2026-09-29 05:47:53 +00:00
parent f8aa0c307b
commit 2a950ed4e9
No known key found for this signature in database
2 changed files with 19 additions and 5 deletions

View file

@ -1,6 +1,6 @@
{ {
"source": "https://learn.microsoft.com/lifecycle/products/?terms=SQL%20Server", "source": "https://learn.microsoft.com/lifecycle/products/?terms=SQL%20Server",
"comment": "End of mainstream and extended support per release. null means not yet published in the catalog.", "comment": "End of mainstream and extended support per release (Fixed Lifecycle Policy, RTM/latest service pack). Verified 2026-09-29 against Microsoft Lifecycle and Microsoft SQL Server blog announcements. null means not yet published. Extended Security Updates (paid) are deliberately not included: an instance on ESU is still out of standard support.",
"releases": [ "releases": [
{ "release": "SqlServer2000", "mainstreamEnd": "2008-04-08", "extendedEnd": "2013-04-09" }, { "release": "SqlServer2000", "mainstreamEnd": "2008-04-08", "extendedEnd": "2013-04-09" },
{ "release": "SqlServer2005", "mainstreamEnd": "2011-04-12", "extendedEnd": "2016-04-12" }, { "release": "SqlServer2005", "mainstreamEnd": "2011-04-12", "extendedEnd": "2016-04-12" },
@ -12,6 +12,6 @@
{ "release": "SqlServer2017", "mainstreamEnd": "2022-10-11", "extendedEnd": "2027-10-12" }, { "release": "SqlServer2017", "mainstreamEnd": "2022-10-11", "extendedEnd": "2027-10-12" },
{ "release": "SqlServer2019", "mainstreamEnd": "2025-02-28", "extendedEnd": "2030-01-08" }, { "release": "SqlServer2019", "mainstreamEnd": "2025-02-28", "extendedEnd": "2030-01-08" },
{ "release": "SqlServer2022", "mainstreamEnd": "2028-01-11", "extendedEnd": "2033-01-11" }, { "release": "SqlServer2022", "mainstreamEnd": "2028-01-11", "extendedEnd": "2033-01-11" },
{ "release": "SqlServer2025", "mainstreamEnd": null, "extendedEnd": null } { "release": "SqlServer2025", "mainstreamEnd": "2031-01-06", "extendedEnd": "2036-01-06" }
] ]
} }

View file

@ -58,10 +58,20 @@ public class SupportLifecycleRuleTests
} }
[Fact] [Fact]
public void Release_without_published_dates_is_not_measurable() public void Sql2025_is_in_mainstream_support()
{ {
var evaluation = Rule.Evaluate(TestInstances.Context("17.0.1000.7", Today)); var evaluation = Rule.Evaluate(TestInstances.Context("17.0.1000.7", Today));
Assert.Equal(RuleOutcome.Passed, evaluation.Outcome);
}
[Fact]
public void Release_without_published_dates_is_not_measurable()
{
var catalog = new SupportLifecycleCatalog([new SupportLifecycle(SqlServerRelease.SqlServer2025, null, null)]);
var evaluation = new SupportLifecycleRule(catalog).Evaluate(TestInstances.Context("17.0.1000.7", Today));
Assert.Equal(RuleOutcome.NotMeasurable, evaluation.Outcome); Assert.Equal(RuleOutcome.NotMeasurable, evaluation.Outcome);
} }
@ -81,13 +91,17 @@ public class SupportLifecycleRuleTests
} }
[Fact] [Fact]
public void Catalog_covers_every_known_release() public void Catalog_has_dates_for_every_known_release()
{ {
var catalog = SupportLifecycleCatalog.LoadEmbedded(); var catalog = SupportLifecycleCatalog.LoadEmbedded();
foreach (var release in Enum.GetValues<SqlServerRelease>().Where(r => r != SqlServerRelease.Unknown)) foreach (var release in Enum.GetValues<SqlServerRelease>().Where(r => r != SqlServerRelease.Unknown))
{ {
Assert.NotNull(catalog.Find(release)); var lifecycle = catalog.Find(release);
Assert.NotNull(lifecycle);
Assert.NotNull(lifecycle.MainstreamEnd);
Assert.NotNull(lifecycle.ExtendedEnd);
Assert.True(lifecycle.ExtendedEnd > lifecycle.MainstreamEnd, $"{release}: extended must end after mainstream");
} }
} }
} }