From a9479843d1ed30130339a11a0520cec0a31cc810 Mon Sep 17 00:00:00 2001 From: Norm Johanson Date: Thu, 12 Jun 2025 15:08:07 -0700 Subject: [PATCH] Add .NET 9 container build image support --- .../changes/5450ccb1-5441-4af0-9e84-7db4f788046d.json | 11 +++++++++++ src/Amazon.Lambda.Tools/LambdaUtilities.cs | 8 ++++++-- test/Amazon.Lambda.Tools.Test/UtilitiesTests.cs | 4 ++++ 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 .autover/changes/5450ccb1-5441-4af0-9e84-7db4f788046d.json diff --git a/.autover/changes/5450ccb1-5441-4af0-9e84-7db4f788046d.json b/.autover/changes/5450ccb1-5441-4af0-9e84-7db4f788046d.json new file mode 100644 index 00000000..3ff8fa8b --- /dev/null +++ b/.autover/changes/5450ccb1-5441-4af0-9e84-7db4f788046d.json @@ -0,0 +1,11 @@ +{ + "Projects": [ + { + "Name": "Amazon.Lambda.Tools", + "Type": "Minor", + "ChangelogMessages": [ + "Add container build support for .NET 9. This allows Native AOT .NET 9 Lambda function builds." + ] + } + ] +} \ No newline at end of file diff --git a/src/Amazon.Lambda.Tools/LambdaUtilities.cs b/src/Amazon.Lambda.Tools/LambdaUtilities.cs index 7d706c68..65c7f82c 100644 --- a/src/Amazon.Lambda.Tools/LambdaUtilities.cs +++ b/src/Amazon.Lambda.Tools/LambdaUtilities.cs @@ -26,6 +26,7 @@ namespace Amazon.Lambda.Tools { public static class TargetFrameworkMonikers { + public const string net90 = "net9.0"; public const string net80 = "net8.0"; public const string net70 = "net7.0"; public const string net60 = "net6.0"; @@ -46,7 +47,8 @@ public static class TargetFrameworkMonikers net50, net60, net70, - net80 + net80, + net90 }; } @@ -56,7 +58,7 @@ public static class LambdaUtilities public static readonly IReadOnlyDictionary _lambdaRuntimeToDotnetFramework = new Dictionary() { - {"dotnet8", TargetFrameworkMonikers.net80}, // Use the string version since the SDK hasn't been updated yet. + {Amazon.Lambda.Runtime.Dotnet8.Value, TargetFrameworkMonikers.net80}, {Amazon.Lambda.Runtime.Dotnet6.Value, TargetFrameworkMonikers.net60}, {Amazon.Lambda.Runtime.Dotnetcore31.Value, TargetFrameworkMonikers.netcoreapp31}, {Amazon.Lambda.Runtime.Dotnetcore21.Value, TargetFrameworkMonikers.netcoreapp21}, @@ -121,6 +123,8 @@ public static string GetDefaultBuildImage(string targetFramework, string archite switch (targetFramework?.ToLower()) { + case TargetFrameworkMonikers.net90: + return $"public.ecr.aws/sam/build-dotnet9:latest-{architecture}"; case TargetFrameworkMonikers.net80: return $"public.ecr.aws/sam/build-dotnet8:latest-{architecture}"; case TargetFrameworkMonikers.net70: diff --git a/test/Amazon.Lambda.Tools.Test/UtilitiesTests.cs b/test/Amazon.Lambda.Tools.Test/UtilitiesTests.cs index a67328fc..843b7d92 100644 --- a/test/Amazon.Lambda.Tools.Test/UtilitiesTests.cs +++ b/test/Amazon.Lambda.Tools.Test/UtilitiesTests.cs @@ -175,6 +175,10 @@ public void TestSavingDockerfileInDefaults(string dockerfilePath, string project [InlineData("net7.0", LambdaConstants.ARCHITECTURE_X86_64, "public.ecr.aws/sam/build-dotnet7:latest-x86_64")] [InlineData("net7.0", " ", "public.ecr.aws/sam/build-dotnet7:latest-x86_64")] [InlineData("net7.0", LambdaConstants.ARCHITECTURE_ARM64, "public.ecr.aws/sam/build-dotnet7:latest-arm64")] + [InlineData("net8.0", LambdaConstants.ARCHITECTURE_ARM64, "public.ecr.aws/sam/build-dotnet8:latest-arm64")] + [InlineData("net8.0", LambdaConstants.ARCHITECTURE_X86_64, "public.ecr.aws/sam/build-dotnet8:latest-x86_64")] + [InlineData("net9.0", LambdaConstants.ARCHITECTURE_ARM64, "public.ecr.aws/sam/build-dotnet9:latest-arm64")] + [InlineData("net9.0", LambdaConstants.ARCHITECTURE_X86_64, "public.ecr.aws/sam/build-dotnet9:latest-x86_64")] [InlineData(null, LambdaConstants.ARCHITECTURE_X86_64, "throws")] [InlineData(null, LambdaConstants.ARCHITECTURE_ARM64, "throws")] public void GetDefaultBuildImage(string targetFramework, string architecture, string expectedValue)