internal static async Task <bool> ValidateAllServiceConfigFiles(IConfigurationFileValidator configValidator, string sourcePath, string[] completeConfigFiles) { var validateConfigTasks = completeConfigFiles.Select(completeConfigFile => ValidateServiceConfigFile(configValidator, sourcePath, completeConfigFile)); var results = await Task.WhenAll(validateConfigTasks); return(results.All(r => r == true)); }
private static async Task <bool> ValidateServiceConfigFile(IConfigurationFileValidator configValidator, string sourcePath, string completeConfigFile) { var result = await configValidator.ValidateConfigurationFile(sourcePath, completeConfigFile); if (!result.IsValid) { Output.Error($"Invalid Service Configuration {completeConfigFile}: {result.Response}"); } return(result.IsValid); }
public PublishCommand( IBuildConfigurationBuilder buildConfigurationBuilder, IConfigurationFileMerger configurationFileMerger, IConfigurationFileValidator configurationFileValidator, IConfigurationFileUploader configurationFileUploader, IStaticAssetProcessor staticAssetProcessor, IAccessor <S3AssetHostConfiguration> assetHostConfigurationAccessor) { _buildConfigurationBuilder = buildConfigurationBuilder.ThrowIfNull(nameof(buildConfigurationBuilder)); _configurationFileUploader = configurationFileUploader.ThrowIfNull(nameof(configurationFileUploader)); _configurationFileMerger = configurationFileMerger.ThrowIfNull(nameof(configurationFileMerger)); _configurationFileValidator = configurationFileValidator.ThrowIfNull(nameof(configurationFileValidator)); _staticAssetProcessor = staticAssetProcessor.ThrowIfNull(nameof(staticAssetProcessor)); _assetHostConfigurationAccessor = assetHostConfigurationAccessor.ThrowIfNull(nameof(assetHostConfigurationAccessor)); }
internal static async Task <int> Publish(MarvelMicroserviceConfig config, IBuildConfigurationBuilder configBuilder, IConfigurationFileMerger configMerger, IConfigurationFileUploader configUploader, IConfigurationFileValidator configValidator, IStaticAssetProcessor staticAssetProcessor, string nugetApiKey, string awsAccessKey, string awsAccessSecret, string branch, string gitSha, string buildNumber, bool mergeAndUploadServiceConfig, bool mergeServiceConfig) { Security.UseAwsCredentials(awsAccessKey, awsAccessSecret); var publishImage = ImageNameBuilder.CreateImageNameAndTag( config.ServiceName, branch, gitSha, DateTime.UtcNow, buildNumber); string[] serviceConfigFiles = null; if (mergeAndUploadServiceConfig || mergeServiceConfig) { GenerateBuildFile(configBuilder, config.BuildConfigFilePath, gitSha, branch, publishImage.FullPath, buildNumber); serviceConfigFiles = await MergeAllServiceConfigFiles(configMerger, config.SourceDirectory, config.ServiceConfigFileName, config.BuildConfigFilePath); var configIsValid = await ValidateAllServiceConfigFiles(configValidator, config.SourceDirectory, serviceConfigFiles); if (!configIsValid) { Output.Error("Invalid service configuration."); return(1); } } var exitCode = await BuildCommand.Build(config, publishImage.FullPath, new BuildConfig { BranchName = branch, BuildNumber = buildNumber, }, staticAssetProcessor); if (exitCode != 0) { return(exitCode); } try { exitCode = PublishClientPackage(config, nugetApiKey, awsAccessKey, awsAccessSecret, branch, gitSha, buildNumber); if (exitCode != 0) { return(exitCode); } // Publish to ECR Output.Info($"Publishing {publishImage.FullPath}"); await Security.EnsureAuthenticatedWithEcr(); exitCode = CommandUtilities.ExecuteCommand("docker", $"push {publishImage.FullPath}"); if (exitCode != 0) { return(exitCode); } } finally { // TODO always remove image, even on publish failure await CommandUtilities.RunCommandAsync("docker", $"rmi {publishImage.FullPath}", errorMessage : $"Failed to remove image {publishImage.FullPath}."); Output.Info($"Removed local image {publishImage.FullPath}"); } try { if (mergeAndUploadServiceConfig && serviceConfigFiles != null) { await UploadAllServiceConfigFiles(configUploader, config.SourceDirectory, serviceConfigFiles, publishImage.Tag); } } catch (Exception ex) { Output.Error($"Unable to upload service configuration files. Error: {ex.Message}"); return(1); } File.WriteAllText(Path.Combine(config.WebappDirectory, "PublishedImageUrl.txt"), publishImage.FullPath); Output.Info("Publish successful"); return(0); }