public void SetUp() { deployReleaseCommand = new DeployReleaseCommand(RepositoryFactory, Log, FileSystem); var project = new ProjectResource(); var release = new ReleaseResource { Version = "1.0.0" }; var releases = new ResourceCollection <ReleaseResource>(new[] { release }, new LinkCollection()); var deploymentPromotionTarget = new DeploymentPromotionTarget { Name = "TestEnvironment" }; var promotionTargets = new List <DeploymentPromotionTarget> { deploymentPromotionTarget }; var deploymentTemplate = new DeploymentTemplateResource { PromoteTo = promotionTargets }; var deploymentPreviewResource = new DeploymentPreviewResource { StepsToExecute = new List <DeploymentTemplateStep>() }; var deployment = new DeploymentResource { TaskId = "1" }; taskResource = new TaskResource(); Repository.Projects.FindByName(ProjectName).Returns(project); Repository.Projects.GetReleases(project).Returns(releases); Repository.Releases.GetPreview(deploymentPromotionTarget).Returns(deploymentPreviewResource); Repository.Releases.GetTemplate(release).Returns(deploymentTemplate); Repository.Deployments.Create(Arg.Any <DeploymentResource>()).Returns(deployment); Repository.Tasks.Get(deployment.TaskId).Returns(taskResource); }
public void SetUp() { deployReleaseCommand = new DeployReleaseCommand(RepositoryFactory, FileSystem, ClientFactory, CommandOutputProvider); var project = new ProjectResource(); var release = new ReleaseResource { Version = "1.0.0" }; var releases = new ResourceCollection <ReleaseResource>(new[] { release }, new LinkCollection()); var deploymentPromotionTarget = new DeploymentPromotionTarget { Name = ValidEnvironment, Id = "Env-1" }; var promotionTargets = new List <DeploymentPromotionTarget> { deploymentPromotionTarget }; var tenantPromotionTarget1 = new DeploymentPromomotionTenant() { Id = "Tenant-1", PromoteTo = promotionTargets }; var tenantPromotionTarget2 = new DeploymentPromomotionTenant() { Id = "Tenant-2", PromoteTo = new List <DeploymentPromotionTarget>() }; var deploymentTemplate = new DeploymentTemplateResource { PromoteTo = promotionTargets, TenantPromotions = { tenantPromotionTarget1, tenantPromotionTarget2 } }; var deploymentPreviewResource = new DeploymentPreviewResource { StepsToExecute = new List <DeploymentTemplateStep>() }; var deployment = new DeploymentResource { TaskId = "Task-1" }; taskResource = new TaskResource() { Id = "Task-1" }; Repository.Projects.FindByName(ProjectName).Returns(project); Repository.Projects.GetReleases(project).Returns(releases); Repository.Releases.GetPreview(deploymentPromotionTarget).Returns(deploymentPreviewResource); Repository.Releases.GetTemplate(release).Returns(deploymentTemplate); Repository.Deployments.Create(Arg.Any <DeploymentResource>()).Returns(deployment); Repository.Tasks.Get(deployment.TaskId).Returns(taskResource); Repository.Tenants.Get(Arg.Is <string[]>(arg => arg.All(arg2 => arg2 == "Tenant-1" || arg2 == "Tenant-2"))) .Returns(new List <TenantResource>() { new TenantResource() { Id = "Tenant-1" }, new TenantResource() { Id = "Tenant-2" }, }); }
private async Task <DeploymentResource> CreateDeploymentTask(ProjectResource project, ReleaseResource release, DeploymentPromotionTarget promotionTarget, ReferenceCollection specificMachineIds, TenantResource tenant = null) { var preview = await Repository.Releases.GetPreview(promotionTarget).ConfigureAwait(false); // Validate skipped steps var skip = new ReferenceCollection(); foreach (var step in SkipStepNames) { var stepToExecute = preview.StepsToExecute.SingleOrDefault(s => string.Equals(s.ActionName, step, StringComparison.CurrentCultureIgnoreCase)); if (stepToExecute == null) { Log.Warning("No step/action named '{Step:l}' could be found when deploying to environment '{Environment:l}', so the step cannot be skipped.", step, promotionTarget.Name); } else { Log.Debug("Skipping step: {Step:l}", stepToExecute.ActionName); skip.Add(stepToExecute.ActionId); } } // Validate form values supplied if (preview.Form != null && preview.Form.Elements != null && preview.Form.Values != null) { foreach (var element in preview.Form.Elements) { var variableInput = element.Control as VariableValue; if (variableInput == null) { continue; } var value = variables.Get(variableInput.Label) ?? variables.Get(variableInput.Name); if (string.IsNullOrWhiteSpace(value) && element.IsValueRequired) { throw new ArgumentException("Please provide a variable for the prompted value " + variableInput.Label); } preview.Form.Values[element.Name] = value; } } // Log step with no machines foreach (var previewStep in preview.StepsToExecute) { if (previewStep.HasNoApplicableMachines) { Log.Warning("Warning: there are no applicable machines roles used by step {Step:l}", previewStep.ActionName); } } var deployment = await Repository.Deployments.Create(new DeploymentResource { TenantId = tenant?.Id, EnvironmentId = promotionTarget.Id, SkipActions = skip, ReleaseId = release.Id, ForcePackageDownload = ForcePackageDownload, UseGuidedFailure = UseGuidedFailure.GetValueOrDefault(preview.UseGuidedFailureModeByDefault), SpecificMachineIds = specificMachineIds, ForcePackageRedeployment = ForcePackageRedeployment, FormValues = (preview.Form ?? new Form()).Values, QueueTime = DeployAt == null ? null : (DateTimeOffset?)DeployAt.Value }) .ConfigureAwait(false); Log.Information("Deploying {Project:l} {Release:} to: {PromotionTarget:l} {Tenant:l}(Guided Failure: {GuidedFailure:l})", project.Name, release.Version, promotionTarget.Name, tenant == null ? string.Empty : $"for {tenant.Name} ", deployment.UseGuidedFailure ? "Enabled" : "Not Enabled"); return(deployment); }
public Task <DeploymentPreviewResource> GetPreview(DeploymentPromotionTarget promotionTarget) { return(Client.Get <DeploymentPreviewResource>(promotionTarget.Link("Preview"))); }
public RunbookRunPreviewResource GetPreview(DeploymentPromotionTarget promotionTarget) { return(Client.Get <RunbookRunPreviewResource>(promotionTarget.Link("RunbookRunPreview"))); }