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/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 @@  - + - \ 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 = $"""