fun createWorkflow()

in jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/upload/CreateFunctionDialog.kt [130:190]


    fun createWorkflow(): StepExecutor {
        FileDocumentManager.getInstance().saveAllDocuments()

        val samOptions = SamOptions(
            buildInContainer = view.buildSettings.buildInContainerCheckbox.isSelected
        )

        val workflow = when (val packageType = view.configSettings.packageType()) {
            PackageType.ZIP -> {
                val runtime = view.configSettings.runtime.selected() ?: throw IllegalStateException("Runtime is missing when package type is Zip")
                val handler = view.configSettings.handlerPanel.handler.text

                val functionDetails = viewToFunctionDetails(runtime, handler)

                // TODO: Move this so we can share it with CreateFunctionDialog, but don't move it lower since passing PsiElement lower needs to go away since
                // it is causing customer complaints. We need to prompt for baseDir and try to infer it if we can but only as a default value...
                val element = findPsiElementsForHandler(project, runtime, handler).first()
                val module = ModuleUtil.findModuleForPsiElement(element) ?: throw IllegalStateException("Failed to locate module for $element")
                val lambdaBuilder = runtime.runtimeGroup?.let { LambdaBuilder.getInstanceOrNull(it) }
                    ?: throw IllegalStateException("LambdaBuilder for $runtime not found")

                val codeDetails = ZipBasedCode(
                    baseDir = lambdaBuilder.handlerBaseDirectory(module, element),
                    handler = handler,
                    runtime = runtime
                )

                createLambdaWorkflowForZip(
                    project = project,
                    functionDetails = functionDetails,
                    codeDetails = codeDetails,
                    buildDir = lambdaBuilder.getBuildDirectory(module),
                    buildEnvVars = lambdaBuilder.additionalBuildEnvironmentVariables(project, module, samOptions),
                    codeStorageLocation = view.codeStorage.codeLocation(),
                    samOptions = samOptions
                )
            }
            PackageType.IMAGE -> {
                val functionDetails = viewToFunctionDetails()
                val codeDetails = ImageBasedCode(
                    dockerfile = Paths.get(view.configSettings.dockerFile.text)
                )

                createLambdaWorkflowForImage(
                    project = project,
                    functionDetails = functionDetails,
                    codeDetails = codeDetails,
                    codeStorageLocation = view.codeStorage.codeLocation(),
                    samOptions = samOptions
                )
            }
            else -> throw UnsupportedOperationException("$packageType is not supported")
        }

        val emitter = BuildViewWorkflowEmitter.createEmitter(
            project,
            message("lambda.workflow.create_new.name"),
            view.name.text
        )
        return StepExecutor(project, workflow, emitter)
    }