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