From b76a641e4fb54308101fcda03f49753c6ca10915 Mon Sep 17 00:00:00 2001 From: William Li Date: Sat, 25 Jan 2020 11:17:32 -0800 Subject: [PATCH] Use Task to calculate template versions No behaivor change --- Microsoft.DotNet.Cli.sln | 7 ++ .../CalculateTemplateVersions.cs | 84 +++++++++++++++++++ src/redist/targets/BuildCoreSdkTasks.targets | 1 + src/redist/targets/BundledTemplates.targets | 67 +++++++-------- .../CalculateTemplateVerionsTests.cs | 27 ++++++ .../core-sdk-tasks.Tests.csproj | 14 ++++ 6 files changed, 162 insertions(+), 38 deletions(-) create mode 100644 src/core-sdk-tasks/CalculateTemplateVersions.cs create mode 100644 test/core-sdk-tasks.Tests/CalculateTemplateVerionsTests.cs create mode 100644 test/core-sdk-tasks.Tests/core-sdk-tasks.Tests.csproj diff --git a/Microsoft.DotNet.Cli.sln b/Microsoft.DotNet.Cli.sln index a5f56ff79..22d771abd 100644 --- a/Microsoft.DotNet.Cli.sln +++ b/Microsoft.DotNet.Cli.sln @@ -21,6 +21,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Dotnet.Sdk.Intern EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SdkTests", "test\SdkTests\SdkTests.csproj", "{CB1EE94E-CB83-4071-9DD0-9929AE2B7282}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "core-sdk-tasks.Tests", "test\core-sdk-tasks.Tests\core-sdk-tasks.Tests.csproj", "{658EF9BE-452C-4D31-AA24-B9E2235799A8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -55,6 +57,10 @@ Global {CB1EE94E-CB83-4071-9DD0-9929AE2B7282}.Debug|Any CPU.Build.0 = Debug|Any CPU {CB1EE94E-CB83-4071-9DD0-9929AE2B7282}.Release|Any CPU.ActiveCfg = Release|Any CPU {CB1EE94E-CB83-4071-9DD0-9929AE2B7282}.Release|Any CPU.Build.0 = Release|Any CPU + {658EF9BE-452C-4D31-AA24-B9E2235799A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {658EF9BE-452C-4D31-AA24-B9E2235799A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {658EF9BE-452C-4D31-AA24-B9E2235799A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {658EF9BE-452C-4D31-AA24-B9E2235799A8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -66,6 +72,7 @@ Global {78E15EC1-7732-41E3-8591-934E9F583254} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7} {7EE15292-2CAD-44FA-8A1F-BAC4688A49E0} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F} {CB1EE94E-CB83-4071-9DD0-9929AE2B7282} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7} + {658EF9BE-452C-4D31-AA24-B9E2235799A8} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B526D2CE-EE2D-4AD4-93EF-1867D90FF1F5} diff --git a/src/core-sdk-tasks/CalculateTemplateVersions.cs b/src/core-sdk-tasks/CalculateTemplateVersions.cs new file mode 100644 index 000000000..7d02618d3 --- /dev/null +++ b/src/core-sdk-tasks/CalculateTemplateVersions.cs @@ -0,0 +1,84 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; + +namespace Microsoft.DotNet.Cli.Build +{ + public class CalculateTemplateVersions : Task + { + [Required] + public string AspNetCorePackageVersionTemplate { get; set; } + + [Required] + public string GitCommitCount { get; set; } + + [Required] + public string VersionSuffix { get; set; } + + [Output] + public string BundledTemplateMSIVersion { get; set; } + + [Output] + public string BundledTemplateInstallPath { get; set; } + + [Output] + public string BundledTemplateMajorMinorVersion { get; set; } + + public override bool Execute() + { + var result = Calculate(AspNetCorePackageVersionTemplate, GitCommitCount, VersionSuffix); + BundledTemplateMSIVersion = result.BundledTemplateMsiVersion; + BundledTemplateInstallPath = result.BundledTemplateInstallPath; + BundledTemplateMajorMinorVersion = result.BundledTemplateMajorMinorVersion; + + return true; + } + + public static + (string BundledTemplateMsiVersion, + string BundledTemplateInstallPath, + string BundledTemplateMajorMinorVersion) Calculate(string aspNetCorePackageVersionTemplate, + string gitCommitCount, string versionSuffix) + { + (bool isStableVersion, string aspNetCoreVersionMajorMinorPatchVersion) = + GetAspNetCoreVersionMajorMinorPatchVersion(aspNetCorePackageVersionTemplate); + + var bundledTemplateMsiVersion = $"{aspNetCoreVersionMajorMinorPatchVersion}.{gitCommitCount}"; + + string bundledTemplateInstallPath = isStableVersion + ? aspNetCoreVersionMajorMinorPatchVersion + : $"{aspNetCoreVersionMajorMinorPatchVersion}-{versionSuffix}"; + + var parsedAspNetCoreVersionMajorMinorPatchVersion = + System.Version.Parse(aspNetCoreVersionMajorMinorPatchVersion); + var bundledTemplateMajorMinorVersion = + $"{parsedAspNetCoreVersionMajorMinorPatchVersion.Major}.{parsedAspNetCoreVersionMajorMinorPatchVersion.Minor}"; + + return ( + bundledTemplateMsiVersion, + bundledTemplateInstallPath, + bundledTemplateMajorMinorVersion); + } + + private static (bool isStableVersion, string aspNetCoreVersionMajorMinorPatchVersion) + GetAspNetCoreVersionMajorMinorPatchVersion(string aspNetCorePackageVersionTemplate) + { + var indexOfAspNetCoreVersionPreReleaseSeparator = aspNetCorePackageVersionTemplate.IndexOf('-'); + string aspNetCoreVersionMajorMinorPatchVersion; + if (indexOfAspNetCoreVersionPreReleaseSeparator != -1) + { + aspNetCoreVersionMajorMinorPatchVersion = + aspNetCorePackageVersionTemplate.Substring(0, indexOfAspNetCoreVersionPreReleaseSeparator); + } + else + { + aspNetCoreVersionMajorMinorPatchVersion = aspNetCorePackageVersionTemplate; + } + + return (indexOfAspNetCoreVersionPreReleaseSeparator == -1, aspNetCoreVersionMajorMinorPatchVersion); + } + } +} diff --git a/src/redist/targets/BuildCoreSdkTasks.targets b/src/redist/targets/BuildCoreSdkTasks.targets index 7ffb389a9..d876cb37f 100644 --- a/src/redist/targets/BuildCoreSdkTasks.targets +++ b/src/redist/targets/BuildCoreSdkTasks.targets @@ -19,6 +19,7 @@ Properties="ArtifactsDir=$(ArtifactsDir)tasks\"/> + diff --git a/src/redist/targets/BundledTemplates.targets b/src/redist/targets/BundledTemplates.targets index c24479389..709da201f 100644 --- a/src/redist/targets/BundledTemplates.targets +++ b/src/redist/targets/BundledTemplates.targets @@ -1,47 +1,38 @@ - - $(AspNetCorePackageVersionFor31Templates.IndexOf('-')) - $(AspNetCorePackageVersionFor31Templates) - $(AspNetCorePackageVersionFor31Templates.Substring(0, $(AspNetCore31VersionPreReleaseSeparator))) - $(AspNetCore31VersionMajorMinorPatchVersion).$(GitCommitCount) - $(AspNetCore31VersionMajorMinorPatchVersion) - $(BundledTemplates31InstallPath)-$(VersionSuffix) - $([MSBuild]::Add($(AspNetCore31VersionMajorMinorPatchVersion.IndexOf('.')), 1)) - $(AspNetCore31VersionMajorMinorPatchVersion.IndexOf('.', $(Templates31VersionPatchSeparatorIndex))) - $(AspNetCore31VersionMajorMinorPatchVersion.Substring(0, $(Templates31VersionPatchSeparatorIndex))) - $(AspNetCorePackageVersionFor30Templates.IndexOf('-')) - $(AspNetCorePackageVersionFor30Templates) - $(AspNetCorePackageVersionFor30Templates.Substring(0, $(AspNetCore30VersionPreReleaseSeparator))) - $(AspNetCore30VersionMajorMinorPatchVersion).$(GitCommitCount) - $(AspNetCore30VersionMajorMinorPatchVersion) - $(BundledTemplates30InstallPath)-$(VersionSuffix) - $([MSBuild]::Add($(AspNetCore30VersionMajorMinorPatchVersion.IndexOf('.')), 1)) - $(AspNetCore30VersionMajorMinorPatchVersion.IndexOf('.', $(Templates30VersionPatchSeparatorIndex))) - $(AspNetCore30VersionMajorMinorPatchVersion.Substring(0, $(Templates30VersionPatchSeparatorIndex))) + + + + + - $(AspNetCorePackageVersionFor22Templates.IndexOf('-')) - $(AspNetCorePackageVersionFor22Templates) - $(AspNetCorePackageVersionFor22Templates.Substring(0, $(AspNetCore22VersionPreReleaseSeparator))) - $(AspNetCore22VersionMajorMinorPatchVersion).$(GitCommitCount) - $(AspNetCore22VersionMajorMinorPatchVersion) - $(BundledTemplates22InstallPath)-$(VersionSuffix) - $([MSBuild]::Add($(AspNetCore22VersionMajorMinorPatchVersion.IndexOf('.')), 1)) - $(AspNetCore22VersionMajorMinorPatchVersion.IndexOf('.', $(Templates22VersionPatchSeparatorIndex))) - $(AspNetCore22VersionMajorMinorPatchVersion.Substring(0, $(Templates22VersionPatchSeparatorIndex))) + + + + + - $(AspNetCorePackageVersionFor21Templates.IndexOf('-')) - $(AspNetCorePackageVersionFor21Templates) - $(AspNetCorePackageVersionFor21Templates.Substring(0, $(AspNetCore21VersionPreReleaseSeparator))) - $(AspNetCore21VersionMajorMinorPatchVersion).$(GitCommitCount) - $(AspNetCore21VersionMajorMinorPatchVersion) - $(BundledTemplates21InstallPath)-$(VersionSuffix) - $([MSBuild]::Add($(AspNetCore21VersionMajorMinorPatchVersion.IndexOf('.')), 1)) - $(AspNetCore21VersionMajorMinorPatchVersion.IndexOf('.', $(Templates21VersionPatchSeparatorIndex))) - $(AspNetCore21VersionMajorMinorPatchVersion.Substring(0, $(Templates21VersionPatchSeparatorIndex))) - + + + + + + + + + + + diff --git a/test/core-sdk-tasks.Tests/CalculateTemplateVerionsTests.cs b/test/core-sdk-tasks.Tests/CalculateTemplateVerionsTests.cs new file mode 100644 index 000000000..6f5ca3919 --- /dev/null +++ b/test/core-sdk-tasks.Tests/CalculateTemplateVerionsTests.cs @@ -0,0 +1,27 @@ +using FluentAssertions; +using Xunit; +using Microsoft.DotNet.Cli.Build; + +namespace EndToEnd +{ + public class CalculateTemplateVerionsTests + { + [Fact] + public void ItCanCalculateTemplateVersionsInStableBuilds() + { + var result = CalculateTemplateVersions.Calculate("3.1.0", "014885", "dev"); + result.BundledTemplateInstallPath.Should().Be("3.1.0"); + result.BundledTemplateMsiVersion.Should().Be("3.1.0.014885"); + result.BundledTemplateMajorMinorVersion.Should().Be("3.1"); + } + + [Fact] + public void ItCanCalculateTemplateVersionsInNonStableBuilds() + { + var result = CalculateTemplateVersions.Calculate("5.0.0-alpha.1.20071.6", "014885", "dev"); + result.BundledTemplateInstallPath.Should().Be("5.0.0-dev"); + result.BundledTemplateMsiVersion.Should().Be("5.0.0.014885"); + result.BundledTemplateMajorMinorVersion.Should().Be("5.0"); + } + } +} diff --git a/test/core-sdk-tasks.Tests/core-sdk-tasks.Tests.csproj b/test/core-sdk-tasks.Tests/core-sdk-tasks.Tests.csproj new file mode 100644 index 000000000..47b6ce517 --- /dev/null +++ b/test/core-sdk-tasks.Tests/core-sdk-tasks.Tests.csproj @@ -0,0 +1,14 @@ + + + $(CoreSdkTargetFramework);net472 + $(CoreSdkTargetFramework) + + + + + + + + + + \ No newline at end of file