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)
}