diff --git a/packaging/windows/host/generatemsi.ps1 b/packaging/windows/host/generatemsi.ps1 index c0ab6f30d..32b741800 100644 --- a/packaging/windows/host/generatemsi.ps1 +++ b/packaging/windows/host/generatemsi.ps1 @@ -6,8 +6,8 @@ param( [Parameter(Mandatory=$true)][string]$DotnetHostMSIOutput, [Parameter(Mandatory=$true)][string]$WixRoot, [Parameter(Mandatory=$true)][string]$ProductMoniker, - [Parameter(Mandatory=$true)][string]$DotnetMSIVersion, - [Parameter(Mandatory=$true)][string]$DotnetCLINugetVersion, + [Parameter(Mandatory=$true)][string]$SharedHostMSIVersion, + [Parameter(Mandatory=$true)][string]$SharedHostNugetVersion, [Parameter(Mandatory=$true)][string]$Architecture, [Parameter(Mandatory=$true)][string]$WixObjRoot ) @@ -29,8 +29,8 @@ function RunCandle -dHostSrc="$SharedHostPublishRoot" ` -dMicrosoftEula="$RepoRoot\packaging\osx\clisdk\resources\en.lproj\eula.rtf" ` -dProductMoniker="$ProductMoniker" ` - -dBuildVersion="$DotnetMSIVersion" ` - -dNugetVersion="$DotnetCLINugetVersion" ` + -dBuildVersion="$SharedHostMSIVersion" ` + -dNugetVersion="$SharedHostNugetVersion" ` -arch $Architecture ` "$AuthWsxRoot\host.wxs" ` "$AuthWsxRoot\provider.wxs" ` diff --git a/scripts/dotnet-cli-build/CompileTargets.cs b/scripts/dotnet-cli-build/CompileTargets.cs index 254a88ae1..d385529f5 100644 --- a/scripts/dotnet-cli-build/CompileTargets.cs +++ b/scripts/dotnet-cli-build/CompileTargets.cs @@ -81,10 +81,10 @@ namespace Microsoft.DotNet.Cli.Build [Target] public static BuildTargetResult GenerateStubHostPackages(BuildTargetContext c) { - var buildVersion = c.BuildContext.Get("BuildVersion"); + var hostVersion = c.BuildContext.Get("HostVersion"); var currentRid = HostPackagePlatformRid; PrepareDummyRuntimeNuGetPackage(DotNetCli.Stage0); - foreach (var hostPackage in buildVersion.LatestHostPackages) + foreach (var hostPackage in hostVersion.LatestHostPackages) { foreach (var rid in HostPackageSupportedRids.Values.Distinct()) { @@ -105,8 +105,8 @@ namespace Microsoft.DotNet.Cli.Build [Target(nameof(PrepareTargets.Init))] public static BuildTargetResult RestoreLockedCoreHost(BuildTargetContext c) { - var buildVersion = c.BuildContext.Get("BuildVersion"); - var lockedHostFxrVersion = buildVersion.LockedHostFxrVersion; + var hostVersion = c.BuildContext.Get("HostVersion"); + var lockedHostFxrVersion = hostVersion.LockedHostFxrVersion; var currentRid = HostPackagePlatformRid; string projectJson = $@"{{ ""dependencies"": {{ @@ -149,7 +149,7 @@ namespace Microsoft.DotNet.Cli.Build [Target(nameof(PrepareTargets.Init))] public static BuildTargetResult CompileCoreHost(BuildTargetContext c) { - var buildVersion = c.BuildContext.Get("BuildVersion"); + var hostVersion = c.BuildContext.Get("HostVersion"); // Generate build files var cmakeOut = Path.Combine(Dirs.CorehostLatest, "cmake"); @@ -173,7 +173,7 @@ namespace Microsoft.DotNet.Cli.Build var ridMacro = $"-DCLI_CMAKE_RUNTIME_ID:STRING={rid}"; var arch = IsWinx86 ? "x86" : "x64"; var baseSupportedRid = $"win7-{arch}"; - var cmakeHostPolicyVer = $"-DCLI_CMAKE_HOST_POLICY_VER:STRING={buildVersion.LatestHostPolicyVersion}"; + var cmakeHostPolicyVer = $"-DCLI_CMAKE_HOST_POLICY_VER:STRING={hostVersion.LatestHostPolicyVersion}"; var cmakeBaseRid = $"-DCLI_CMAKE_PKG_RID:STRING={baseSupportedRid}"; var cmakeCommitHash = $"-DCLI_CMAKE_COMMIT_HASH:STRING={commitHash}"; @@ -215,7 +215,7 @@ namespace Microsoft.DotNet.Cli.Build "--arch", "x64", "--policyver", - buildVersion.LatestHostPolicyVersion, + hostVersion.LatestHostPolicyVersion, "--rid", rid, "--commithash", @@ -233,10 +233,10 @@ namespace Microsoft.DotNet.Cli.Build public static BuildTargetResult PackagePkgProjects(BuildTargetContext c) { var arch = IsWinx86 ? "x86" : "x64"; - - var buildVersion = c.BuildContext.Get("BuildVersion"); - var version = buildVersion.NuGetVersion; - var content = $@"{c.BuildContext["CommitHash"]}{Environment.NewLine}{version}{Environment.NewLine}"; + + var hostVersion = c.BuildContext.Get("HostVersion"); + var hostNugetversion = hostVersion.LatestHostVersion; + var content = $@"{c.BuildContext["CommitHash"]}{Environment.NewLine}{hostNugetversion}{Environment.NewLine}"; var pkgDir = Path.Combine(c.BuildContext.BuildDirectory, "pkg"); File.WriteAllText(Path.Combine(pkgDir, "version.txt"), content); @@ -246,11 +246,11 @@ namespace Microsoft.DotNet.Cli.Build // Workaround to arg escaping adding backslashes for arguments to .cmd scripts. .Environment("__WorkaroundCliCoreHostBuildArch", arch) .Environment("__WorkaroundCliCoreHostBinDir", Dirs.CorehostLatest) - .Environment("__WorkaroundCliCoreHostPolicyVer", buildVersion.LatestHostPolicyVersionNoSuffix) - .Environment("__WorkaroundCliCoreHostFxrVer", buildVersion.LatestHostFxrVersionNoSuffix) - .Environment("__WorkaroundCliCoreHostVer", buildVersion.LatestHostVersionNoSuffix) - .Environment("__WorkaroundCliCoreHostBuildMajor", buildVersion.LatestHostBuildMajor) - .Environment("__WorkaroundCliCoreHostVersionTag", buildVersion.LatestHostPrerelease) + .Environment("__WorkaroundCliCoreHostPolicyVer", hostVersion.LatestHostPolicyVersionNoSuffix) + .Environment("__WorkaroundCliCoreHostFxrVer", hostVersion.LatestHostFxrVersionNoSuffix) + .Environment("__WorkaroundCliCoreHostVer", hostVersion.LatestHostVersionNoSuffix) + .Environment("__WorkaroundCliCoreHostBuildMajor", hostVersion.LatestHostBuildMajor) + .Environment("__WorkaroundCliCoreHostVersionTag", hostVersion.LatestHostPrerelease) .ForwardStdOut() .ForwardStdErr() .Execute() @@ -264,15 +264,15 @@ namespace Microsoft.DotNet.Cli.Build "--hostbindir", Dirs.CorehostLatest, "--policyver", - buildVersion.LatestHostPolicyVersionNoSuffix, + hostVersion.LatestHostPolicyVersionNoSuffix, "--fxrver", - buildVersion.LatestHostFxrVersionNoSuffix, + hostVersion.LatestHostFxrVersionNoSuffix, "--hostver", - buildVersion.LatestHostVersionNoSuffix, + hostVersion.LatestHostVersionNoSuffix, "--build", - buildVersion.LatestHostBuildMajor, + hostVersion.LatestHostBuildMajor, "--vertag", - buildVersion.LatestHostPrerelease); + hostVersion.LatestHostPrerelease); } foreach (var file in Directory.GetFiles(Path.Combine(pkgDir, "bin", "packages"), "*.nupkg")) { @@ -281,7 +281,7 @@ namespace Microsoft.DotNet.Cli.Build Console.WriteLine($"Copying package {fileName} to artifacts directory {Dirs.CorehostLocalPackages}."); } - foreach (var item in buildVersion.LatestHostPackages) + foreach (var item in hostVersion.LatestHostPackages) { var fileFilter = $"runtime.{HostPackagePlatformRid}.{item.Key}.{item.Value}.nupkg"; if (Directory.GetFiles(Dirs.CorehostLocalPackages, fileFilter).Length == 0) diff --git a/scripts/dotnet-cli-build/DebTargets.cs b/scripts/dotnet-cli-build/DebTargets.cs index f9daff95c..a2e960e42 100644 --- a/scripts/dotnet-cli-build/DebTargets.cs +++ b/scripts/dotnet-cli-build/DebTargets.cs @@ -65,7 +65,7 @@ namespace Microsoft.DotNet.Cli.Build public static BuildTargetResult GenerateSharedHostDeb(BuildTargetContext c) { var packageName = Monikers.GetDebianSharedHostPackageName(c); - var version = c.BuildContext.Get("BuildVersion").NuGetVersion; + var version = c.BuildContext.Get("HostVersion").LockedHostVersion; var inputRoot = c.BuildContext.Get("SharedHostPublishRoot"); var debFile = c.BuildContext.Get("SharedHostInstallerFile"); var objRoot = Path.Combine(Dirs.Output, "obj", "debian", "sharedhost"); @@ -79,7 +79,7 @@ namespace Microsoft.DotNet.Cli.Build Directory.CreateDirectory(objRoot); Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "package", "package-sharedhost-debian.sh"), - "--input", inputRoot, "--output", debFile, "-b", Monikers.SharedFxBrandName, + "--input", inputRoot, "--output", debFile, "-b", Monikers.SharedHostBrandName, "--obj-root", objRoot, "--version", version, "-m", manPagesDir) .Execute() .EnsureSuccessful(); diff --git a/scripts/dotnet-cli-build/MsiTargets.cs b/scripts/dotnet-cli-build/MsiTargets.cs index cac997a5f..1fa6a96ce 100644 --- a/scripts/dotnet-cli-build/MsiTargets.cs +++ b/scripts/dotnet-cli-build/MsiTargets.cs @@ -138,6 +138,9 @@ namespace Microsoft.DotNet.Cli.Build [BuildPlatforms(BuildPlatform.Windows)] public static BuildTargetResult GenerateDotnetSharedHostMsi(BuildTargetContext c) { + var hostVersion = c.BuildContext.Get("HostVersion"); + var hostMsiVersion = hostVersion.GenerateMsiVersion(); + var hostNugetVersion = hostVersion.LockedHostVersion; var inputDir = c.BuildContext.Get("SharedHostPublishRoot"); var wixObjRoot = Path.Combine(Dirs.Output, "obj", "wix", "sharedhost"); var sharedHostBrandName = $"'{Monikers.SharedHostBrandName}'"; @@ -150,7 +153,7 @@ namespace Microsoft.DotNet.Cli.Build Cmd("powershell", "-NoProfile", "-NoLogo", Path.Combine(Dirs.RepoRoot, "packaging", "windows", "host", "generatemsi.ps1"), - inputDir, SharedHostMsi, WixRoot, sharedHostBrandName, MsiVersion, CliNugetVersion, Arch, wixObjRoot) + inputDir, SharedHostMsi, WixRoot, sharedHostBrandName, hostMsiVersion, hostNugetVersion, Arch, wixObjRoot) .Execute() .EnsureSuccessful(); return c.Success(); diff --git a/scripts/dotnet-cli-build/PkgTargets.cs b/scripts/dotnet-cli-build/PkgTargets.cs index b539fe59a..599533111 100644 --- a/scripts/dotnet-cli-build/PkgTargets.cs +++ b/scripts/dotnet-cli-build/PkgTargets.cs @@ -28,8 +28,7 @@ namespace Microsoft.DotNet.Cli.Build PkgsIntermediateDir = Path.Combine(Dirs.Packages, "intermediate"); Directory.CreateDirectory(PkgsIntermediateDir); - var hostVersion = c.BuildContext.Get("BuildVersion").ProductionVersion; - SharedHostComponentId = $"com.microsoft.dotnet.sharedhost.{hostVersion}.component.osx.x64"; + SharedHostComponentId = $"com.microsoft.dotnet.sharedhost.component.osx.x64"; string sharedFrameworkNugetName = Monikers.SharedFrameworkName; SharedFrameworkNugetVersion = c.BuildContext.Get("SharedFrameworkNugetVersion"); @@ -171,7 +170,7 @@ namespace Microsoft.DotNet.Cli.Build [BuildPlatforms(BuildPlatform.OSX)] public static BuildTargetResult GenerateSharedHostPkg(BuildTargetContext c) { - string version = c.BuildContext.Get("BuildVersion").NuGetVersion; + string version = c.BuildContext.Get("HostVersion").LockedHostVersion; string outFilePath = Path.Combine(PkgsIntermediateDir, SharedHostComponentId + ".pkg"); string installLocation = "/usr/local/share/dotnet"; string scriptsLocation = Path.Combine(Dirs.RepoRoot, "packaging", "osx", "sharedhost", "scripts"); diff --git a/scripts/dotnet-cli-build/PrepareTargets.cs b/scripts/dotnet-cli-build/PrepareTargets.cs index f36f07e69..3ea825c30 100644 --- a/scripts/dotnet-cli-build/PrepareTargets.cs +++ b/scripts/dotnet-cli-build/PrepareTargets.cs @@ -78,7 +78,14 @@ namespace Microsoft.DotNet.Cli.Build ReleaseSuffix = branchInfo["RELEASE_SUFFIX"], CommitCount = commitCount }; + + var hostVersion = new HostVersion() + { + CommitCount = commitCount + }; + c.BuildContext["BuildVersion"] = buildVersion; + c.BuildContext["HostVersion"] = hostVersion; c.BuildContext["CommitHash"] = commitHash; c.BuildContext["SharedFrameworkNugetVersion"] = buildVersion.NetCoreAppVersion; @@ -143,9 +150,10 @@ namespace Microsoft.DotNet.Cli.Build var cliVersion = c.BuildContext.Get("BuildVersion").NuGetVersion; var sharedFrameworkVersion = c.BuildContext.Get("SharedFrameworkNugetVersion"); + var hostVersion = c.BuildContext.Get("HostVersion").LockedHostVersion; AddInstallerArtifactToContext(c, "dotnet-sdk", "Sdk", cliVersion); - AddInstallerArtifactToContext(c, "dotnet-host", "SharedHost", cliVersion); + AddInstallerArtifactToContext(c, "dotnet-host", "SharedHost", hostVersion); AddInstallerArtifactToContext(c, "dotnet-sharedframework", "SharedFramework", sharedFrameworkVersion); AddInstallerArtifactToContext(c, "dotnet-dev", "CombinedFrameworkSDKHost", cliVersion); AddInstallerArtifactToContext(c, "dotnet", "CombinedFrameworkHost", sharedFrameworkVersion); diff --git a/scripts/dotnet-cli-build/Utils/BuildVersion.cs b/scripts/dotnet-cli-build/Utils/BuildVersion.cs index f77c55420..593c7b362 100644 --- a/scripts/dotnet-cli-build/Utils/BuildVersion.cs +++ b/scripts/dotnet-cli-build/Utils/BuildVersion.cs @@ -2,82 +2,12 @@ namespace Microsoft.DotNet.Cli.Build { - public class BuildVersion + public class BuildVersion : Version { - public int Major { get; set; } - public int Minor { get; set; } - public int Patch { get; set; } - public int CommitCount { get; set; } - public string CommitCountString => CommitCount.ToString("000000"); - public string ReleaseSuffix { get; set; } - public string SimpleVersion => $"{Major}.{Minor}.{Patch}.{CommitCountString}"; public string VersionSuffix => $"{CommitCountString}"; public string NuGetVersion => $"{Major}.{Minor}.{Patch}-{VersionSuffix}"; public string NetCoreAppVersion => $"{Major}.{Minor}.{Patch}-rc2-3{CommitCountString}"; public string ProductionVersion => $"{Major}.{Minor}.{Patch}"; - - // ------------------------------------------HOST-VERSIONING------------------------------------------- - // - // Host versions are independent of CLI versions. Moreover, these version numbers - // are baked into the binary and is used to look up a serviced binary replacement. - // - - // - // Latest hosts for production of nupkgs. - // - - // Version constants without suffix - public string LatestHostVersionNoSuffix => "1.0.1"; - public string LatestHostFxrVersionNoSuffix => "1.0.1"; - public string LatestHostPolicyVersionNoSuffix => "1.0.1"; - public string LatestHostPrerelease => "rc2"; - public string LatestHostBuildMajor => $"{CommitCountString}"; - public string LatestHostSuffix => $"{LatestHostPrerelease}-{LatestHostBuildMajor}-00"; - - // Full versions and package information. - private string LatestHostVersion => $"{LatestHostVersionNoSuffix}-{LatestHostSuffix}"; - private string LatestHostFxrVersion => $"{LatestHostFxrVersionNoSuffix}-{LatestHostSuffix}"; - public string LatestHostPolicyVersion => $"{LatestHostPolicyVersionNoSuffix}-{LatestHostSuffix}"; - public Dictionary LatestHostPackages => new Dictionary() - { - { "Microsoft.NETCore.DotNetHost", LatestHostVersion }, - { "Microsoft.NETCore.DotNetHostResolver", LatestHostFxrVersion }, - { "Microsoft.NETCore.DotNetHostPolicy", LatestHostPolicyVersion } - }; - - // - // Locked muxer for consumption in CLI. - // - public bool IsLocked = false; // Set this variable to toggle muxer locking. - public string LockedHostFxrVersion => IsLocked ? "1.0.1-rc2-002468-00" : LatestHostFxrVersion; - - // - // -----------------------------------------END-OF-HOST-VERSIONING------------------------------------- - - public string GenerateMsiVersion() - { - // MSI versioning - // Encode the CLI version to fit into the MSI versioning scheme - https://msdn.microsoft.com/en-us/library/windows/desktop/aa370859(v=vs.85).aspx - // MSI versions are 3 part - // major.minor.build - // Size(bits) of each part 8 8 16 - // So we have 32 bits to encode the CLI version - // Starting with most significant bit this how the CLI version is going to be encoded as MSI Version - // CLI major -> 6 bits - // CLI minor -> 6 bits - // CLI patch -> 6 bits - // CLI commitcount -> 14 bits - var major = Major << 26; - var minor = Minor << 20; - var patch = Patch << 14; - var msiVersionNumber = major | minor | patch | CommitCount; - - var msiMajor = (msiVersionNumber >> 24) & 0xFF; - var msiMinor = (msiVersionNumber >> 16) & 0xFF; - var msiBuild = msiVersionNumber & 0xFFFF; - - return $"{msiMajor}.{msiMinor}.{msiBuild}"; - } } } diff --git a/scripts/dotnet-cli-build/Utils/HostVersion.cs b/scripts/dotnet-cli-build/Utils/HostVersion.cs new file mode 100644 index 000000000..c62602418 --- /dev/null +++ b/scripts/dotnet-cli-build/Utils/HostVersion.cs @@ -0,0 +1,47 @@ +using System.Collections.Generic; + +namespace Microsoft.DotNet.Cli.Build +{ + public class HostVersion : Version + { + // ------------------------------------------HOST-VERSIONING------------------------------------------- + // + // Host versions are independent of CLI versions. Moreover, these version numbers + // are baked into the binary and is used to look up a serviced binary replacement. + // + + // + // Latest hosts for production of nupkgs. + // + + // Version constants without suffix + public override int Major => 1; + public override int Minor => 0; + public override int Patch => 1; + public override string ReleaseSuffix => "rc2"; + public string LatestHostVersionNoSuffix => $"{Major}.{Minor}.{Patch}"; + public string LatestHostFxrVersionNoSuffix => $"{Major}.{Minor}.{Patch}"; + public string LatestHostPolicyVersionNoSuffix => $"{Major}.{Minor}.{Patch}"; + public string LatestHostPrerelease => ReleaseSuffix; + public string LatestHostBuildMajor => $"{CommitCountString}"; + public string LatestHostSuffix => $"{ReleaseSuffix}-{LatestHostBuildMajor}-00"; + + // Full versions and package information. + public string LatestHostVersion => $"{LatestHostVersionNoSuffix}-{LatestHostSuffix}"; + public string LatestHostFxrVersion => $"{LatestHostFxrVersionNoSuffix}-{LatestHostSuffix}"; + public string LatestHostPolicyVersion => $"{LatestHostPolicyVersionNoSuffix}-{LatestHostSuffix}"; + public Dictionary LatestHostPackages => new Dictionary() + { + { "Microsoft.NETCore.DotNetHost", LatestHostVersion }, + { "Microsoft.NETCore.DotNetHostResolver", LatestHostFxrVersion }, + { "Microsoft.NETCore.DotNetHostPolicy", LatestHostPolicyVersion } + }; + + // + // Locked muxer for consumption in CLI. + // + public bool IsLocked = false; // Set this variable to toggle muxer locking. + public string LockedHostFxrVersion => IsLocked ? "1.0.1-rc2-002468-00" : LatestHostFxrVersion; + public string LockedHostVersion => IsLocked ? "1.0.1-rc2-002468-00" : LatestHostVersion; + } +} diff --git a/scripts/dotnet-cli-build/Utils/Version.cs b/scripts/dotnet-cli-build/Utils/Version.cs new file mode 100644 index 000000000..7bade35d6 --- /dev/null +++ b/scripts/dotnet-cli-build/Utils/Version.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; + +namespace Microsoft.DotNet.Cli.Build +{ + public abstract class Version + { + public virtual int Major { get; set; } + public virtual int Minor { get; set; } + public virtual int Patch { get; set; } + public virtual int CommitCount { get; set; } + public virtual string CommitCountString => CommitCount.ToString("000000"); + public virtual string ReleaseSuffix { get; set; } + + public string GenerateMsiVersion() + { + // MSI versioning + // Encode the CLI version to fit into the MSI versioning scheme - https://msdn.microsoft.com/en-us/library/windows/desktop/aa370859(v=vs.85).aspx + // MSI versions are 3 part + // major.minor.build + // Size(bits) of each part 8 8 16 + // So we have 32 bits to encode the CLI version + // Starting with most significant bit this how the CLI version is going to be encoded as MSI Version + // CLI major -> 6 bits + // CLI minor -> 6 bits + // CLI patch -> 6 bits + // CLI commitcount -> 14 bits + var major = Major << 26; + var minor = Minor << 20; + var patch = Patch << 14; + var msiVersionNumber = major | minor | patch | CommitCount; + + var msiMajor = (msiVersionNumber >> 24) & 0xFF; + var msiMinor = (msiVersionNumber >> 16) & 0xFF; + var msiBuild = msiVersionNumber & 0xFFFF; + + return $"{msiMajor}.{msiMinor}.{msiBuild}"; + } + } +}