private Command BuildDeploymentProjectCommand()

in src/AWS.Deploy.CLI/Commands/CommandFactory.cs [398:479]


        private Command BuildDeploymentProjectCommand()
        {
            var deploymentProjectCommand = new Command("deployment-project",
                "Save the deployment project inside a user provided directory path.");

            var generateDeploymentProjectCommand = new Command("generate",
                "Save the deployment project inside a user provided directory path without proceeding with a deployment");

            lock (s_child_command_lock)
            {
                generateDeploymentProjectCommand.Add(_optionOutputDirectory);
                generateDeploymentProjectCommand.Add(_optionDiagnosticLogging);
                generateDeploymentProjectCommand.Add(_optionProjectPath);
                generateDeploymentProjectCommand.Add(_optionProjectDisplayName);
            }

            generateDeploymentProjectCommand.Handler = CommandHandler.Create(async (GenerateDeploymentProjectCommandHandlerInput input) =>
            {
                try
                {
                    _toolInteractiveService.Diagnostics = input.Diagnostics;
                    var projectDefinition = await _projectParserUtility.Parse(input.ProjectPath ?? "");

                    var saveDirectory = input.Output;
                    var projectDisplayName = input.ProjectDisplayName;

                    OrchestratorSession session = new OrchestratorSession(projectDefinition);

                    var targetApplicationFullPath = new DirectoryInfo(projectDefinition.ProjectPath).FullName;

                    if (!string.IsNullOrEmpty(saveDirectory))
                    {
                        var targetApplicationDirectoryFullPath = new DirectoryInfo(targetApplicationFullPath).Parent!.FullName;
                        saveDirectory = Path.GetFullPath(saveDirectory, targetApplicationDirectoryFullPath);
                    }

                    var generateDeploymentProject = new GenerateDeploymentProjectCommand(
                        _toolInteractiveService,
                        _consoleUtilities,
                        _cdkProjectHandler,
                        _commandLineWrapper,
                        _directoryManager,
                        _fileManager,
                        session,
                        _deploymentManifestEngine,
                        targetApplicationFullPath);

                    await generateDeploymentProject.ExecuteAsync(saveDirectory, projectDisplayName);

                    return CommandReturnCodes.SUCCESS;
                }
                catch (Exception e) when (e.IsAWSDeploymentExpectedException())
                {
                    if (input.Diagnostics)
                        _toolInteractiveService.WriteErrorLine(e.PrettyPrint());
                    else
                    {
                        _toolInteractiveService.WriteErrorLine(string.Empty);
                        _toolInteractiveService.WriteErrorLine(e.Message);
                    }

                    // bail out with an non-zero return code.
                    return CommandReturnCodes.USER_ERROR;
                }
                catch (Exception e)
                {
                    // This is a bug
                    _toolInteractiveService.WriteErrorLine(
                        "Unhandled exception.  This is a bug.  Please copy the stack trace below and file a bug at https://github.com/aws/aws-dotnet-deploy. " +
                        e.PrettyPrint());

                    return CommandReturnCodes.UNHANDLED_EXCEPTION;
                }
            });

            lock (s_child_command_lock)
            {
                deploymentProjectCommand.Add(generateDeploymentProjectCommand);
            }

            return deploymentProjectCommand;
        }