diff --git a/build.proj b/build.proj index b07662498..c07c89edc 100644 --- a/build.proj +++ b/build.proj @@ -13,11 +13,11 @@ .sh Prepare;Compile;Test;Package;Publish - $(MSBuildThisFileDirectory)/build_projects/dotnet-cli-build/bin/dotnet-cli-build - $(CLIBuildFileName).dll Debug $(MSBuildThisFileDirectory) + $(RepoRoot)/build_projects/dotnet-cli-build/bin/dotnet-cli-build + $(CLIBuildFileName).dll $(RepoRoot)/build_tools preview @@ -33,6 +33,8 @@ .exe $(Stage0Path)/dotnet$(ExeExtension) + + $(RepoRoot)/build_projects/dotnet-cli-build @@ -50,10 +52,8 @@ - - $(MSBuildThisFileDirectory)/build_projects/dotnet-cli-build - + DependsOnTargets="MSBuildWorkaroundTarget; + RestoreDotnetCliBuildFramework"> @@ -63,8 +63,6 @@ - - @@ -72,6 +70,13 @@ DestinationFiles="%(AzureStorageToCopy.Destination)" /> + + + + + diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/AnsiColorExtensions.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/AnsiColorExtensions.cs deleted file mode 100644 index 874fc7608..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/AnsiColorExtensions.cs +++ /dev/null @@ -1,52 +0,0 @@ -// 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. - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public static class AnsiColorExtensions - { - public static string Black(this string text) - { - return "\x1B[30m" + text + "\x1B[39m"; - } - - public static string Red(this string text) - { - return "\x1B[31m" + text + "\x1B[39m"; - } - public static string Green(this string text) - { - return "\x1B[32m" + text + "\x1B[39m"; - } - - public static string Yellow(this string text) - { - return "\x1B[33m" + text + "\x1B[39m"; - } - - public static string Blue(this string text) - { - return "\x1B[34m" + text + "\x1B[39m"; - } - - public static string Magenta(this string text) - { - return "\x1B[35m" + text + "\x1B[39m"; - } - - public static string Cyan(this string text) - { - return "\x1B[36m" + text + "\x1B[39m"; - } - - public static string White(this string text) - { - return "\x1B[37m" + text + "\x1B[39m"; - } - - public static string Bold(this string text) - { - return "\x1B[1m" + text + "\x1B[22m"; - } - } -} diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/AnsiConsole.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/AnsiConsole.cs deleted file mode 100644 index a7ccb8227..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/AnsiConsole.cs +++ /dev/null @@ -1,145 +0,0 @@ -// 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 System.IO; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public class AnsiConsole - { - private AnsiConsole(TextWriter writer) - { - Writer = writer; - - OriginalForegroundColor = Console.ForegroundColor; - } - - private int _boldRecursion; - - public static AnsiConsole GetOutput() - { - return new AnsiConsole(Console.Out); - } - - public static AnsiConsole GetError() - { - return new AnsiConsole(Console.Error); - } - - public TextWriter Writer { get; } - - public ConsoleColor OriginalForegroundColor { get; } - - private void SetColor(ConsoleColor color) - { - const int Light = 0x08; - int c = (int)color; - - Console.ForegroundColor = - c < 0 ? color : // unknown, just use it - _boldRecursion > 0 ? (ConsoleColor)(c | Light) : // ensure color is light - (ConsoleColor)(c & ~Light); // ensure color is dark - } - - private void SetBold(bool bold) - { - _boldRecursion += bold ? 1 : -1; - if (_boldRecursion > 1 || (_boldRecursion == 1 && !bold)) - { - return; - } - - // switches on _boldRecursion to handle boldness - SetColor(Console.ForegroundColor); - } - - public void WriteLine(string message) - { - Write(message); - Writer.WriteLine(); - } - - - public void Write(string message) - { - var escapeScan = 0; - for (;;) - { - var escapeIndex = message.IndexOf("\x1b[", escapeScan, StringComparison.Ordinal); - if (escapeIndex == -1) - { - var text = message.Substring(escapeScan); - Writer.Write(text); - break; - } - else - { - var startIndex = escapeIndex + 2; - var endIndex = startIndex; - while (endIndex != message.Length && - message[endIndex] >= 0x20 && - message[endIndex] <= 0x3f) - { - endIndex += 1; - } - - var text = message.Substring(escapeScan, escapeIndex - escapeScan); - Writer.Write(text); - if (endIndex == message.Length) - { - break; - } - - switch (message[endIndex]) - { - case 'm': - int value; - if (int.TryParse(message.Substring(startIndex, endIndex - startIndex), out value)) - { - switch (value) - { - case 1: - SetBold(true); - break; - case 22: - SetBold(false); - break; - case 30: - SetColor(ConsoleColor.Black); - break; - case 31: - SetColor(ConsoleColor.Red); - break; - case 32: - SetColor(ConsoleColor.Green); - break; - case 33: - SetColor(ConsoleColor.Yellow); - break; - case 34: - SetColor(ConsoleColor.Blue); - break; - case 35: - SetColor(ConsoleColor.Magenta); - break; - case 36: - SetColor(ConsoleColor.Cyan); - break; - case 37: - SetColor(ConsoleColor.Gray); - break; - case 39: - Console.ForegroundColor = OriginalForegroundColor; - break; - } - } - break; - } - - escapeScan = endIndex + 1; - } - } - } - } -} diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildContext.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildContext.cs deleted file mode 100644 index b80196c8c..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildContext.cs +++ /dev/null @@ -1,177 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public class BuildContext - { - private IDictionary _completedTargets = new Dictionary(StringComparer.OrdinalIgnoreCase); - - public static readonly string DefaultTarget = "Default"; - - private int _maxTargetLen; - private Stack _targetStack = new Stack(); - - public IDictionary Targets { get; } - - public IDictionary Properties = new Dictionary(); - - public string BuildDirectory { get; } - - public object this[string name] - { - get - { - if (Properties.ContainsKey(name)) - { - return Properties[name]; - } - else - { - throw new KeyNotFoundException("No property with key " + name + " was found."); - } - } - set { Properties[name] = value; } - } - - public BuildContext(IDictionary targets, string buildDirectory) - { - Targets = targets; - BuildDirectory = buildDirectory; - _maxTargetLen = targets.Values.Select(t => t.Name.Length).Max(); - } - - public T Get(string name) => (T)this[name]; - - public BuildTargetResult RunTarget(string name) => RunTarget(name, force: false); - - public BuildTargetResult RunTarget(string name, bool force) - { - BuildTarget target; - if (!Targets.TryGetValue(name, out target)) - { - throw new UndefinedTargetException($"Undefined target: {name}"); - } - - if (!EvaluateTargetConditions(target)) - { - Reporter.Verbose.WriteLine($"Skipping, Target Conditions not met: {target.Name}"); - return new BuildTargetResult(target, success: true); - } - - // Check if it's been completed - BuildTargetResult result; - if (!force && _completedTargets.TryGetValue(name, out result)) - { - Reporter.Verbose.WriteLine($"Skipping completed target: {target.Name}"); - return result; - } - - // It hasn't, or we're forcing, so run it - result = ExecTarget(target); - _completedTargets[target.Name] = result; - return result; - } - - public void Verbose(string message) - { - Reporter.Output.WriteLine("trace".White() + $": {message}"); - } - - public void Info(string message) - { - Reporter.Output.WriteLine("info ".Green() + $": {message}"); - } - - public void Warn(string message) - { - Reporter.Output.WriteLine("warn ".Yellow() + $": {message}"); - } - - public void Error(string message) - { - Reporter.Error.WriteLine("error".Red().Bold() + $": {message}"); - } - - private bool EvaluateTargetConditions(BuildTarget target) - { - if (target == null) - { - throw new ArgumentNullException(nameof(target)); - } - - if (target.Conditions == null) - { - return true; - } - - foreach (var condition in target.Conditions) - { - if (!condition()) - { - return false; - } - } - - return true; - } - - private BuildTargetResult ExecTarget(BuildTarget target) - { - if (target == null) - { - throw new ArgumentNullException(nameof(target)); - } - - var sectionName = $"{target.Name.PadRight(_maxTargetLen + 2).Yellow()} ({target.Source.White()})"; - BuildReporter.BeginSection("TARGET", sectionName); - - BuildTargetResult result; - - // Run the dependencies - var dependencyResults = new Dictionary(); - var failedDependencyResult = RunDependencies(target, dependencyResults); - if (failedDependencyResult != null) - { - result = failedDependencyResult; - } - else if (target.Body != null) - { - try - { - result = target.Body(new BuildTargetContext(this, target, dependencyResults)); - } - catch (Exception ex) - { - result = new BuildTargetResult(target, success: false, exception: ex); - } - } - else - { - result = new BuildTargetResult(target, success: true); - } - BuildReporter.EndSection("TARGET", sectionName, result.Success); - - return result; - } - - private BuildTargetResult RunDependencies(BuildTarget target, Dictionary dependencyResults) - { - BuildTargetResult result = null; - foreach (var dependency in target.Dependencies) - { - result = RunTarget(dependency); - dependencyResults[dependency] = result; - - if (!result.Success) - { - return result; - } - } - - return null; - } - } -} diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildFailureException.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildFailureException.cs deleted file mode 100644 index 665c0243a..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildFailureException.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public class BuildFailureException : Exception - { - public BuildTarget Target { get; } - - public BuildFailureException() - { - } - - public BuildFailureException(BuildTarget target) : base($"The '{target.Name}' target failed") - { - Target = target; - } - - public BuildFailureException(BuildTarget target, Exception innerException) : base($"The '{target.Name}' target failed", innerException) - { - Target = target; - } - - public BuildFailureException(string message) : base(message) - { - } - - public BuildFailureException(string message, BuildTarget target) : base(message) - { - Target = target; - } - - public BuildFailureException(string message, Exception innerException) : base(message, innerException) - { - } - - public BuildFailureException(string message, Exception innerException, BuildTarget target) : base(message, innerException) - { - Target = target; - } - - } -} \ No newline at end of file diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildReporter.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildReporter.cs deleted file mode 100644 index 4efcba06f..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildReporter.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public static class BuildReporter - { - private const string TimeSpanFormat = @"hh\:mm\:ss\.fff"; - private static DateTime _initialTime = DateTime.Now; - - public static void BeginSection(string type, string name) - { - Reporter.Output.WriteLine($"[{type.PadRight(10)} >]".Green() + $" [....] [{(DateTime.Now - _initialTime).ToString(TimeSpanFormat)}]".Blue() + $" {name}"); - } - - public static void EndSection(string type, string name, bool success) - { - var header = $"[{type.PadRight(10)} <]"; - if(success) - { - header = header.Green(); - } - else - { - header = header.Red(); - } - var successString = success ? " OK " : "FAIL"; - Reporter.Output.WriteLine(header + $" [{successString}] [{(DateTime.Now - _initialTime).ToString(TimeSpanFormat)}]".Blue() + $" {name}"); - } - } -} diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildSetup.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildSetup.cs deleted file mode 100644 index 2bb42aa47..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildSetup.cs +++ /dev/null @@ -1,173 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.CompilerServices; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public class BuildSetup - { - private Dictionary _targets = new Dictionary(); - - public IList _overrides = new List(); - - public string ProductName { get; } - - public BuildSetup(string productName) - { - ProductName = productName; - } - - public static BuildSetup Create(string productName) - { - return new BuildSetup(productName); - } - - public BuildSetup UseTargets(IEnumerable targets) - { - foreach (var target in targets) - { - BuildTarget previousTarget; - if (_targets.TryGetValue(target.Name, out previousTarget)) - { - _overrides.Add(new TargetOverride(target.Name, previousTarget.Source, target.Source)); - } - _targets[target.Name] = target; - } - return this; - } - - public BuildSetup UseAllTargetsFromAssembly() - { - var asm = typeof(T).GetTypeInfo().Assembly; - return UseTargets(asm.GetExportedTypes().SelectMany(t => CollectTargets(t))); - } - - public BuildSetup UseTargetsFrom() - { - return UseTargets(CollectTargets(typeof(T))); - } - - public BuildContext CreateBuildContext() - { - return new BuildContext(_targets, Directory.GetCurrentDirectory()); - } - - public int Run(string[] args) - { - var targets = new[] { BuildContext.DefaultTarget }; - if(args.Length > 0) - { - targets = args; - } - - Reporter.Output.WriteBanner($"Building {ProductName}"); - - if (_overrides.Any()) - { - foreach (var targetOverride in _overrides) - { - Reporter.Verbose.WriteLine($"Target {targetOverride.Name} from {targetOverride.OriginalSource} was overridden in {targetOverride.OverrideSource}"); - } - } - - var context = CreateBuildContext(); - BuildTargetResult result = null; - try - { - foreach (var target in targets) - { - result = context.RunTarget(target); - if(!result.Success) - { - break; - } - } - } - catch (Exception ex) - { - Reporter.Error.WriteLine(ex.ToString().Red()); - return 1; - } - - if(result != null && !result.Success) - { - Reporter.Error.WriteLine($"Build failed: {result.ErrorMessage}".Red()); - return 1; - } - else - { - Reporter.Output.WriteLine("Build succeeded".Green()); - return 0; - } - } - - private static IEnumerable CollectTargets(Type typ) - { - return from m in typ.GetMethods() - let targetAttribute = m.GetCustomAttribute() - let conditionalAttributes = m.GetCustomAttributes(false) - where targetAttribute != null - select CreateTarget(m, targetAttribute, conditionalAttributes); - } - - private static BuildTarget CreateTarget( - MethodInfo methodInfo, - TargetAttribute targetAttribute, - IEnumerable targetConditionAttributes) - { - var name = targetAttribute.Name ?? methodInfo.Name; - - var conditions = ExtractTargetConditionsFromAttributes(targetConditionAttributes); - - return new BuildTarget( - name, - $"{methodInfo.DeclaringType.FullName}.{methodInfo.Name}", - targetAttribute.Dependencies, - conditions, - (Func)methodInfo.CreateDelegate(typeof(Func))); - } - - private static IEnumerable> ExtractTargetConditionsFromAttributes( - IEnumerable targetConditionAttributes) - { - if (targetConditionAttributes == null || targetConditionAttributes.Count() == 0) - { - return Enumerable.Empty>(); - } - - return targetConditionAttributes - .Select>(c => c.EvaluateCondition) - .ToArray(); - } - - private string GenerateSourceString(string file, int? line, string member) - { - if (!string.IsNullOrEmpty(file) && line != null) - { - return $"{file}:{line}"; - } - else if (!string.IsNullOrEmpty(member)) - { - return member; - } - return string.Empty; - } - - public class TargetOverride - { - public string Name { get; } - public string OriginalSource { get; } - public string OverrideSource { get; } - - public TargetOverride(string name, string originalSource, string overrideSource) - { - Name = name; - OriginalSource = originalSource; - OverrideSource = overrideSource; - } - } - } -} diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildTarget.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildTarget.cs deleted file mode 100644 index d3b161885..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildTarget.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public class BuildTarget - { - public string Name { get; } - public string Source { get; } - public IEnumerable Dependencies { get; } - public IEnumerable> Conditions { get; } - public Func Body { get; } - - public BuildTarget(string name, string source) : this(name, source, Enumerable.Empty(), Enumerable.Empty>(), null) { } - public BuildTarget(string name, string source, IEnumerable dependencies) : this(name, source, dependencies, Enumerable.Empty>(), null) { } - public BuildTarget( - string name, - string source, - IEnumerable dependencies, - IEnumerable> conditions, - Func body) - { - Name = name; - Source = source; - Dependencies = dependencies; - Conditions = conditions; - Body = body; - } - } -} \ No newline at end of file diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildTargetContext.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildTargetContext.cs deleted file mode 100644 index 376234dc2..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildTargetContext.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public class BuildTargetContext - { - private IDictionary _dependencyResults; - - public BuildContext BuildContext { get; } - public BuildTarget Target { get; } - - public BuildTargetContext(BuildContext buildContext, BuildTarget target, IDictionary dependencyResults) - { - BuildContext = buildContext; - Target = target; - _dependencyResults = dependencyResults; - } - - public BuildTargetResult Success() - { - return new BuildTargetResult(Target, success: true); - } - - public BuildTargetResult Failed() => Failed(errorMessage: string.Empty); - - public BuildTargetResult Failed(string errorMessage) - { - return new BuildTargetResult(Target, success: false, errorMessage: errorMessage); - } - - public void Info(string message) => BuildContext.Info(message); - public void Warn(string message) => BuildContext.Warn(message); - public void Error(string message) => BuildContext.Error(message); - public void Verbose(string message) => BuildContext.Verbose(message); - } -} diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildTargetResult.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildTargetResult.cs deleted file mode 100644 index cadf74a03..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/BuildTargetResult.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public class BuildTargetResult - { - public BuildTarget Target { get; } - public bool Success { get; } - public string ErrorMessage { get; } - public Exception Exception { get; } - - public BuildTargetResult(BuildTarget target, bool success) : this(target, success, errorMessage: string.Empty) { } - - public BuildTargetResult(BuildTarget target, bool success, Exception exception) : this(target, success, exception.ToString()) - { - Exception = exception; - } - - public BuildTargetResult(BuildTarget target, bool success, string errorMessage) - { - Target = target; - Success = success; - ErrorMessage = errorMessage; - } - - public void EnsureSuccessful() - { - if(!Success) - { - if(string.IsNullOrEmpty(ErrorMessage)) - { - throw new BuildFailureException(Target, Exception); - } - else - { - throw new BuildFailureException(ErrorMessage, Exception, Target); - } - } - } - } -} \ No newline at end of file diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/Command.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/Command.cs index cc96344f7..310adb4f1 100644 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/Command.cs +++ b/build_projects/Microsoft.DotNet.Cli.Build.Framework/Command.cs @@ -202,7 +202,7 @@ namespace Microsoft.DotNet.Cli.Build.Framework var exitCode = _process.ExitCode; - ReportExecEnd(exitCode); + ReportExecEnd(exitCode); return new CommandResult( _process.StartInfo, @@ -239,36 +239,6 @@ namespace Microsoft.DotNet.Cli.Build.Framework return this; } - public Command ForwardStdOut(TextWriter to = null) - { - ThrowIfRunning(); - _process.StartInfo.RedirectStandardOutput = true; - if (to == null) - { - _stdOutForward = Reporter.Output.WriteLine; - } - else - { - _stdOutForward = to.WriteLine; - } - return this; - } - - public Command ForwardStdErr(TextWriter to = null) - { - ThrowIfRunning(); - _process.StartInfo.RedirectStandardError = true; - if (to == null) - { - _stdErrForward = Reporter.Error.WriteLine; - } - else - { - _stdErrForward = to.WriteLine; - } - return this; - } - public Command OnOutputLine(Action handler) { ThrowIfRunning(); @@ -307,28 +277,25 @@ namespace Microsoft.DotNet.Cli.Build.Framework return prefix + " " + info.Arguments; } - private void ReportExecBegin() - { - if (!_quietBuildReporter) - { - BuildReporter.BeginSection("EXEC", FormatProcessInfo(_process.StartInfo, includeWorkingDirectory: false)); - } - } - - private void ReportExecEnd(int exitCode) - { - if (!_quietBuildReporter) - { - bool success = exitCode == 0; - - var message = $"{FormatProcessInfo(_process.StartInfo, includeWorkingDirectory: !success)} exited with {exitCode}"; - - BuildReporter.EndSection( - "EXEC", - success ? message.Green() : message.Red().Bold(), - success); - } - } + private void ReportExecBegin() + { + if (!_quietBuildReporter) + { + Console.WriteLine($"[> EXEC] {FormatProcessInfo(_process.StartInfo, includeWorkingDirectory: false)}"); + } + } + + private void ReportExecEnd(int exitCode) + { + if (!_quietBuildReporter) + { + bool success = exitCode == 0; + + var message = $"{FormatProcessInfo(_process.StartInfo, includeWorkingDirectory: !success)} exited with {exitCode}"; + + Console.WriteLine("[< EXEC] {message}"); + } + } private void ThrowIfRunning([CallerMemberName] string memberName = null) { diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/DebugHelper.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/DebugHelper.cs deleted file mode 100644 index 988e15f8d..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/DebugHelper.cs +++ /dev/null @@ -1,29 +0,0 @@ -// 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 System.Diagnostics; -using System.Linq; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public static class DebugHelper - { - [Conditional("DEBUG")] - public static void HandleDebugSwitch(ref string[] args) - { - if (args.Length > 0 && string.Equals("--debug", args[0], StringComparison.OrdinalIgnoreCase)) - { - args = args.Skip(1).ToArray(); - WaitForDebugger(); - } - } - - private static void WaitForDebugger() - { - Console.WriteLine("Waiting for debugger to attach. Press ENTER to continue"); - Console.WriteLine($"Process ID: {Process.GetCurrentProcess().Id}"); - Console.ReadLine(); - } - } -} diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/Reporter.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/Reporter.cs deleted file mode 100644 index 664d8fc53..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/Reporter.cs +++ /dev/null @@ -1,58 +0,0 @@ -// 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 System.Runtime.InteropServices; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - // Stupid-simple console manager - internal class Reporter - { - private static readonly Reporter Null = new Reporter(console: null); - private static object _lock = new object(); - - private readonly AnsiConsole _console; - - private Reporter(AnsiConsole console) - { - _console = console; - } - - public static Reporter Output { get; } = new Reporter(AnsiConsole.GetOutput()); - public static Reporter Error { get; } = new Reporter(AnsiConsole.GetOutput()); - public static Reporter Verbose { get; } = new Reporter(AnsiConsole.GetOutput()); - - public void WriteLine(string message) - { - lock (_lock) - { - _console?.WriteLine(message); - } - } - - public void WriteLine() - { - lock (_lock) - { - _console?.Writer?.WriteLine(); - } - } - - public void Write(string message) - { - lock (_lock) - { - _console?.Writer?.Write(message); - } - } - - public void WriteBanner(string content) - { - string border = new string('*', content.Length + 6); - WriteLine($@"{border} -* {content} * -{border}".Green()); - } - } -} diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/StandardGoals.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/StandardGoals.cs deleted file mode 100644 index 975f1fa6f..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/StandardGoals.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public static class StandardGoals - { - public static BuildSetup UseStandardGoals(this BuildSetup self) - { - return self.UseTargets(new[] - { - new BuildTarget("Default", "Standard Goals", new [] { "Prepare", "Compile", "Test", "Package", "Publish" }), - new BuildTarget("Prepare", "Standard Goals"), - new BuildTarget("Compile", "Standard Goals"), - new BuildTarget("Test", "Standard Goals"), - new BuildTarget("Package", "Standard Goals"), - new BuildTarget("Publish", "Standard Goals") - }); - } - } -} diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetAttribute.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetAttribute.cs deleted file mode 100644 index c7b851808..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetAttribute.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] - public class TargetAttribute : Attribute - { - public string Name { get; set; } - public IEnumerable Dependencies { get; } - - public TargetAttribute() - { - Dependencies = Enumerable.Empty(); - } - - // Attributes can only use constants, so a comma-separated string is better :) - public TargetAttribute(params string[] dependencies) - { - Dependencies = dependencies; - } - } -} \ No newline at end of file diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/BuildArchitecturesAttribute.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/BuildArchitecturesAttribute.cs deleted file mode 100644 index da2f99461..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/BuildArchitecturesAttribute.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] - public class BuildArchitecturesAttribute : TargetConditionAttribute - { - private IEnumerable _buildArchitectures; - - public BuildArchitecturesAttribute(params BuildArchitecture[] architectures) - { - if (architectures == null) - { - throw new ArgumentNullException(nameof(architectures)); - } - - _buildArchitectures = architectures; - } - - public override bool EvaluateCondition() - { - var currentArchitecture = CurrentArchitecture.Current; - - if (currentArchitecture == default(BuildArchitecture)) - { - throw new Exception("Unrecognized Architecture"); - } - - foreach (var architecture in _buildArchitectures) - { - if (architecture == currentArchitecture) - { - return true; - } - } - - return false; - } - } -} \ No newline at end of file diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/BuildPlatformsAttribute.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/BuildPlatformsAttribute.cs deleted file mode 100644 index 1c4814b33..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/BuildPlatformsAttribute.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] - public class BuildPlatformsAttribute : TargetConditionAttribute - { - private IEnumerable _buildPlatforms; - private string _version; - - public BuildPlatformsAttribute(params BuildPlatform[] platforms) - { - if (platforms == null) - { - throw new ArgumentNullException(nameof(platforms)); - } - - _buildPlatforms = platforms; - } - - public BuildPlatformsAttribute(BuildPlatform platform, string version) - { - _buildPlatforms = new BuildPlatform[] { platform }; - _version = version; - } - - public override bool EvaluateCondition() - { - foreach (var platform in _buildPlatforms) - { - if (CurrentPlatform.IsPlatform(platform, _version)) - { - return true; - } - } - - return false; - } - } -} \ No newline at end of file diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/EnvironmentAttribute.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/EnvironmentAttribute.cs deleted file mode 100644 index 0a8455e5c..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/EnvironmentAttribute.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Linq; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - [AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)] - public class EnvironmentAttribute : TargetConditionAttribute - { - private string _envVar; - private string[] _expectedVals; - - public EnvironmentAttribute(string envVar, params string[] expectedVals) - { - if (string.IsNullOrEmpty(envVar)) - { - throw new ArgumentNullException(nameof(envVar)); - } - if (expectedVals == null) - { - throw new ArgumentNullException(nameof(expectedVals)); - } - - _envVar = envVar; - _expectedVals = expectedVals; - } - - public override bool EvaluateCondition() - { - var actualVal = Environment.GetEnvironmentVariable(_envVar); - - if (_expectedVals.Any()) - { - return _expectedVals.Any(ev => string.Equals(actualVal, ev, StringComparison.Ordinal)); - } - else - { - return !string.IsNullOrEmpty(actualVal); - } - } - } -} diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/TargetConditionAttribute.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/TargetConditionAttribute.cs deleted file mode 100644 index 74243f06a..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/TargetConditions/TargetConditionAttribute.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public abstract class TargetConditionAttribute : Attribute - { - public abstract bool EvaluateCondition(); - } -} \ No newline at end of file diff --git a/build_projects/Microsoft.DotNet.Cli.Build.Framework/UndefinedTargetException.cs b/build_projects/Microsoft.DotNet.Cli.Build.Framework/UndefinedTargetException.cs deleted file mode 100644 index 69243ced9..000000000 --- a/build_projects/Microsoft.DotNet.Cli.Build.Framework/UndefinedTargetException.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace Microsoft.DotNet.Cli.Build.Framework -{ - public class UndefinedTargetException : Exception - { - public UndefinedTargetException(string message) : base(message) { } - } -} \ No newline at end of file diff --git a/build_projects/dotnet-cli-build/CheckPrereqs.cs b/build_projects/dotnet-cli-build/CheckPrereqs.cs index 27294d1f5..9678b199d 100644 --- a/build_projects/dotnet-cli-build/CheckPrereqs.cs +++ b/build_projects/dotnet-cli-build/CheckPrereqs.cs @@ -14,113 +14,96 @@ namespace Microsoft.DotNet.Cli.Build { public override bool Execute() { - Run(s => Log.LogMessage(s)); - - return true; + return CheckCoreclrPlatformDependencies() && + CheckInstallerBuildPlatformDependencies() && + LocateStage0(); } - public static void Run(Action logInfo) + private bool CheckCoreclrPlatformDependencies() { - CheckCoreclrPlatformDependencies(); - CheckInstallerBuildPlatformDependencies(); - - LocateStage0(logInfo); + return CheckUbuntuCoreclrAndCoreFxDependencies() && + CheckCentOSCoreclrAndCoreFxDependencies(); } - private static void CheckCoreclrPlatformDependencies() + private bool CheckInstallerBuildPlatformDependencies() { - CheckUbuntuCoreclrAndCoreFxDependencies(); - CheckCentOSCoreclrAndCoreFxDependencies(); + return CheckUbuntuDebianPackageBuildDependencies(); } - private static void CheckInstallerBuildPlatformDependencies() + private bool CheckUbuntuCoreclrAndCoreFxDependencies() { - CheckUbuntuDebianPackageBuildDependencies(); - } + bool isSuccessful = true; - private static void CheckUbuntuCoreclrAndCoreFxDependencies() - { if (CurrentPlatform.IsPlatform(BuildPlatform.Ubuntu, "14.04")) { - var errorMessageBuilder = new StringBuilder(); var stage0 = DotNetCli.Stage0.BinPath; foreach (var package in PackageDependencies.UbuntuCoreclrAndCoreFxDependencies) { if (!AptDependencyUtility.PackageIsInstalled(package)) { - errorMessageBuilder.Append($"Error: Coreclr package dependency {package} missing."); - errorMessageBuilder.Append(Environment.NewLine); - errorMessageBuilder.Append($"-> install with apt-get install {package}"); - errorMessageBuilder.Append(Environment.NewLine); + isSuccessful = false; + + Log.LogError($"Coreclr package dependency {package} missing. Install with `apt-get install {package}`"); } } - - if (errorMessageBuilder.Length > 0) - { - throw new BuildFailureException(errorMessageBuilder.ToString()); - } } + + return isSuccessful; } - private static void CheckCentOSCoreclrAndCoreFxDependencies() + private bool CheckCentOSCoreclrAndCoreFxDependencies() { + var isSuccessful = true; + if (CurrentPlatform.IsPlatform(BuildPlatform.CentOS)) { - var errorMessageBuilder = new StringBuilder(); - foreach (var package in PackageDependencies.CentosCoreclrAndCoreFxDependencies) { if (!YumDependencyUtility.PackageIsInstalled(package)) { - errorMessageBuilder.Append($"Error: Coreclr package dependency {package} missing."); - errorMessageBuilder.Append(Environment.NewLine); - errorMessageBuilder.Append($"-> install with yum install {package}"); - errorMessageBuilder.Append(Environment.NewLine); + isSuccessful = false; + + Log.LogError($"Coreclr package dependency {package} missing. Install with yum install {package}"); } } - - if (errorMessageBuilder.Length > 0) - { - throw new BuildFailureException(errorMessageBuilder.ToString()); - } } + + return isSuccessful; } - private static void CheckUbuntuDebianPackageBuildDependencies() + private bool CheckUbuntuDebianPackageBuildDependencies() { + var isSuccessful = true; + if (CurrentPlatform.IsPlatform(BuildPlatform.Ubuntu, "14.04")) { - var messageBuilder = new StringBuilder(); var aptDependencyUtility = new AptDependencyUtility(); - foreach (var package in PackageDependencies.DebianPackageBuildDependencies) { if (!AptDependencyUtility.PackageIsInstalled(package)) { - messageBuilder.Append($"Error: Debian package build dependency {package} missing."); - messageBuilder.Append(Environment.NewLine); - messageBuilder.Append($"-> install with apt-get install {package}"); - messageBuilder.Append(Environment.NewLine); + isSuccessful = false; + + Log.LogError($"Debian package build dependency {package} missing. Install with apt-get install {package}"); } } - - if (messageBuilder.Length > 0) - { - throw new BuildFailureException(messageBuilder.ToString()); - } } + + return isSuccessful; } - private static void LocateStage0(Action logInfo) + private bool LocateStage0() { // We should have been run in the repo root, so locate the stage 0 relative to current directory var stage0 = DotNetCli.Stage0.BinPath; if (!Directory.Exists(stage0)) { - throw new BuildFailureException($"Stage 0 directory does not exist: {stage0}"); + Log.LogError($"Stage 0 directory does not exist: {stage0}"); + + return false; } // Identify the version @@ -128,11 +111,16 @@ namespace Microsoft.DotNet.Cli.Build if (string.IsNullOrEmpty(versionFile)) { - throw new Exception($"'.version' file not found in '{stage0}' folder"); + Log.LogError($"'.version' file not found in '{stage0}' folder"); + + return false; } var version = File.ReadAllLines(versionFile); - logInfo($"Using Stage 0 Version: {version[1]}"); + + Log.LogMessage($"Using Stage 0 Version: {version[1]}"); + + return true; } } } diff --git a/build_projects/dotnet-cli-build/CliDirs.cs b/build_projects/dotnet-cli-build/CliDirs.cs deleted file mode 100644 index edf2f23a6..000000000 --- a/build_projects/dotnet-cli-build/CliDirs.cs +++ /dev/null @@ -1,16 +0,0 @@ -// 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.IO; -using Microsoft.DotNet.InternalAbstractions; - -namespace Microsoft.DotNet.Cli.Build -{ - public static class CliDirs - { - public static readonly string CoreSetupDownload = Path.Combine( - Dirs.Intermediate, - "coreSetupDownload", - CliDependencyVersions.SharedFrameworkVersion); - } -} diff --git a/build_projects/dotnet-cli-build/CliMonikers.cs b/build_projects/dotnet-cli-build/CliMonikers.cs deleted file mode 100644 index 6785f7d15..000000000 --- a/build_projects/dotnet-cli-build/CliMonikers.cs +++ /dev/null @@ -1,17 +0,0 @@ -// 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 Microsoft.DotNet.Cli.Build.Framework; - -namespace Microsoft.DotNet.Cli.Build -{ - public static class CliMonikers - { - public static string GetSdkDebianPackageName(BuildTargetContext c) - { - var nugetVersion = c.BuildContext.Get("BuildVersion").NuGetVersion; - - return $"dotnet-dev-{nugetVersion}"; - } - } -} diff --git a/build_projects/dotnet-cli-build/PrepareTargets.cs b/build_projects/dotnet-cli-build/PrepareTargets.cs deleted file mode 100644 index 096ae824d..000000000 --- a/build_projects/dotnet-cli-build/PrepareTargets.cs +++ /dev/null @@ -1,391 +0,0 @@ -// 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 System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.IO.Compression; -using Microsoft.Build.Utilities; -using Microsoft.DotNet.Cli.Build.Framework; -using Microsoft.DotNet.InternalAbstractions; -using static Microsoft.DotNet.Cli.Build.Framework.BuildHelpers; -using static Microsoft.DotNet.Cli.Build.FS; -using static Microsoft.DotNet.Cli.Build.Utils; - -namespace Microsoft.DotNet.Cli.Build -{ - public class PrepareTargets - { - - // All major targets will depend on this in order to ensure variables are set up right if they are run independently - public static BuildTargetResult Init(BuildTargetContext c) - { - GenerateVersions(c); - CheckPrereqs.Run(s => c.Info(s)); - ExpectedBuildArtifacts(c); - SetTelemetryProfile(c); - - var configEnv = Environment.GetEnvironmentVariable("CONFIGURATION"); - - if (string.IsNullOrEmpty(configEnv)) - { - configEnv = "Debug"; - } - - c.BuildContext["Configuration"] = configEnv; - c.BuildContext["Channel"] = Environment.GetEnvironmentVariable("CHANNEL"); - - c.Info($"Building {c.BuildContext["Configuration"]} to: {Dirs.Output}"); - c.Info("Build Environment:"); - c.Info($" Operating System: {RuntimeEnvironment.OperatingSystem} {RuntimeEnvironment.OperatingSystemVersion}"); - c.Info($" Platform: {RuntimeEnvironment.OperatingSystemPlatform}"); - - return c.Success(); - } - - public static BuildTargetResult GenerateVersions(BuildTargetContext c) - { - var commitCount = GitUtils.GetCommitCount(); - var commitHash = GitUtils.GetCommitHash(); - - var branchInfo = ReadBranchInfo(c, Path.Combine(c.BuildContext.BuildDirectory, "branchinfo.txt")); - var buildVersion = new BuildVersion() - { - Major = int.Parse(branchInfo["MAJOR_VERSION"]), - Minor = int.Parse(branchInfo["MINOR_VERSION"]), - Patch = int.Parse(branchInfo["PATCH_VERSION"]), - ReleaseSuffix = branchInfo["RELEASE_SUFFIX"], - CommitCount = commitCount - }; - c.BuildContext["BuildVersion"] = buildVersion; - - c.BuildContext["BranchName"] = branchInfo["BRANCH_NAME"]; - c.BuildContext["CommitHash"] = commitHash; - - c.Info($"Building Version: {buildVersion.SimpleVersion} (NuGet Packages: {buildVersion.NuGetVersion})"); - c.Info($"From Commit: {commitHash}"); - - return c.Success(); - } - - public static BuildTargetResult ZipTemplates(BuildTargetContext c) - { - var templateDirectories = Directory.GetDirectories( - Path.Combine(Dirs.RepoRoot, "src", "dotnet", "commands", "dotnet-new")); - - foreach (var directory in templateDirectories) - { - var zipFile = Path.Combine(Path.GetDirectoryName(directory), Path.GetFileName(directory) + ".zip"); - if (File.Exists(zipFile)) - { - File.Delete(zipFile); - } - - ZipFile.CreateFromDirectory(directory, zipFile); - } - - return c.Success(); - } - - - - public static BuildTargetResult ExpectedBuildArtifacts(BuildTargetContext c) - { - var config = Environment.GetEnvironmentVariable("CONFIGURATION"); - var versionBadgeName = $"{Monikers.GetBadgeMoniker()}_{config}_version_badge.svg"; - c.BuildContext["VersionBadge"] = Path.Combine(Dirs.Output, versionBadgeName); - - var cliVersion = c.BuildContext.Get("BuildVersion").NuGetVersion; - var sharedFrameworkVersion = CliDependencyVersions.SharedFrameworkVersion; - var hostVersion = CliDependencyVersions.SharedHostVersion; - var hostFxrVersion = CliDependencyVersions.HostFxrVersion; - - // Generated Installers + Archives - AddInstallerArtifactToContext(c, "dotnet-sdk", "Sdk", cliVersion); - AddInstallerArtifactToContext(c, "dotnet-dev", "CombinedFrameworkSDKHost", cliVersion); - AddInstallerArtifactToContext(c, "dotnet-sharedframework-sdk", "CombinedFrameworkSDK", cliVersion); - AddInstallerArtifactToContext(c, "dotnet-sdk-debug", "SdkSymbols", cliVersion); - - //Downloaded Installers + Archives - AddInstallerArtifactToContext(c, "dotnet-host", "SharedHost", hostVersion); - AddInstallerArtifactToContext(c, "dotnet-hostfxr", "HostFxr", hostFxrVersion); - AddInstallerArtifactToContext(c, "dotnet-sharedframework", "SharedFramework", sharedFrameworkVersion); - AddInstallerArtifactToContext(c, "dotnet", "CombinedFrameworkHost", sharedFrameworkVersion); - - return c.Success(); - } - - public static BuildTargetResult DownloadHostAndSharedFxArtifacts(BuildTargetContext c) - { - ExpectedBuildArtifacts(c); - DownloadHostAndSharedFxArchives(c); - DownloadHostAndSharedFxInstallers(c); - - return c.Success(); - } - - public static BuildTargetResult DownloadHostAndSharedFxArchives(BuildTargetContext c) - { - var sharedFrameworkVersion = CliDependencyVersions.SharedFrameworkVersion; - var sharedFrameworkChannel = CliDependencyVersions.SharedFrameworkChannel; - - var combinedSharedHostAndFrameworkArchiveDownloadFile = - Path.Combine(CliDirs.CoreSetupDownload, "combinedSharedHostAndFrameworkArchive"); - - Mkdirp(Path.GetDirectoryName(combinedSharedHostAndFrameworkArchiveDownloadFile)); - - if (!File.Exists(combinedSharedHostAndFrameworkArchiveDownloadFile)) - { - // Needed for computing the blob path - var combinedSharedHostAndFrameworkArchiveBuildContextFile = - c.BuildContext.Get("CombinedFrameworkHostCompressedFile"); - - AzurePublisher.DownloadFile( - CalculateArchiveBlob( - combinedSharedHostAndFrameworkArchiveBuildContextFile, - sharedFrameworkChannel, - sharedFrameworkVersion), - combinedSharedHostAndFrameworkArchiveDownloadFile).Wait(); - - - // Unpack the combined archive to shared framework publish directory - Rmdir(Dirs.SharedFrameworkPublish); - Mkdirp(Dirs.SharedFrameworkPublish); - if (CurrentPlatform.IsWindows) - { - ZipFile.ExtractToDirectory(combinedSharedHostAndFrameworkArchiveDownloadFile, Dirs.SharedFrameworkPublish); - } - else - { - Exec("tar", "xf", combinedSharedHostAndFrameworkArchiveDownloadFile, "-C", Dirs.SharedFrameworkPublish); - } - } - - return c.Success(); - } - - public static BuildTargetResult DownloadHostAndSharedFxInstallers(BuildTargetContext c) - { - if (CurrentPlatform.IsAnyPlatform(BuildPlatform.Windows, BuildPlatform.OSX, BuildPlatform.Ubuntu)) - { - var sharedFrameworkVersion = CliDependencyVersions.SharedFrameworkVersion; - var hostVersion = CliDependencyVersions.SharedHostVersion; - var hostFxrVersion = CliDependencyVersions.HostFxrVersion; - - var sharedFrameworkChannel = CliDependencyVersions.SharedFrameworkChannel; - var sharedHostChannel = CliDependencyVersions.SharedHostChannel; - var hostFxrChannel = CliDependencyVersions.HostFxrChannel; - - var sharedFrameworkInstallerDownloadFile = Path.Combine(CliDirs.CoreSetupDownload, "sharedFrameworkInstaller"); - var sharedHostInstallerDownloadFile = Path.Combine(CliDirs.CoreSetupDownload, "sharedHostInstaller"); - var hostFxrInstallerDownloadFile = Path.Combine(CliDirs.CoreSetupDownload, "hostFxrInstaller"); - - Mkdirp(Path.GetDirectoryName(sharedFrameworkInstallerDownloadFile)); - Mkdirp(Path.GetDirectoryName(sharedHostInstallerDownloadFile)); - Mkdirp(Path.GetDirectoryName(hostFxrInstallerDownloadFile)); - - if (!File.Exists(sharedFrameworkInstallerDownloadFile)) - { - var sharedFrameworkInstallerDestinationFile = c.BuildContext.Get("SharedFrameworkInstallerFile"); - Mkdirp(Path.GetDirectoryName(sharedFrameworkInstallerDestinationFile)); - - AzurePublisher.DownloadFile( - CalculateInstallerBlob( - sharedFrameworkInstallerDestinationFile, - sharedFrameworkChannel, - sharedFrameworkVersion), - sharedFrameworkInstallerDownloadFile).Wait(); - - File.Copy(sharedFrameworkInstallerDownloadFile, sharedFrameworkInstallerDestinationFile, true); - } - - if (!File.Exists(sharedHostInstallerDownloadFile)) - { - var sharedHostInstallerDestinationFile = c.BuildContext.Get("SharedHostInstallerFile"); - Mkdirp(Path.GetDirectoryName(sharedHostInstallerDestinationFile)); - - AzurePublisher.DownloadFile( - CalculateInstallerBlob( - sharedHostInstallerDestinationFile, - sharedHostChannel, - hostVersion), - sharedHostInstallerDownloadFile).Wait(); - - File.Copy(sharedHostInstallerDownloadFile, sharedHostInstallerDestinationFile, true); - } - - if (!File.Exists(hostFxrInstallerDownloadFile)) - { - var hostFxrInstallerDestinationFile = c.BuildContext.Get("HostFxrInstallerFile"); - Mkdirp(Path.GetDirectoryName(hostFxrInstallerDestinationFile)); - - AzurePublisher.DownloadFile( - CalculateInstallerBlob( - hostFxrInstallerDestinationFile, - hostFxrChannel, - hostFxrVersion), - hostFxrInstallerDownloadFile).Wait(); - - File.Copy(hostFxrInstallerDownloadFile, hostFxrInstallerDestinationFile, true); - } - } - - return c.Success(); - } - - public static BuildTargetResult CheckPackageCache(BuildTargetContext c) - { - var ciBuild = string.Equals(Environment.GetEnvironmentVariable("CI_BUILD"), "1", StringComparison.Ordinal); - - // Always set the package cache location local to the build - Environment.SetEnvironmentVariable("NUGET_PACKAGES", Dirs.NuGetPackages); - - CleanNuGetTempCache(); - - // Determine cache expiration time - var cacheExpiration = 7 * 24; // cache expiration in hours - var cacheExpirationStr = Environment.GetEnvironmentVariable("NUGET_PACKAGES_CACHE_TIME_LIMIT"); - if (!string.IsNullOrEmpty(cacheExpirationStr)) - { - cacheExpiration = int.Parse(cacheExpirationStr); - } - - if (ciBuild) - { - var cacheTimeFile = Path.Combine(Dirs.NuGetPackages, "packageCacheTime.txt"); - - DateTime? cacheTime = null; - try - { - // Read the cache file - if (File.Exists(cacheTimeFile)) - { - var content = File.ReadAllText(cacheTimeFile); - if (!string.IsNullOrEmpty(content)) - { - cacheTime = DateTime.ParseExact("O", content, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); - } - } - } - catch (Exception ex) - { - c.Warn($"Error reading NuGet cache time file, leaving the cache alone"); - c.Warn($"Error Detail: {ex.ToString()}"); - } - - if (cacheTime == null || (cacheTime.Value.AddHours(cacheExpiration) < DateTime.UtcNow)) - { - // Cache has expired or the status is unknown, clear it and write the file - c.Info("Clearing NuGet cache"); - Rmdir(Dirs.NuGetPackages); - Mkdirp(Dirs.NuGetPackages); - File.WriteAllText(cacheTimeFile, DateTime.UtcNow.ToString("O")); - } - } - - return c.Success(); - } - - public static BuildTargetResult RestorePackages(BuildTargetContext c) - { - CheckPackageCache(c); - - var dotnet = DotNetCli.Stage0; - - dotnet.Restore("--verbosity", "verbose", "--disable-parallel") - .WorkingDirectory(Path.Combine(c.BuildContext.BuildDirectory, "src")) - .Execute() - .EnsureSuccessful(); - dotnet.Restore("--verbosity", "verbose", "--disable-parallel", "--infer-runtimes") - .WorkingDirectory(Path.Combine(c.BuildContext.BuildDirectory, "tools")) - .Execute() - .EnsureSuccessful(); - - return c.Success(); - } - - public static BuildTargetResult SetTelemetryProfile(BuildTargetContext c) - { - var gitResult = Cmd("git", "rev-parse", "HEAD") - .CaptureStdOut() - .Execute(); - gitResult.EnsureSuccessful(); - - var commitHash = gitResult.StdOut.Trim(); - - Environment.SetEnvironmentVariable("DOTNET_CLI_TELEMETRY_PROFILE", $"https://github.com/dotnet/cli;{commitHash}"); - - return c.Success(); - } - - private static IDictionary ReadBranchInfo(BuildTargetContext c, string path) - { - var lines = File.ReadAllLines(path); - var dict = new Dictionary(); - c.Verbose("Branch Info:"); - foreach (var line in lines) - { - if (!line.Trim().StartsWith("#") && !string.IsNullOrWhiteSpace(line)) - { - var splat = line.Split(new[] { '=' }, 2); - dict[splat[0]] = splat[1]; - c.Verbose($" {splat[0]} = {splat[1]}"); - } - } - return dict; - } - - private static void AddInstallerArtifactToContext( - BuildTargetContext c, - string artifactPrefix, - string contextPrefix, - string version) - { - var productName = Monikers.GetProductMoniker(c, artifactPrefix, version); - - var extension = CurrentPlatform.IsWindows ? ".zip" : ".tar.gz"; - c.BuildContext[contextPrefix + "CompressedFile"] = Path.Combine(Dirs.Packages, productName + extension); - - string installer = ""; - switch (CurrentPlatform.Current) - { - case BuildPlatform.Windows: - if (contextPrefix.Contains("Combined")) - { - installer = productName + ".exe"; - } - else - { - installer = productName + ".msi"; - } - break; - case BuildPlatform.OSX: - installer = productName + ".pkg"; - break; - case BuildPlatform.Ubuntu: - installer = productName + ".deb"; - break; - default: - break; - } - - if (!string.IsNullOrEmpty(installer)) - { - c.BuildContext[contextPrefix + "InstallerFile"] = Path.Combine(Dirs.Packages, installer); - } - } - - // The following CalculateBlob methods are temporary until the core-setup repo up-takes the new Azure Publish layout and - // CLI consumes newer Shared FX versions. - private static string CalculateArchiveBlob(string archiveFile, string channel, string version) - { - return $"{channel}/Binaries/{version}/{Path.GetFileName(archiveFile)}"; - } - - private static string CalculateInstallerBlob(string installerFile, string channel, string version) - { - return $"{channel}/Installers/{version}/{Path.GetFileName(installerFile)}"; - } - } -} diff --git a/build_projects/dotnet-cli-build/PublishTargets.cs b/build_projects/dotnet-cli-build/PublishTargets.cs deleted file mode 100644 index 0ca806806..000000000 --- a/build_projects/dotnet-cli-build/PublishTargets.cs +++ /dev/null @@ -1,295 +0,0 @@ -// 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 System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; -using Microsoft.DotNet.Cli.Build.Framework; -using Microsoft.Build.Utilities; - -namespace Microsoft.DotNet.Cli.Build -{ - public class PublishTargets : Task - { - private static AzurePublisher AzurePublisherTool { get; set; } - - private static DebRepoPublisher DebRepoPublisherTool { get; set; } - - private static string Channel { get; set; } - - private static string CommitHash { get; set; } - - private static string CliNuGetVersion { get; set; } - - private static string SharedFrameworkNugetVersion { get; set; } - - public override bool Execute() - { - BuildContext context = new BuildSetup("MSBuild").UseAllTargetsFromAssembly().CreateBuildContext(); - BuildTargetContext c = new BuildTargetContext(context, null, null); - - return Publish(c).Success; - } - - public static BuildTargetResult InitPublish(BuildTargetContext c) - { - AzurePublisherTool = new AzurePublisher(); - DebRepoPublisherTool = new DebRepoPublisher(Dirs.Packages); - - CliNuGetVersion = c.BuildContext.Get("BuildVersion").NuGetVersion; - SharedFrameworkNugetVersion = CliDependencyVersions.SharedFrameworkVersion; - Channel = c.BuildContext.Get("Channel"); - CommitHash = c.BuildContext.Get("CommitHash"); - - return c.Success(); - } - - [Target] - public static BuildTargetResult Publish(BuildTargetContext c) - { - if (EnvVars.GetBool("PUBLISH_TO_AZURE_BLOB")) // This is set by CI systems - { - PrepareTargets.Init(c); - - InitPublish(c); - PublishArtifacts(c); - FinalizeBuild(c); - } - - return c.Success(); - } - - public static BuildTargetResult FinalizeBuild(BuildTargetContext c) - { - if (CheckIfAllBuildsHavePublished()) - { - string targetContainer = $"{AzurePublisher.Product.Sdk}/{Channel}"; - string targetVersionFile = $"{targetContainer}/{CommitHash}"; - string semaphoreBlob = $"{targetContainer}/publishSemaphore"; - AzurePublisherTool.CreateBlobIfNotExists(semaphoreBlob); - string leaseId = AzurePublisherTool.AcquireLeaseOnBlob(semaphoreBlob); - - // Prevent race conditions by dropping a version hint of what version this is. If we see this file - // and it is the same as our version then we know that a race happened where two+ builds finished - // at the same time and someone already took care of publishing and we have no work to do. - if (AzurePublisherTool.IsLatestSpecifiedVersion(targetVersionFile)) - { - AzurePublisherTool.ReleaseLeaseOnBlob(semaphoreBlob, leaseId); - return c.Success(); - } - else - { - Regex versionFileRegex = new Regex(@"(?[\w\d]{40})"); - - // Delete old version files - AzurePublisherTool.ListBlobs(targetContainer) - .Where(s => versionFileRegex.IsMatch(s)) - .ToList() - .ForEach(f => AzurePublisherTool.TryDeleteBlob(f)); - - // Drop the version file signaling such for any race-condition builds (see above comment). - AzurePublisherTool.DropLatestSpecifiedVersion(targetVersionFile); - } - - try - { - CopyBlobsToLatest(targetContainer); - - string cliVersion = Utils.GetCliVersionFileContent(c); - AzurePublisherTool.PublishStringToBlob($"{targetContainer}/latest.version", cliVersion); - - UpdateVersionsRepo(c); - } - finally - { - AzurePublisherTool.ReleaseLeaseOnBlob(semaphoreBlob, leaseId); - } - } - - return c.Success(); - } - - private static void CopyBlobsToLatest(string destinationFolder) - { - foreach (string blob in AzurePublisherTool.ListBlobs(AzurePublisher.Product.Sdk, CliNuGetVersion)) - { - string targetName = Path.GetFileName(blob) - .Replace(CliNuGetVersion, "latest"); - - string target = $"{destinationFolder}/{targetName}"; - AzurePublisherTool.CopyBlob(blob, target); - } - } - - private static bool CheckIfAllBuildsHavePublished() - { - Dictionary badges = new Dictionary() - { - { "Windows_x86", false }, - { "Windows_x64", false }, - { "Ubuntu_x64", false }, - { "Ubuntu_16_04_x64", false }, - { "RHEL_x64", false }, - { "OSX_x64", false }, - { "Debian_x64", false }, - { "CentOS_x64", false }, - { "Fedora_23_x64", false }, - { "openSUSE_13_2_x64", false } - }; - - var versionBadgeName = $"{Monikers.GetBadgeMoniker()}"; - if (!badges.ContainsKey(versionBadgeName)) - { - throw new ArgumentException($"A new OS build '{versionBadgeName}' was added without adding the moniker to the {nameof(badges)} lookup"); - } - - IEnumerable blobs = AzurePublisherTool.ListBlobs(AzurePublisher.Product.Sdk, CliNuGetVersion); - foreach (string file in blobs) - { - string name = Path.GetFileName(file); - foreach (string img in badges.Keys) - { - if ((name.StartsWith($"{img}")) && (name.EndsWith(".svg"))) - { - badges[img] = true; - break; - } - } - } - - return badges.Values.All(v => v); - } - - public static BuildTargetResult PublishArtifacts(BuildTargetContext c) - { - PublishInstallerFilesToAzure(c); - PublishArchivesToAzure(c); - PublishDebFilesToDebianRepo(c); - PublishCliVersionBadge(c); - - return c.Success(); - } - - public static BuildTargetResult PublishInstallerFilesToAzure(BuildTargetContext c) - { - PublishSdkInstallerFileToAzure(c); - PublishCombinedFrameworkSDKHostInstallerFileToAzure(c); - - return c.Success(); - } - - public static BuildTargetResult PublishArchivesToAzure(BuildTargetContext c) - { - PublishCombinedHostFrameworkSdkArchiveToAzure(c); - PublishCombinedFrameworkSDKArchiveToAzure(c); - PublishSDKSymbolsArchiveToAzure(c); - - return c.Success(); - } - - public static BuildTargetResult PublishDebFilesToDebianRepo(BuildTargetContext c) - { - if (CurrentPlatform.IsPlatform(BuildPlatform.Ubuntu)) - { - PublishSdkDebToDebianRepo(c); - } - - return c.Success(); - } - - public static BuildTargetResult PublishCliVersionBadge(BuildTargetContext c) - { - var versionBadge = c.BuildContext.Get("VersionBadge"); - UploadFile(versionBadge); - - return c.Success(); - } - - public static BuildTargetResult PublishSdkInstallerFileToAzure(BuildTargetContext c) - { - if (CurrentPlatform.IsPlatform(BuildPlatform.Ubuntu)) - { - var installerFile = c.BuildContext.Get("SdkInstallerFile"); - UploadFile(installerFile); - } - - return c.Success(); - } - - public static BuildTargetResult PublishCombinedFrameworkSDKHostInstallerFileToAzure(BuildTargetContext c) - { - if (CurrentPlatform.IsAnyPlatform(BuildPlatform.Windows, BuildPlatform.OSX)) - { - var installerFile = c.BuildContext.Get("CombinedFrameworkSDKHostInstallerFile"); - UploadFile(installerFile); - } - - return c.Success(); - } - - public static BuildTargetResult PublishCombinedFrameworkSDKArchiveToAzure(BuildTargetContext c) - { - if (CurrentPlatform.IsPlatform(BuildPlatform.Windows)) - { - var archiveFile = c.BuildContext.Get("CombinedFrameworkSDKCompressedFile"); - UploadFile(archiveFile); - } - - return c.Success(); - } - - public static BuildTargetResult PublishCombinedHostFrameworkSdkArchiveToAzure(BuildTargetContext c) - { - var archiveFile = c.BuildContext.Get("CombinedFrameworkSDKHostCompressedFile"); - UploadFile(archiveFile); - - return c.Success(); - } - - public static BuildTargetResult PublishSDKSymbolsArchiveToAzure(BuildTargetContext c) - { - var archiveFile = c.BuildContext.Get("SdkSymbolsCompressedFile"); - UploadFile(archiveFile); - - return c.Success(); - } - - public static BuildTargetResult PublishSdkDebToDebianRepo(BuildTargetContext c) - { - if (CurrentPlatform.IsPlatform(BuildPlatform.Ubuntu)) - { - var version = CliNuGetVersion; - - var packageName = CliMonikers.GetSdkDebianPackageName(c); - var installerFile = c.BuildContext.Get("SdkInstallerFile"); - var uploadUrl = AzurePublisher.CalculateFullUrlForFile(installerFile, AzurePublisher.Product.Sdk, version); - - DebRepoPublisherTool.PublishDebFileToDebianRepo( - packageName, - version, - uploadUrl); - } - - return c.Success(); - } - - private static void UpdateVersionsRepo(BuildTargetContext c) - { - string githubAuthToken = EnvVars.EnsureVariable("GITHUB_PASSWORD"); - string nupkgFilePath = Dirs.Packages; - string branchName = c.BuildContext.Get("BranchName"); - string versionsRepoPath = $"build-info/dotnet/cli/{branchName}/Latest"; - - VersionRepoUpdater repoUpdater = new VersionRepoUpdater(githubAuthToken); - repoUpdater.UpdatePublishedVersions(nupkgFilePath, versionsRepoPath).Wait(); - } - - private static string UploadFile(string file) - { - return AzurePublisherTool.UploadFile(file, AzurePublisher.Product.Sdk, CliNuGetVersion); - } - } -} - diff --git a/build_projects/shared-build-targets-utils/BuildFailureException.cs b/build_projects/shared-build-targets-utils/BuildFailureException.cs new file mode 100644 index 000000000..eeee16171 --- /dev/null +++ b/build_projects/shared-build-targets-utils/BuildFailureException.cs @@ -0,0 +1,19 @@ +using System; + +namespace Microsoft.DotNet.Cli.Build +{ + public class BuildFailureException : Exception + { + public BuildFailureException() + { + } + + public BuildFailureException(string message) : base(message) + { + } + + public BuildFailureException(string message, Exception innerException) : base(message, innerException) + { + } + } +} \ No newline at end of file diff --git a/build_projects/shared-build-targets-utils/Utils/FS.cs b/build_projects/shared-build-targets-utils/Utils/FS.cs index 80cddcff2..dc20ec859 100644 --- a/build_projects/shared-build-targets-utils/Utils/FS.cs +++ b/build_projects/shared-build-targets-utils/Utils/FS.cs @@ -102,22 +102,5 @@ namespace Microsoft.DotNet.Cli.Build } } } - - public static void CleanBinObj(BuildTargetContext c, string dir) - { - dir = dir ?? c.BuildContext.BuildDirectory; - foreach(var candidate in Directory.EnumerateDirectories(dir)) - { - if (string.Equals(Path.GetFileName(candidate), "bin") || - string.Equals(Path.GetFileName(candidate), "obj")) - { - Utils.DeleteDirectory(candidate); - } - else - { - CleanBinObj(c, candidate); - } - } - } } } diff --git a/build_projects/shared-build-targets-utils/Utils/Monikers.cs b/build_projects/shared-build-targets-utils/Utils/Monikers.cs index 81acc480c..2553ccf44 100644 --- a/build_projects/shared-build-targets-utils/Utils/Monikers.cs +++ b/build_projects/shared-build-targets-utils/Utils/Monikers.cs @@ -15,22 +15,6 @@ namespace Microsoft.DotNet.Cli.Build public const string SharedHostBrandName = "Microsoft .NET Core 1.0.0 - Host"; public const string HostFxrBrandName = "Microsoft .NET Core 1.0.0 - Host FX Resolver"; - public static string GetProductMoniker(BuildTargetContext c, string artifactPrefix, string version) - { - string rid = RuntimeEnvironment.GetRuntimeIdentifier(); - - if (rid == "ubuntu.16.04-x64" || rid == "fedora.23-x64" || rid == "opensuse.13.2-x64") - { - return $"{artifactPrefix}-{rid}.{version}"; - } - else - { - string osname = GetOSShortName(); - var arch = CurrentArchitecture.Current.ToString(); - return $"{artifactPrefix}-{osname}-{arch}.{version}"; - } - } - public static string GetBadgeMoniker() { switch (RuntimeEnvironment.GetRuntimeIdentifier()) @@ -55,12 +39,7 @@ namespace Microsoft.DotNet.Cli.Build { return $"dotnet-sharedframework-{SharedFrameworkName}-{sharedFrameworkNugetVersion}".ToLower(); } - - public static string GetDebianSharedHostPackageName(BuildTargetContext c) - { - return $"dotnet-host".ToLower(); - } - + public static string GetOSShortName() { string osname = ""; diff --git a/build_projects/shared-build-targets-utils/Utils/SharedFrameworkPublisher.cs b/build_projects/shared-build-targets-utils/Utils/SharedFrameworkPublisher.cs deleted file mode 100644 index 67e522557..000000000 --- a/build_projects/shared-build-targets-utils/Utils/SharedFrameworkPublisher.cs +++ /dev/null @@ -1,219 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Newtonsoft.Json.Linq; -using Microsoft.DotNet.InternalAbstractions; -using Microsoft.DotNet.Cli.Build.Framework; -using Newtonsoft.Json; - -using static Microsoft.DotNet.Cli.Build.Framework.BuildHelpers; -using static Microsoft.DotNet.Cli.Build.FS; - -namespace Microsoft.DotNet.Cli.Build -{ - public class SharedFrameworkPublisher - { - public static string s_sharedFrameworkName = "Microsoft.NETCore.App"; - - private string _sharedFrameworkTemplateSourceRoot; - private string _sharedFrameworkNugetVersion; - private string _sharedFrameworkRid; - private string _sharedFrameworkSourceRoot; - private string _repoRoot; - private string _corehostLockedDirectory; - private string _corehostLatestDirectory; - - private Crossgen _crossgenUtil = new Crossgen(DependencyVersions.CoreCLRVersion, DependencyVersions.JitVersion); - private string _corehostPackageSource; - - public SharedFrameworkPublisher( - string repoRoot, - string corehostLockedDirectory, - string corehostLatestDirectory, - string corehostPackageSource, - string sharedFrameworkNugetVersion) - { - _repoRoot = repoRoot; - _corehostLockedDirectory = corehostLockedDirectory; - _corehostLatestDirectory = corehostLatestDirectory; - _corehostPackageSource = corehostPackageSource; - - _sharedFrameworkTemplateSourceRoot = Path.Combine(repoRoot, "src", "sharedframework", "framework"); - _sharedFrameworkNugetVersion = sharedFrameworkNugetVersion; - - _sharedFrameworkRid = ComputeSharedFrameworkRid(); - - _sharedFrameworkSourceRoot = GenerateSharedFrameworkProject( - _sharedFrameworkNugetVersion, - _sharedFrameworkTemplateSourceRoot, - _sharedFrameworkRid); - } - - public static string GetSharedFrameworkPublishPath(string outputRootDirectory, string sharedFrameworkNugetVersion) - { - return Path.Combine( - outputRootDirectory, - "shared", - s_sharedFrameworkName, - sharedFrameworkNugetVersion); - } - - private string ComputeSharedFrameworkRid() - { - return RuntimeEnvironment.OperatingSystemPlatform == Platform.Windows - ? $"win7-{RuntimeEnvironment.RuntimeArchitecture}" - : RuntimeEnvironment.GetRuntimeIdentifier(); - } - - public void CopySharedHostArtifacts(string sharedFrameworkPublishRoot) - { - File.Copy( - Path.Combine(_corehostLockedDirectory, HostArtifactNames.DotnetHostBaseName), - Path.Combine(sharedFrameworkPublishRoot, HostArtifactNames.DotnetHostBaseName), true); - - File.Copy( - Path.Combine(_corehostLockedDirectory, HostArtifactNames.DotnetHostFxrBaseName), - Path.Combine(sharedFrameworkPublishRoot, HostArtifactNames.DotnetHostFxrBaseName), true); - - } - - public void PublishSharedFramework(string outputRootDirectory, string commitHash, DotNetCli dotnetCli) - { - dotnetCli.Restore( - "--verbosity", "verbose", - "--disable-parallel", - "--infer-runtimes", - "--fallbacksource", _corehostPackageSource) - .WorkingDirectory(_sharedFrameworkSourceRoot) - .Execute() - .EnsureSuccessful(); - - // We publish to a sub folder of the PublishRoot so tools like heat and zip can generate folder structures easier. - string sharedFrameworkNameAndVersionRoot = GetSharedFrameworkPublishPath(outputRootDirectory, _sharedFrameworkNugetVersion); - if (Directory.Exists(sharedFrameworkNameAndVersionRoot)) - { - Utils.DeleteDirectory(sharedFrameworkNameAndVersionRoot); - } - - dotnetCli.Publish( - "--output", sharedFrameworkNameAndVersionRoot, - "-r", _sharedFrameworkRid, - _sharedFrameworkSourceRoot) - .Execute() - .EnsureSuccessful(); - - // Clean up artifacts that dotnet-publish generates which we don't need - PublishMutationUtilties.CleanPublishOutput( - sharedFrameworkNameAndVersionRoot, - "framework", - deleteRuntimeConfigJson: true, - deleteDepsJson: false); - - // Rename the .deps file - var destinationDeps = Path.Combine(sharedFrameworkNameAndVersionRoot, $"{s_sharedFrameworkName}.deps.json"); - File.Move(Path.Combine(sharedFrameworkNameAndVersionRoot, "framework.deps.json"), destinationDeps); - PublishMutationUtilties.ChangeEntryPointLibraryName(destinationDeps, null); - - // Generate RID fallback graph - GenerateRuntimeGraph(dotnetCli, destinationDeps); - - CopyHostArtifactsToSharedFramework(sharedFrameworkNameAndVersionRoot); - - if (File.Exists(Path.Combine(sharedFrameworkNameAndVersionRoot, "mscorlib.ni.dll"))) - { - // Publish already places the crossgen'd version of mscorlib into the output, so we can - // remove the IL version - File.Delete(Path.Combine(sharedFrameworkNameAndVersionRoot, "mscorlib.dll")); - } - - _crossgenUtil.CrossgenDirectory(sharedFrameworkNameAndVersionRoot, sharedFrameworkNameAndVersionRoot); - - // Generate .version file for sharedfx - var version = _sharedFrameworkNugetVersion; - var content = $@"{commitHash}{Environment.NewLine}{version}{Environment.NewLine}"; - File.WriteAllText(Path.Combine(sharedFrameworkNameAndVersionRoot, ".version"), content); - - return; - } - - private void GenerateRuntimeGraph(DotNetCli dotnetCli, string destinationDeps) - { - string runtimeGraphGeneratorRuntime = null; - switch (RuntimeEnvironment.OperatingSystemPlatform) - { - case Platform.Windows: - runtimeGraphGeneratorRuntime = "win"; - break; - case Platform.Linux: - runtimeGraphGeneratorRuntime = "linux"; - break; - case Platform.Darwin: - runtimeGraphGeneratorRuntime = "osx"; - break; - } - if (!string.IsNullOrEmpty(runtimeGraphGeneratorRuntime)) - { - var runtimeGraphGeneratorName = "RuntimeGraphGenerator"; - var runtimeGraphGeneratorProject = Path.Combine(Dirs.RepoRoot, "tools", "independent", runtimeGraphGeneratorName); - var runtimeGraphGeneratorOutput = Path.Combine(Dirs.Output, "tools", "independent", runtimeGraphGeneratorName); - - dotnetCli.Publish( - "--output", runtimeGraphGeneratorOutput, - runtimeGraphGeneratorProject).Execute().EnsureSuccessful(); - var runtimeGraphGeneratorExe = Path.Combine(runtimeGraphGeneratorOutput, $"{runtimeGraphGeneratorName}{Constants.ExeSuffix}"); - - Cmd(runtimeGraphGeneratorExe, "--project", _sharedFrameworkSourceRoot, "--deps", destinationDeps, runtimeGraphGeneratorRuntime) - .Execute() - .EnsureSuccessful(); - } - else - { - throw new Exception($"Could not determine rid graph generation runtime for platform {RuntimeEnvironment.OperatingSystemPlatform}"); - } - } - - private void CopyHostArtifactsToSharedFramework(string sharedFrameworkNameAndVersionRoot) - { - File.Copy( - Path.Combine(_corehostLockedDirectory, HostArtifactNames.DotnetHostBaseName), - Path.Combine(sharedFrameworkNameAndVersionRoot, HostArtifactNames.DotnetHostBaseName), true); - File.Copy( - Path.Combine(_corehostLockedDirectory, HostArtifactNames.DotnetHostBaseName), - Path.Combine(sharedFrameworkNameAndVersionRoot, $"corehost{Constants.ExeSuffix}"), true); - File.Copy( - Path.Combine(_corehostLockedDirectory, HostArtifactNames.DotnetHostFxrBaseName), - Path.Combine(sharedFrameworkNameAndVersionRoot, HostArtifactNames.DotnetHostFxrBaseName), true); - - // Hostpolicy should be the latest and not the locked version as it is supposed to evolve for - // the framework and has a tight coupling with coreclr's API in the framework. - File.Copy( - Path.Combine(_corehostLatestDirectory, HostArtifactNames.HostPolicyBaseName), - Path.Combine(sharedFrameworkNameAndVersionRoot, HostArtifactNames.HostPolicyBaseName), true); - } - - private string GenerateSharedFrameworkProject( - string sharedFrameworkNugetVersion, - string sharedFrameworkTemplatePath, - string rid) - { - string sharedFrameworkProjectPath = Path.Combine(Dirs.Intermediate, "sharedFramework", "framework"); - Utils.DeleteDirectory(sharedFrameworkProjectPath); - CopyRecursive(sharedFrameworkTemplatePath, sharedFrameworkProjectPath, true); - - string templateFile = Path.Combine(sharedFrameworkProjectPath, "project.json.template"); - JObject sharedFrameworkProject = JsonUtils.ReadProject(templateFile); - sharedFrameworkProject["dependencies"]["Microsoft.NETCore.App"] = sharedFrameworkNugetVersion; - ((JObject)sharedFrameworkProject["runtimes"]).RemoveAll(); - sharedFrameworkProject["runtimes"][rid] = new JObject(); - - string projectJsonPath = Path.Combine(sharedFrameworkProjectPath, "project.json"); - JsonUtils.WriteProject(sharedFrameworkProject, projectJsonPath); - - Rm(templateFile); - - return sharedFrameworkProjectPath; - } - } -} diff --git a/build_projects/shared-build-targets-utils/Utils/Utils.cs b/build_projects/shared-build-targets-utils/Utils/Utils.cs index 05e9f0aa6..e10011106 100644 --- a/build_projects/shared-build-targets-utils/Utils/Utils.cs +++ b/build_projects/shared-build-targets-utils/Utils/Utils.cs @@ -90,18 +90,5 @@ namespace Microsoft.DotNet.Cli.Build { return $@"{commitHash}{Environment.NewLine}{version}{Environment.NewLine}"; } - - public static string GetSharedFrameworkVersionFileContent(BuildTargetContext c) - { - string SharedFrameworkNugetVersion = c.BuildContext.Get("SharedFrameworkNugetVersion"); - return $@"{c.BuildContext["CommitHash"]}{Environment.NewLine}{SharedFrameworkNugetVersion}{Environment.NewLine}"; - } - - public static string GetCliVersionFileContent(BuildTargetContext c) - { - var buildVersion = c.BuildContext.Get("BuildVersion"); - var version = buildVersion.NuGetVersion; - return $@"{c.BuildContext["CommitHash"]}{Environment.NewLine}{version}{Environment.NewLine}"; - } } } diff --git a/build_projects/shared-build-targets-utils/Utils/YumDependencyUtility.cs b/build_projects/shared-build-targets-utils/Utils/YumDependencyUtility.cs index 480c6ce40..0b025bda1 100644 --- a/build_projects/shared-build-targets-utils/Utils/YumDependencyUtility.cs +++ b/build_projects/shared-build-targets-utils/Utils/YumDependencyUtility.cs @@ -13,7 +13,6 @@ namespace Microsoft.DotNet.Cli.Build var result = Command.Create("yum", "list", "installed", packageName) .CaptureStdOut() .CaptureStdErr() - .QuietBuildReporter() .Execute(); return result.ExitCode == 0;