fun createWorkflow()

in jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/upload/UpdateFunctionCodeDialog.kt [111:165]


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

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

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

                // 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 = initialSettings.runtime.runtimeGroup?.let { LambdaBuilder.getInstanceOrNull(it) }
                    ?: throw IllegalStateException("LambdaBuilder for ${initialSettings.runtime} not found")

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

                updateLambdaCodeWorkflowForZip(
                    project = project,
                    functionName = initialSettings.name,
                    codeDetails = codeDetails,
                    buildDir = lambdaBuilder.getBuildDirectory(module),
                    buildEnvVars = lambdaBuilder.additionalBuildEnvironmentVariables(project, module, samOptions),
                    codeStorageLocation = view.codeStorage.codeLocation(),
                    samOptions = samOptions,
                    updatedHandler = handler.takeIf { it != initialSettings.handler }
                )
            }
            PackageType.IMAGE -> {
                val codeDetails = ImageBasedCode(
                    dockerfile = Paths.get(view.dockerFile.text)
                )

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

        val emitter = BuildViewWorkflowEmitter.createEmitter(project, message("lambda.workflow.update_code.name"), initialSettings.name)
        return StepExecutor(project, workflow, emitter)
    }