diff --git a/build/.run/Artifacts DotnetTool Test.run.xml b/build/.run/Artifacts DotnetTool Test.run.xml
index 03f11e56ff..ffb49db890 100644
--- a/build/.run/Artifacts DotnetTool Test.run.xml
+++ b/build/.run/Artifacts DotnetTool Test.run.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/build/.run/Artifacts MsBuildCore Test.run.xml b/build/.run/Artifacts MsBuildCore Test.run.xml
index c0cdd7b340..8478f08108 100644
--- a/build/.run/Artifacts MsBuildCore Test.run.xml
+++ b/build/.run/Artifacts MsBuildCore Test.run.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/build/.run/Artifacts Native Test.run.xml b/build/.run/Artifacts Native Test.run.xml
index 072c319921..b7ea118f83 100644
--- a/build/.run/Artifacts Native Test.run.xml
+++ b/build/.run/Artifacts Native Test.run.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/build/.run/Artifacts Prepare.run.xml b/build/.run/Artifacts Prepare.run.xml
index f416a721ff..43c9e42042 100644
--- a/build/.run/Artifacts Prepare.run.xml
+++ b/build/.run/Artifacts Prepare.run.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/build/.run/Artifacts Test.run.xml b/build/.run/Artifacts Test.run.xml
index 89a2ae0f76..b9807ea4a4 100644
--- a/build/.run/Artifacts Test.run.xml
+++ b/build/.run/Artifacts Test.run.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/build/.run/Docker Build.run.xml b/build/.run/Docker Build.run.xml
index ee230e7d4d..b2da1eadd5 100644
--- a/build/.run/Docker Build.run.xml
+++ b/build/.run/Docker Build.run.xml
@@ -1,7 +1,7 @@
-
+
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
diff --git a/build/.run/Docker Manifest.run.xml b/build/.run/Docker Manifest.run.xml
index 6b6293a626..deb625e045 100644
--- a/build/.run/Docker Manifest.run.xml
+++ b/build/.run/Docker Manifest.run.xml
@@ -1,7 +1,7 @@
-
+
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
diff --git a/build/.run/Docker Publish.run.xml b/build/.run/Docker Publish.run.xml
index ea23af56ab..25a5f9d7a7 100644
--- a/build/.run/Docker Publish.run.xml
+++ b/build/.run/Docker Publish.run.xml
@@ -1,7 +1,7 @@
-
+
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
diff --git a/build/.run/Docker Test.run.xml b/build/.run/Docker Test.run.xml
index 09ac793b19..f7664d6759 100644
--- a/build/.run/Docker Test.run.xml
+++ b/build/.run/Docker Test.run.xml
@@ -1,7 +1,7 @@
-
+
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
diff --git a/build/.run/PublishCoverage.run.xml b/build/.run/PublishCoverage.run.xml
index 35d4a55936..1b2c752e41 100644
--- a/build/.run/PublishCoverage.run.xml
+++ b/build/.run/PublishCoverage.run.xml
@@ -1,7 +1,7 @@
-
+
@@ -21,4 +21,4 @@
-
\ No newline at end of file
+
diff --git a/build/.run/UnitTest (8.0).run.xml b/build/.run/UnitTest (8.0).run.xml
index e60688bff1..2c39db1e1c 100644
--- a/build/.run/UnitTest (8.0).run.xml
+++ b/build/.run/UnitTest (8.0).run.xml
@@ -1,7 +1,7 @@
-
+
-
+
@@ -17,4 +17,4 @@
-
\ No newline at end of file
+
diff --git a/build/artifacts/BuildContext.cs b/build/artifacts/BuildContext.cs
index 9c3b353ede..6a1c373d95 100644
--- a/build/artifacts/BuildContext.cs
+++ b/build/artifacts/BuildContext.cs
@@ -1,12 +1,8 @@
-using Common.Utilities;
+using Common.Context;
namespace Artifacts;
-public class BuildContext(ICakeContext context) : BuildContextBase(context)
+public class BuildContext(ICakeContext context) : DockerBuildContext(context)
{
public string MsBuildConfiguration { get; } = Constants.DefaultConfiguration;
-
- public bool IsDockerOnLinux { get; set; }
-
- public IEnumerable Images { get; set; } = new List();
}
diff --git a/build/artifacts/BuildLifetime.cs b/build/artifacts/BuildLifetime.cs
index 99b5ffe177..5b74fe09c0 100644
--- a/build/artifacts/BuildLifetime.cs
+++ b/build/artifacts/BuildLifetime.cs
@@ -1,39 +1,8 @@
using Common.Lifetime;
-using Common.Utilities;
namespace Artifacts;
-public class BuildLifetime : BuildLifetimeBase
+public class BuildLifetime : DockerBuildLifetime
{
- public override void Setup(BuildContext context, ISetupContext info)
- {
- base.Setup(context, info);
-
- context.IsDockerOnLinux = context.DockerCustomCommand("info --format '{{.OSType}}'").First().Replace("'", string.Empty) == "linux";
-
- var dockerRegistry = context.Argument(Arguments.DockerRegistry, DockerRegistry.DockerHub);
- var dotnetVersion = context.Argument(Arguments.DotnetVersion, string.Empty).ToLower();
- var dockerDistro = context.Argument(Arguments.DockerDistro, string.Empty).ToLower();
-
- var versions = string.IsNullOrWhiteSpace(dotnetVersion) ? Constants.DotnetVersions : [dotnetVersion];
- var distros = string.IsNullOrWhiteSpace(dockerDistro) ? Constants.DockerDistros : [dockerDistro];
-
- var architectures = context.HasArgument(Arguments.Architecture) ? context.Arguments(Arguments.Architecture) : Constants.ArchToBuild;
- var platformArch = context.IsRunningOnAmd64() ? Architecture.Amd64 : Architecture.Arm64;
-
- var registry = dockerRegistry == DockerRegistry.DockerHub ? Constants.DockerHubRegistry : Constants.GitHubContainerRegistry;
- context.Images = from version in versions
- from distro in distros
- from arch in architectures
- select new DockerImage(distro, version, arch, registry, true);
-
- context.StartGroup("Build Setup");
-
- LogBuildInformation(context);
-
- context.Information($"IsDockerOnLinux: {context.IsDockerOnLinux}");
- context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}, Architecture: {platformArch}");
-
- context.EndGroup();
- }
+ protected override bool UseBaseImage => true;
}
diff --git a/build/build/Tasks/BuildPrepare.cs b/build/build/Tasks/BuildPrepare.cs
index 7ff7d4c1b0..4eff4d38c7 100644
--- a/build/build/Tasks/BuildPrepare.cs
+++ b/build/build/Tasks/BuildPrepare.cs
@@ -25,7 +25,7 @@ public override void Run(BuildContext context)
Verbosity = DotNetVerbosity.Minimal,
Configuration = Constants.DefaultConfiguration,
OutputDirectory = Paths.Tools.Combine("gitversion"),
- Framework = $"net{Constants.VersionLatest}",
+ Framework = $"net{Constants.DotnetLtsLatest}",
NoRestore = true,
});
@@ -35,7 +35,7 @@ public override void Run(BuildContext context)
Verbosity = DotNetVerbosity.Minimal,
Configuration = Constants.DefaultConfiguration,
OutputDirectory = Paths.Tools.Combine("schema"),
- Framework = $"net{Constants.VersionLatest}",
+ Framework = $"net{Constants.DotnetLtsLatest}",
NoRestore = true,
});
}
diff --git a/build/build/Tasks/Package/PackagePrepare.cs b/build/build/Tasks/Package/PackagePrepare.cs
index 7526ecffc9..096384779f 100644
--- a/build/build/Tasks/Package/PackagePrepare.cs
+++ b/build/build/Tasks/Package/PackagePrepare.cs
@@ -51,7 +51,7 @@ private static DirectoryPath PackPrepareNative(BuildContext context, string runt
var settings = new DotNetPublishSettings
{
- Framework = $"net{Constants.VersionLatest}",
+ Framework = $"net{Constants.DotnetLtsLatest}",
Runtime = runtime,
NoRestore = false,
Configuration = context.MsBuildConfiguration,
diff --git a/build/build/Tasks/Test/UnitTest.cs b/build/build/Tasks/Test/UnitTest.cs
index 727d3e940f..e66f91b2e9 100644
--- a/build/build/Tasks/Test/UnitTest.cs
+++ b/build/build/Tasks/Test/UnitTest.cs
@@ -20,6 +20,10 @@ public override void Run(BuildContext context)
var frameworks = Constants.DotnetVersions;
if (!string.IsNullOrWhiteSpace(dotnetVersion))
{
+ if (string.Equals(dotnetVersion, "lts-latest", StringComparison.OrdinalIgnoreCase))
+ {
+ dotnetVersion = Constants.DotnetLtsLatest;
+ }
if (!frameworks.Contains(dotnetVersion, StringComparer.OrdinalIgnoreCase))
{
throw new Exception($"Dotnet Target {dotnetVersion} is not supported at the moment");
diff --git a/build/common/Context/DockerBuildContext.cs b/build/common/Context/DockerBuildContext.cs
new file mode 100644
index 0000000000..d78a57642b
--- /dev/null
+++ b/build/common/Context/DockerBuildContext.cs
@@ -0,0 +1,13 @@
+using Common.Utilities;
+
+namespace Common.Context;
+
+public class DockerBuildContext(ICakeContext context) : BuildContextBase(context)
+{
+ public bool IsDockerOnLinux { get; set; }
+
+ public IEnumerable Images { get; set; } = new List();
+ public DockerRegistry DockerRegistry { get; set; }
+ public ICollection Architectures { get; set; } = new List();
+}
+
diff --git a/build/common/Lifetime/BuildLifetimeBase.cs b/build/common/Lifetime/BuildLifetimeBase.cs
index 139609d0f5..98a431ef65 100644
--- a/build/common/Lifetime/BuildLifetimeBase.cs
+++ b/build/common/Lifetime/BuildLifetimeBase.cs
@@ -32,7 +32,7 @@ public override void Setup(T context, ISetupContext info)
}
var gitVersionPath = context.GetGitVersionDotnetToolLocation();
- if (gitVersionPath is null || context.FileExists(gitVersionPath) is false)
+ if (gitVersionPath is null || !context.FileExists(gitVersionPath))
{
throw new FileNotFoundException("Failed to locate the Release build of gitversion.dll in ./tools/gitversion. Try running \"./build.ps1 -Stage build -Target BuildPrepare\"");
}
diff --git a/build/common/Lifetime/DockerBuildLifetime.cs b/build/common/Lifetime/DockerBuildLifetime.cs
new file mode 100644
index 0000000000..73e1412518
--- /dev/null
+++ b/build/common/Lifetime/DockerBuildLifetime.cs
@@ -0,0 +1,54 @@
+using Common.Context;
+using Common.Utilities;
+
+namespace Common.Lifetime;
+
+public abstract class DockerBuildLifetime : BuildLifetimeBase
+ where TContext : DockerBuildContext
+{
+ protected virtual bool UseBaseImage => false;
+
+ public override void Setup(TContext context, ISetupContext info)
+ {
+ base.Setup(context, info);
+
+ context.IsDockerOnLinux = context.DockerCustomCommand("info --format '{{.OSType}}'").First().Replace("'", string.Empty) == "linux";
+
+ var dockerRegistry = context.Argument(Arguments.DockerRegistry, DockerRegistry.DockerHub);
+ var dotnetVersion = context.Argument(Arguments.DotnetVersion, string.Empty).ToLower();
+ var dockerDistro = context.Argument(Arguments.DockerDistro, string.Empty).ToLower();
+
+ var versions = string.IsNullOrWhiteSpace(dotnetVersion)
+ ? Constants.DotnetVersions
+ : string.Equals(dotnetVersion, "lts-latest", StringComparison.OrdinalIgnoreCase)
+ ? [Constants.DotnetLtsLatest]
+ : [dotnetVersion];
+
+ var distros = string.IsNullOrWhiteSpace(dockerDistro)
+ ? Constants.DockerDistros
+ : string.Equals(dockerDistro, "distro-latest", StringComparison.OrdinalIgnoreCase)
+ ? [Constants.AlpineLatest]
+ : [dockerDistro];
+
+ var architectures = context.HasArgument(Arguments.Architecture) ? context.Arguments(Arguments.Architecture) : Constants.ArchToBuild;
+ var platformArch = context.IsRunningOnAmd64() ? Architecture.Amd64 : Architecture.Arm64;
+
+ var registry = dockerRegistry == DockerRegistry.DockerHub ? Constants.DockerHubRegistry : Constants.GitHubContainerRegistry;
+
+ context.DockerRegistry = dockerRegistry;
+ context.Architectures = architectures;
+ context.Images = from version in versions
+ from distro in distros
+ from arch in architectures
+ select new DockerImage(distro, version, arch, registry, UseBaseImage);
+
+ context.StartGroup("Build Setup");
+
+ LogBuildInformation(context);
+
+ context.Information($"IsDockerOnLinux: {context.IsDockerOnLinux}");
+ context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}, Architecture: {platformArch}");
+ context.EndGroup();
+ }
+}
+
diff --git a/build/common/Utilities/Constants.cs b/build/common/Utilities/Constants.cs
index 4e781611f7..49eac5f818 100644
--- a/build/common/Utilities/Constants.cs
+++ b/build/common/Utilities/Constants.cs
@@ -6,8 +6,8 @@ public static class Constants
public const string RepoOwner = "GitTools";
public const string Repository = "GitVersion";
- public const string VersionLatest = "8.0";
- public static readonly string[] DotnetVersions = [VersionLatest, "9.0"];
+ public const string DotnetLtsLatest = "8.0";
+ public static readonly string[] DotnetVersions = [DotnetLtsLatest, "9.0"];
public const string DefaultBranch = "main";
public const string DefaultConfiguration = "Release";
diff --git a/build/common/Utilities/ContextExtensions.cs b/build/common/Utilities/ContextExtensions.cs
index fc5c564072..049420f969 100644
--- a/build/common/Utilities/ContextExtensions.cs
+++ b/build/common/Utilities/ContextExtensions.cs
@@ -180,7 +180,7 @@ public static string GetRepositoryName(this ICakeContext context)
private static void EndGroup(this IAzurePipelinesCommands _, ICakeContext context) => context.Information("##[endgroup]");
public static FilePath? GetGitVersionToolLocation(this ICakeContext context) =>
- context.GetFiles($"src/GitVersion.App/bin/{Constants.DefaultConfiguration}/net{Constants.VersionLatest}/gitversion.dll").SingleOrDefault();
+ context.GetFiles($"src/GitVersion.App/bin/{Constants.DefaultConfiguration}/net{Constants.DotnetLtsLatest}/gitversion.dll").SingleOrDefault();
public static FilePath? GetGitVersionDotnetToolLocation(this ICakeContext context) =>
context.MakeAbsolute(Paths.Tools.Combine("gitversion").CombineWithFilePath("gitversion.dll"));
diff --git a/build/common/Utilities/DockerContextExtensions.cs b/build/common/Utilities/DockerContextExtensions.cs
index 06ab4de0ff..0c8443c1f8 100644
--- a/build/common/Utilities/DockerContextExtensions.cs
+++ b/build/common/Utilities/DockerContextExtensions.cs
@@ -210,7 +210,7 @@ private static IEnumerable GetDockerTags(this BuildContextBase context,
$"{name}:{context.Version.SemVersion}-{distro}-{targetFramework}",
};
- if (distro == Constants.DockerDistroLatest && targetFramework == Constants.VersionLatest)
+ if (distro == Constants.DockerDistroLatest && targetFramework == Constants.DotnetLtsLatest)
{
tags.Add($"{name}:{context.Version.SemVersion}");
diff --git a/build/docker/BuildContext.cs b/build/docker/BuildContext.cs
index 232325c31b..6c00a3458b 100644
--- a/build/docker/BuildContext.cs
+++ b/build/docker/BuildContext.cs
@@ -1,14 +1,9 @@
-using Common.Utilities;
+using Common.Context;
using Docker.Utilities;
namespace Docker;
-public class BuildContext(ICakeContext context) : BuildContextBase(context)
+public class BuildContext(ICakeContext context) : DockerBuildContext(context)
{
public Credentials? Credentials { get; set; }
- public bool IsDockerOnLinux { get; set; }
-
- public IEnumerable Images { get; set; } = new List();
- public DockerRegistry DockerRegistry { get; set; }
- public ICollection Architectures { get; set; } = new List();
}
diff --git a/build/docker/BuildLifetime.cs b/build/docker/BuildLifetime.cs
index a518c7b6b2..2097f3b333 100644
--- a/build/docker/BuildLifetime.cs
+++ b/build/docker/BuildLifetime.cs
@@ -1,44 +1,14 @@
using Common.Lifetime;
-using Common.Utilities;
using Docker.Utilities;
namespace Docker;
-public class BuildLifetime : BuildLifetimeBase
+public class BuildLifetime : DockerBuildLifetime
{
public override void Setup(BuildContext context, ISetupContext info)
{
base.Setup(context, info);
context.Credentials = Credentials.GetCredentials(context);
-
- context.IsDockerOnLinux = context.DockerCustomCommand("info --format '{{.OSType}}'").First().Replace("'", "") == "linux";
-
- var dockerRegistry = context.Argument(Arguments.DockerRegistry, DockerRegistry.DockerHub);
- var dotnetVersion = context.Argument(Arguments.DotnetVersion, string.Empty).ToLower();
- var dockerDistro = context.Argument(Arguments.DockerDistro, string.Empty).ToLower();
-
- var versions = string.IsNullOrWhiteSpace(dotnetVersion) ? Constants.DotnetVersions : [dotnetVersion];
- var distros = string.IsNullOrWhiteSpace(dockerDistro) ? Constants.DockerDistros : [dockerDistro];
-
- var architectures = context.HasArgument(Arguments.Architecture) ? context.Arguments(Arguments.Architecture) : Constants.ArchToBuild;
- var platformArch = context.IsRunningOnAmd64() ? Architecture.Amd64 : Architecture.Arm64;
-
- var registry = dockerRegistry == DockerRegistry.DockerHub ? Constants.DockerHubRegistry : Constants.GitHubContainerRegistry;
-
- context.DockerRegistry = dockerRegistry;
- context.Architectures = architectures;
- context.Images = from version in versions
- from distro in distros
- from arch in architectures
- select new DockerImage(distro, version, arch, registry, false);
-
- context.StartGroup("Build Setup");
-
- LogBuildInformation(context);
-
- context.Information($"IsDockerOnLinux: {context.IsDockerOnLinux}");
- context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}, Architecture: {platformArch}");
- context.EndGroup();
}
}
diff --git a/build/docker/Dockerfile b/build/docker/Dockerfile
index 45891b67c8..aa95e656a6 100644
--- a/build/docker/Dockerfile
+++ b/build/docker/Dockerfile
@@ -1,7 +1,7 @@
ARG REGISTRY='docker.io'
ARG DISTRO='debian.12'
ARG DOTNET_VERSION='8.0'
-ARG VERSION='5.12.0'
+ARG VERSION='6.4.0'
FROM $REGISTRY/gittools/build-images:$DISTRO-sdk-$DOTNET_VERSION as installer
ARG nugetFolder
diff --git a/build/docker/Tasks/DockerHubReadmePublish.cs b/build/docker/Tasks/DockerHubReadmePublish.cs
index 01ce452478..1cb840118c 100644
--- a/build/docker/Tasks/DockerHubReadmePublish.cs
+++ b/build/docker/Tasks/DockerHubReadmePublish.cs
@@ -57,7 +57,7 @@ private static string GetReadmeContent(BuildContextBase context)
ArgumentNullException.ThrowIfNull(context.Version);
var version = context.Version.GitVersion.MajorMinorPatch;
const string distro = Constants.AlpineLatest;
- const string dotnetVersion = Constants.VersionLatest;
+ const string dotnetVersion = Constants.DotnetLtsLatest;
var tag = $"{version}-{distro}-{dotnetVersion}";
// language=markdown
var readme = $"""