From b2a70b2daa895984b57927941ceebfb59613fdba Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Sat, 25 Apr 2020 12:02:11 -0700 Subject: [PATCH] Move container defaults to a step --- .../ApplyContainerDefaultsStep.cs | 29 +++++++++++++++++++ src/tye/BuildHost.cs | 3 +- src/tye/GenerateHost.cs | 3 +- src/tye/Program.DeployCommand.cs | 13 ++------- src/tye/Program.PushCommand.cs | 3 +- 5 files changed, 38 insertions(+), 13 deletions(-) create mode 100644 src/Microsoft.Tye.Core/ApplyContainerDefaultsStep.cs diff --git a/src/Microsoft.Tye.Core/ApplyContainerDefaultsStep.cs b/src/Microsoft.Tye.Core/ApplyContainerDefaultsStep.cs new file mode 100644 index 00000000..3f4a710c --- /dev/null +++ b/src/Microsoft.Tye.Core/ApplyContainerDefaultsStep.cs @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Threading.Tasks; + +namespace Microsoft.Tye +{ + public sealed class ApplyContainerDefaultsStep : ApplicationExecutor.ServiceStep + { + public override string DisplayText => "Applying container defaults..."; + + public override Task ExecuteAsync(OutputContext output, ApplicationBuilder application, ServiceBuilder service) + { + if (SkipWithoutProject(output, service, out var project)) + { + return Task.CompletedTask; + } + + if (SkipWithoutContainerInfo(output, service, out var container)) + { + return Task.CompletedTask; + } + + DockerfileGenerator.ApplyContainerDefaults(application, project, container); + return Task.CompletedTask; + } + } +} diff --git a/src/tye/BuildHost.cs b/src/tye/BuildHost.cs index 33ab4679..ffccc91f 100644 --- a/src/tye/BuildHost.cs +++ b/src/tye/BuildHost.cs @@ -26,12 +26,13 @@ namespace Microsoft.Tye public static async Task ExecuteBuildAsync(OutputContext output, ApplicationBuilder application, string environment, bool interactive) { await application.ProcessExtensionsAsync(output, ExtensionContext.OperationKind.Deploy); - Program.ApplyRegistryAndDefaults(output, application, interactive, requireRegistry: false); + Program.ApplyRegistry(output, application, interactive, requireRegistry: false); var executor = new ApplicationExecutor(output) { ServiceSteps = { + new ApplyContainerDefaultsStep(), new CombineStep() { Environment = environment, }, new PublishProjectStep(), new BuildDockerImageStep() { Environment = environment, }, diff --git a/src/tye/GenerateHost.cs b/src/tye/GenerateHost.cs index b758ba0d..9f949fa5 100644 --- a/src/tye/GenerateHost.cs +++ b/src/tye/GenerateHost.cs @@ -33,12 +33,13 @@ namespace Microsoft.Tye public static async Task ExecuteGenerateAsync(OutputContext output, ApplicationBuilder application, string environment, bool interactive) { await application.ProcessExtensionsAsync(output, ExtensionContext.OperationKind.Deploy); - Program.ApplyRegistryAndDefaults(output, application, interactive, requireRegistry: false); + Program.ApplyRegistry(output, application, interactive, requireRegistry: false); var executor = new ApplicationExecutor(output) { ServiceSteps = { + new ApplyContainerDefaultsStep(), new CombineStep() { Environment = environment, }, new PublishProjectStep(), new BuildDockerImageStep() { Environment = environment, }, // Make an image but don't push it diff --git a/src/tye/Program.DeployCommand.cs b/src/tye/Program.DeployCommand.cs index 93c96034..9a125113 100644 --- a/src/tye/Program.DeployCommand.cs +++ b/src/tye/Program.DeployCommand.cs @@ -70,12 +70,13 @@ namespace Microsoft.Tye } await application.ProcessExtensionsAsync(output, ExtensionContext.OperationKind.Deploy); - ApplyRegistryAndDefaults(output, application, interactive, requireRegistry: true); + ApplyRegistry(output, application, interactive, requireRegistry: true); var executor = new ApplicationExecutor(output) { ServiceSteps = { + new ApplyContainerDefaultsStep(), new CombineStep() { Environment = environment, }, new PublishProjectStep(), new BuildDockerImageStep() { Environment = environment, }, @@ -130,7 +131,7 @@ namespace Microsoft.Tye step.MarkComplete(); } - internal static void ApplyRegistryAndDefaults(OutputContext output, ApplicationBuilder application, bool interactive, bool requireRegistry) + internal static void ApplyRegistry(OutputContext output, ApplicationBuilder application, bool interactive, bool requireRegistry) { if (application.Registry is null && interactive) { @@ -148,14 +149,6 @@ namespace Microsoft.Tye { // No registry specified, and that's OK! } - - foreach (var service in application.Services) - { - if (service is ProjectServiceBuilder project && project.ContainerInfo is ContainerInfo container) - { - DockerfileGenerator.ApplyContainerDefaults(application, project, container); - } - } } } } diff --git a/src/tye/Program.PushCommand.cs b/src/tye/Program.PushCommand.cs index ab9b71b9..2a2bd743 100644 --- a/src/tye/Program.PushCommand.cs +++ b/src/tye/Program.PushCommand.cs @@ -52,12 +52,13 @@ namespace Microsoft.Tye private static async Task ExecutePushAsync(OutputContext output, ApplicationBuilder application, string environment, bool interactive, bool force) { await application.ProcessExtensionsAsync(output, ExtensionContext.OperationKind.Deploy); - ApplyRegistryAndDefaults(output, application, interactive, requireRegistry: true); + ApplyRegistry(output, application, interactive, requireRegistry: true); var executor = new ApplicationExecutor(output) { ServiceSteps = { + new ApplyContainerDefaultsStep(), new CombineStep() { Environment = environment, }, new PublishProjectStep(), new BuildDockerImageStep() { Environment = environment, },