public override async Task <RunResponse> Run(RunRequest request, ServerCallContext context)
        {
            if (this._callerContext.CancellationToken.IsCancellationRequested || // if caller of UpAsync has cancelled
                context.CancellationToken.IsCancellationRequested)    // if CLI has cancelled
            {
                return(new RunResponse());
            }

            var args       = request.Args;
            var engineAddr = args != null && args.Any() ? args[0] : "";

            var settings = new InlineDeploymentSettings(
                engineAddr,
                request.MonitorAddress,
                request.Config,
                request.Project,
                request.Stack,
                request.Parallel,
                request.DryRun,
                request.ConfigSecretKeys);

            using var cts = CancellationTokenSource.CreateLinkedTokenSource(
                      this._callerContext.CancellationToken,
                      context.CancellationToken);

            this._callerContext.ExceptionDispatchInfo = await Deployment.RunInlineAsync(
                settings,
                runner => this._callerContext.Program.InvokeAsync(runner, cts.Token))
                                                        .ConfigureAwait(false);

            return(new RunResponse());
        }
        public override async Task <RunResponse> Run(RunRequest request, ServerCallContext context)
        {
            if (this._callerContext.CancellationToken.IsCancellationRequested || // if caller of UpAsync has cancelled
                context.CancellationToken.IsCancellationRequested)    // if CLI has cancelled
            {
                return(new RunResponse());
            }

            var args       = request.Args;
            var engineAddr = args != null && args.Any() ? args[0] : "";

            var settings = new InlineDeploymentSettings(
                _callerContext.Logger,
                engineAddr,
                request.MonitorAddress,
                request.Config,
                request.ConfigSecretKeys,
                request.Project,
                request.Stack,
                request.Parallel,
                request.DryRun);

            using var cts = CancellationTokenSource.CreateLinkedTokenSource(
                      this._callerContext.CancellationToken,
                      context.CancellationToken);

            var result = await Deployment.RunInlineAsync(
                settings,
                // ReSharper disable once AccessToDisposedClosure
                runner => this._callerContext.Program.InvokeAsync(runner, cts.Token))
                         .ConfigureAwait(false);

            if (result.ExitCode != 0 || result.ExceptionDispatchInfo != null)
            {
                this._callerContext.ExceptionDispatchInfo = result.ExceptionDispatchInfo;
                return(new RunResponse()
                {
                    Bail = true,
                    Error = result.ExceptionDispatchInfo?.SourceException.Message ?? "One or more errors occurred.",
                });
            }

            return(new RunResponse());
        }