/// <summary> /// Publishes the ASP.NET Core project to App Engine Flex and reports progress to the UI. /// </summary> /// <param name="project">The project to deploy.</param> /// <param name="options">The <see cref="DeploymentOptions"/> to use.</param> public async Task PublishProjectAsync(IParsedProject project, DeploymentOptions options) { try { ShellUtils.SaveAllFiles(); GcpOutputWindow.Activate(); GcpOutputWindow.Clear(); GcpOutputWindow.OutputLine(string.Format(Resources.FlexPublishStepStartMessage, project.Name)); TimeSpan deploymentDuration; AppEngineFlexDeploymentResult result; using (StatusbarHelper.Freeze()) using (StatusbarHelper.ShowDeployAnimation()) using (ProgressBarHelper progress = StatusbarHelper.ShowProgressBar(Resources.FlexPublishProgressMessage)) using (ShellUtils.SetShellUIBusy()) { DateTime startDeploymentTime = DateTime.Now; result = await PublishProjectAsync( project, options, progress, VsVersionUtils.ToolsPathProvider, GcpOutputWindow.OutputLine); deploymentDuration = DateTime.Now - startDeploymentTime; } if (result != null) { GcpOutputWindow.OutputLine(string.Format(Resources.FlexPublishSuccessMessage, project.Name)); StatusbarHelper.SetText(Resources.PublishSuccessStatusMessage); string url = result.GetDeploymentUrl(); GcpOutputWindow.OutputLine(string.Format(Resources.PublishUrlMessage, url)); if (options.OpenWebsite) { Process.Start(url); } EventsReporterWrapper.ReportEvent( GaeDeployedEvent.Create(CommandStatus.Success, deploymentDuration)); } else { GcpOutputWindow.OutputLine(string.Format(Resources.FlexPublishFailedMessage, project.Name)); StatusbarHelper.SetText(Resources.PublishFailureStatusMessage); EventsReporterWrapper.ReportEvent(GaeDeployedEvent.Create(CommandStatus.Failure, deploymentDuration)); } } catch (Exception) { EventsReporterWrapper.ReportEvent(GaeDeployedEvent.Create(CommandStatus.Failure)); GcpOutputWindow.OutputLine(string.Format(Resources.FlexPublishFailedMessage, project.Name)); StatusbarHelper.SetText(Resources.PublishFailureStatusMessage); } }
/// <summary> /// Publishes the ASP.NET Core project to App Engine Flex and reports progress to the UI. /// </summary> /// <param name="project">The project to deploy.</param> /// <param name="options">The <see cref="DeploymentOptions"/> to use.</param> public async Task PublishProjectAsync(IParsedProject project, DeploymentOptions options) { try { await GoogleCloudExtensionPackage.Instance.JoinableTaskFactory.SwitchToMainThreadAsync(); ShellUtils.SaveAllFiles(); await GcpOutputWindow.ActivateAsync(); await GcpOutputWindow.ClearAsync(); await GcpOutputWindow.OutputLineAsync(string.Format(Resources.FlexPublishStepStartMessage, project.Name)); TimeSpan deploymentDuration; AppEngineFlexDeploymentResult result; using (await StatusbarHelper.FreezeAsync()) using (await StatusbarHelper.ShowDeployAnimationAsync()) using (IDisposableProgress progress = await StatusbarHelper.ShowProgressBarAsync(Resources.FlexPublishProgressMessage)) using (await ShellUtils.SetShellUIBusyAsync()) { DateTime startDeploymentTime = DateTime.Now; result = await PublishProjectAsync(project, options, progress); deploymentDuration = DateTime.Now - startDeploymentTime; } if (result != null) { await GcpOutputWindow.OutputLineAsync(string.Format(Resources.FlexPublishSuccessMessage, project.Name)); await StatusbarHelper.SetTextAsync(Resources.PublishSuccessStatusMessage); string url = result.GetDeploymentUrl(); await GcpOutputWindow.OutputLineAsync(string.Format(Resources.PublishUrlMessage, url)); if (options.OpenWebsite) { Process.Start(url); } EventsReporterWrapper.ReportEvent( GaeDeployedEvent.Create(CommandStatus.Success, deploymentDuration)); } else { await GcpOutputWindow.OutputLineAsync(string.Format(Resources.FlexPublishFailedMessage, project.Name)); await StatusbarHelper.SetTextAsync(Resources.PublishFailureStatusMessage); EventsReporterWrapper.ReportEvent(GaeDeployedEvent.Create(CommandStatus.Failure, deploymentDuration)); } } catch (Exception) { EventsReporterWrapper.ReportEvent(GaeDeployedEvent.Create(CommandStatus.Failure)); await GcpOutputWindow.OutputLineAsync(string.Format(Resources.FlexPublishFailedMessage, project.Name)); await StatusbarHelper.SetTextAsync(Resources.PublishFailureStatusMessage); } }
public override async void Publish() { if (!ValidateInput()) { Debug.WriteLine("Invalid input cancelled the operation."); return; } var project = _publishDialog.Project; try { var verifyGcloudTask = GCloudWrapperUtils.VerifyGCloudDependencies("beta"); _publishDialog.TrackTask(verifyGcloudTask); if (!await verifyGcloudTask) { Debug.WriteLine("Gcloud dependencies not met, aborting publish operation."); return; } ShellUtils.SaveAllFiles(); var context = new GCloudContext { CredentialsPath = CredentialsStore.Default.CurrentAccountPath, ProjectId = CredentialsStore.Default.CurrentProjectId, AppName = GoogleCloudExtensionPackage.ApplicationName, AppVersion = GoogleCloudExtensionPackage.ApplicationVersion, }; var options = new AppEngineFlexDeployment.DeploymentOptions { Version = Version, Promote = Promote, Context = context }; GcpOutputWindow.Activate(); GcpOutputWindow.Clear(); GcpOutputWindow.OutputLine(String.Format(Resources.GcePublishStepStartMessage, project.Name)); _publishDialog.FinishFlow(); TimeSpan deploymentDuration; AppEngineFlexDeploymentResult result; using (StatusbarHelper.Freeze()) using (StatusbarHelper.ShowDeployAnimation()) using (var progress = StatusbarHelper.ShowProgressBar(Resources.FlexPublishProgressMessage)) using (ShellUtils.SetShellUIBusy()) { var startDeploymentTime = DateTime.Now; result = await AppEngineFlexDeployment.PublishProjectAsync( project, options, progress, VsVersionUtils.ToolsPathProvider, GcpOutputWindow.OutputLine); deploymentDuration = DateTime.Now - startDeploymentTime; } if (result != null) { GcpOutputWindow.OutputLine(String.Format(Resources.FlexPublishSuccessMessage, project.Name)); StatusbarHelper.SetText(Resources.PublishSuccessStatusMessage); var url = result.GetDeploymentUrl(); GcpOutputWindow.OutputLine(String.Format(Resources.PublishUrlMessage, url)); if (OpenWebsite) { Process.Start(url); } EventsReporterWrapper.ReportEvent(GaeDeployedEvent.Create(CommandStatus.Success, deploymentDuration)); } else { GcpOutputWindow.OutputLine(String.Format(Resources.FlexPublishFailedMessage, project.Name)); StatusbarHelper.SetText(Resources.PublishFailureStatusMessage); EventsReporterWrapper.ReportEvent(GaeDeployedEvent.Create(CommandStatus.Failure)); } } catch (Exception ex) when(!ErrorHandlerUtils.IsCriticalException(ex)) { GcpOutputWindow.OutputLine(String.Format(Resources.FlexPublishFailedMessage, project.Name)); StatusbarHelper.SetText(Resources.PublishFailureStatusMessage); EventsReporterWrapper.ReportEvent(GaeDeployedEvent.Create(CommandStatus.Failure)); } }