Skip to content

Commit 323ebee

Browse files
authored
Update Sync Serverless Application (#3548)
* new changes * no watch flag added * removed sams ync from experiment * added changelog * feedback changes * updated message * detekt * detekt changes * removed code only paramter from tests * fixed tests * extra space added
1 parent 4c768a3 commit 323ebee

File tree

11 files changed

+43
-167
lines changed

11 files changed

+43
-167
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "breaking",
3+
"description" : "Required SAM CLI upgrade to v1.78.0 to for using Sync Serverless Application option."
4+
}

jetbrains-core/resources/META-INF/plugin.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -390,8 +390,6 @@ with what features/services are supported.
390390
<!-- Experiments -->
391391
<experiment implementation="software.aws.toolkits.jetbrains.services.ecs.EcsExecExperiment"/>
392392
<experiment implementation="software.aws.toolkits.jetbrains.services.dynamic.JsonResourceModificationExperiment"/>
393-
<experiment implementation="software.aws.toolkits.jetbrains.services.lambda.sam.sync.SyncServerlessApplicationExperiment"/>
394-
<experiment implementation="software.aws.toolkits.jetbrains.services.lambda.sam.sync.SyncServerlessApplicationCodeExperiment"/>
395393

396394
<tool implementation="software.aws.toolkits.jetbrains.services.ssm.SsmPlugin"/>
397395

@@ -615,7 +613,7 @@ with what features/services are supported.
615613
<action class="software.aws.toolkits.jetbrains.core.credentials.ConfigureAwsConnectionAction" id="aws.settings.selector" icon="AwsIcons.Logos.AWS"/>
616614
<action class="software.aws.toolkits.jetbrains.core.credentials.CreateOrUpdateCredentialProfilesAction" id="aws.settings.upsertCredentials" icon="AwsIcons.Logos.AWS"/>
617615
<action class="software.aws.toolkits.jetbrains.services.lambda.actions.DeployServerlessApplicationAction" id="serverless.application.deploy" />
618-
<action class="software.aws.toolkits.jetbrains.services.lambda.actions.SyncServerlessApplicationCodeAction" id="serverless.sync.code"/>
616+
619617
<action class="software.aws.toolkits.jetbrains.services.lambda.actions.SyncServerlessApplicationAction" id="serverless.sync.infra"/>
620618
<action class="software.aws.toolkits.jetbrains.services.lambda.actions.SyncServerlessAppAction" id="serverless.sync.app"/>
621619
<action class="software.aws.toolkits.jetbrains.settings.ShowSettingsAction" id="aws.settings.show" icon="AllIcons.General.Settings"/>
@@ -631,11 +629,8 @@ with what features/services are supported.
631629
<add-to-group group-id="EditorPopupMenu" anchor="last"/>
632630
<add-to-group group-id="EditorTabPopupMenu" anchor="last"/>
633631

634-
<separator/>
635-
<reference id="serverless.application.deploy"/>
636632
<separator/>
637633
<reference id="serverless.sync.infra"/>
638-
<reference id="serverless.sync.code"/>
639634
<separator/>
640635
</group>
641636

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/actions/DeployServerlessApplicationAction.kt

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,22 @@ import icons.AwsIcons
1616
import kotlinx.coroutines.runBlocking
1717
import kotlinx.coroutines.withContext
1818
import software.amazon.awssdk.services.cloudformation.CloudFormationClient
19-
import software.aws.toolkits.jetbrains.ToolkitPlaces
2019
import software.aws.toolkits.jetbrains.core.awsClient
2120
import software.aws.toolkits.jetbrains.core.coroutines.getCoroutineUiContext
2221
import software.aws.toolkits.jetbrains.core.credentials.AwsConnectionManager
2322
import software.aws.toolkits.jetbrains.core.executables.ExecutableInstance
2423
import software.aws.toolkits.jetbrains.core.executables.ExecutableManager
2524
import software.aws.toolkits.jetbrains.core.executables.getExecutable
26-
import software.aws.toolkits.jetbrains.core.experiments.isEnabled
2725
import software.aws.toolkits.jetbrains.core.explorer.refreshAwsTree
2826
import software.aws.toolkits.jetbrains.services.cloudformation.describeStack
2927
import software.aws.toolkits.jetbrains.services.cloudformation.executeChangeSetAndWait
3028
import software.aws.toolkits.jetbrains.services.cloudformation.stack.StackWindowManager
31-
import software.aws.toolkits.jetbrains.services.lambda.LambdaHandlerResolver
3229
import software.aws.toolkits.jetbrains.services.lambda.deploy.DeployServerlessApplicationDialog
3330
import software.aws.toolkits.jetbrains.services.lambda.deploy.DeployServerlessApplicationSettings
3431
import software.aws.toolkits.jetbrains.services.lambda.sam.SamCommon
3532
import software.aws.toolkits.jetbrains.services.lambda.sam.SamExecutable
3633
import software.aws.toolkits.jetbrains.services.lambda.sam.SamTemplateFileUtils
37-
import software.aws.toolkits.jetbrains.services.lambda.sam.SamTemplateFileUtils.getSamTemplateFile
3834
import software.aws.toolkits.jetbrains.services.lambda.sam.SamTemplateFileUtils.validateTemplateFile
39-
import software.aws.toolkits.jetbrains.services.lambda.sam.sync.SyncServerlessApplicationExperiment
4035
import software.aws.toolkits.jetbrains.services.lambda.steps.DeployLambda
4136
import software.aws.toolkits.jetbrains.services.lambda.steps.createDeployWorkflow
4237
import software.aws.toolkits.jetbrains.services.lambda.upload.UploadFunctionContinueDialog
@@ -187,18 +182,7 @@ class DeployServerlessApplicationAction : AnAction(
187182
override fun update(e: AnActionEvent) {
188183
super.update(e)
189184

190-
e.presentation.isVisible = if (!SyncServerlessApplicationExperiment.isEnabled()) {
191-
// If there are no supported runtime groups, it will never succeed so don't show it
192-
if (LambdaHandlerResolver.supportedRuntimeGroups().isEmpty()) {
193-
false
194-
} else {
195-
if (e.place == ToolkitPlaces.EXPLORER_TOOL_WINDOW) {
196-
true
197-
} else {
198-
getSamTemplateFile(e) != null
199-
}
200-
}
201-
} else false
185+
e.presentation.isVisible = false
202186
}
203187

204188
private fun saveSettings(project: Project, templateFile: VirtualFile, settings: DeployServerlessApplicationSettings) {

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/actions/SyncServerlessAppAction.kt

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import com.intellij.util.text.SemVer
2323
import icons.AwsIcons
2424
import software.amazon.awssdk.services.cloudformation.model.StackSummary
2525
import software.amazon.awssdk.services.lambda.model.PackageType
26+
import software.aws.toolkits.core.utils.getLogger
27+
import software.aws.toolkits.core.utils.warn
2628
import software.aws.toolkits.jetbrains.core.credentials.AwsConnectionManager
2729
import software.aws.toolkits.jetbrains.core.credentials.getConnectionSettingsOrThrow
2830
import software.aws.toolkits.jetbrains.core.executables.ExecutableInstance
@@ -52,7 +54,7 @@ import software.aws.toolkits.telemetry.Result
5254
import software.aws.toolkits.telemetry.SamTelemetry
5355
import software.aws.toolkits.telemetry.SyncedResources
5456

55-
class SyncServerlessAppAction(private val codeOnly: Boolean = false) : AnAction(
57+
class SyncServerlessAppAction : AnAction(
5658
message("serverless.application.sync"),
5759
null,
5860
AwsIcons.Resources.SERVERLESS_APP
@@ -75,8 +77,8 @@ class SyncServerlessAppAction(private val codeOnly: Boolean = false) : AnAction(
7577
}
7678

7779
val execVersion = SemVer.parseFromText(samExecutable.version) ?: error("SAM CLI version could not detected")
78-
val minVersion = SemVer("1.53.0", 1, 53, 0)
79-
val minVersionForUseContainer = SemVer("1.57.0", 1, 57, 0)
80+
val minVersion = SemVer("1.78.0", 1, 78, 0)
81+
8082
if (!execVersion.isGreaterOrEqualThan(minVersion)) {
8183
notifyError(
8284
message("sam.cli.version.warning"),
@@ -99,7 +101,7 @@ class SyncServerlessAppAction(private val codeOnly: Boolean = false) : AnAction(
99101
val templateFunctions = SamTemplateUtils.findFunctionsFromTemplate(project, templateFile)
100102
val hasImageFunctions: Boolean = templateFunctions.any { (it as? SamFunction)?.packageType() == PackageType.IMAGE }
101103
val lambdaType = if (hasImageFunctions) LambdaPackageType.Image else LambdaPackageType.Zip
102-
val syncedResourceType = if (codeOnly) SyncedResources.CodeOnly else SyncedResources.AllResources
104+
val syncedResourceType = SyncedResources.AllResources
103105

104106
ProgressManager.getInstance().run(
105107
object : Task.WithResult<PreSyncRequirements, Exception>(
@@ -108,15 +110,12 @@ class SyncServerlessAppAction(private val codeOnly: Boolean = false) : AnAction(
108110
false
109111
) {
110112
override fun compute(indicator: ProgressIndicator): PreSyncRequirements {
111-
val dockerDoesntExist = if (execVersion.isGreaterOrEqualThan(minVersionForUseContainer)) {
112-
try {
113-
val processOutput = ExecUtil.execAndGetOutput(GeneralCommandLine("docker", "ps"))
114-
processOutput.exitCode != 0
115-
} catch (e: Exception) {
116-
true
117-
}
118-
} else {
119-
null
113+
val dockerDoesntExist = try {
114+
val processOutput = ExecUtil.execAndGetOutput(GeneralCommandLine("docker", "ps"))
115+
processOutput.exitCode != 0
116+
} catch (e: Exception) {
117+
LOG.warn(e) { "Docker could not be found" }
118+
true
120119
}
121120

122121
val activeStacks = project.getResourceNow(CloudFormationResources.ACTIVE_STACKS, forceFetch = true, useStale = false)
@@ -158,19 +157,6 @@ class SyncServerlessAppAction(private val codeOnly: Boolean = false) : AnAction(
158157
saveSettings(project, templateFile, settings)
159158

160159
if (settings.useContainer) {
161-
if (!execVersion.isGreaterOrEqualThan(minVersionForUseContainer)) {
162-
notifyError(
163-
message("sam.cli.version.warning"),
164-
message(
165-
"sam.cli.version.upgrade.required",
166-
execVersion.parsedVersion,
167-
minVersionForUseContainer.parsedVersion
168-
),
169-
project = project
170-
)
171-
return@runInEdt
172-
}
173-
174160
when (result.dockerDoesntExist) {
175161
null -> return@runInEdt
176162
true -> {
@@ -203,7 +189,7 @@ class SyncServerlessAppAction(private val codeOnly: Boolean = false) : AnAction(
203189
val environment = ExecutionEnvironmentBuilder.create(
204190
project,
205191
DefaultRunExecutor.getRunExecutorInstance(),
206-
SyncApplicationRunProfile(project, settings, project.getConnectionSettingsOrThrow(), templatePath, codeOnly)
192+
SyncApplicationRunProfile(project, settings, project.getConnectionSettingsOrThrow(), templatePath)
207193
).build()
208194

209195
environment.runner.execute(environment)
@@ -240,6 +226,10 @@ class SyncServerlessAppAction(private val codeOnly: Boolean = false) : AnAction(
240226
}
241227
}
242228
}
229+
230+
companion object {
231+
private val LOG = getLogger<SyncServerlessAppAction>()
232+
}
243233
}
244234

245235
data class PreSyncRequirements(

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/actions/SyncServerlessApplicationAction.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ package software.aws.toolkits.jetbrains.services.lambda.actions
66
import com.intellij.openapi.actionSystem.AnAction
77
import com.intellij.openapi.actionSystem.AnActionEvent
88
import icons.AwsIcons
9-
import software.aws.toolkits.jetbrains.core.experiments.isEnabled
109
import software.aws.toolkits.jetbrains.services.lambda.LambdaHandlerResolver
1110
import software.aws.toolkits.jetbrains.services.lambda.sam.SamTemplateFileUtils.getSamTemplateFile
12-
import software.aws.toolkits.jetbrains.services.lambda.sam.sync.SyncServerlessApplicationExperiment
1311
import software.aws.toolkits.resources.message
1412

1513
class SyncServerlessApplicationAction : AnAction(message("serverless.application.sync"), null, AwsIcons.Resources.SERVERLESS_APP) {
@@ -20,7 +18,6 @@ class SyncServerlessApplicationAction : AnAction(message("serverless.application
2018
override fun update(e: AnActionEvent) {
2119
super.update(e)
2220
e.presentation.isEnabledAndVisible = getSamTemplateFile(e) != null &&
23-
SyncServerlessApplicationExperiment.isEnabled() &&
2421
LambdaHandlerResolver.supportedRuntimeGroups().isNotEmpty()
2522
}
2623
}

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/actions/SyncServerlessApplicationCodeAction.kt

Lines changed: 0 additions & 29 deletions
This file was deleted.

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/sam/SamExecutable.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,7 @@ fun GeneralCommandLine.samInitCommand(
264264
fun GeneralCommandLine.samSyncCommand(
265265
environmentVariables: Map<String, String>,
266266
templatePath: Path,
267-
settings: SyncServerlessApplicationSettings,
268-
syncOnlyCode: Boolean
267+
settings: SyncServerlessApplicationSettings
269268
) = this.apply {
270269
withEnvironment(environmentVariables)
271270
withWorkDirectory(templatePath.toAbsolutePath().parent.toString())
@@ -305,7 +304,6 @@ fun GeneralCommandLine.samSyncCommand(
305304
addParameter("--use-container")
306305
}
307306
addParameter("--no-dependency-layer")
308-
if (syncOnlyCode) {
309-
addParameter("--code")
310-
}
307+
308+
addParameter("--no-watch")
311309
}

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/sam/sync/SyncApplicationRunProfile.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ class SyncApplicationRunProfile(
3535
private val project: Project,
3636
private val settings: SyncServerlessApplicationSettings,
3737
private val connection: ConnectionSettings,
38-
private val templatePath: Path,
39-
private val syncOnlyCode: Boolean
38+
private val templatePath: Path
4039
) : RunProfile {
4140
override fun getState(executor: Executor, environment: ExecutionEnvironment): RunProfileState = SyncApplicationRunProfileState(environment)
4241

@@ -55,8 +54,7 @@ class SyncApplicationRunProfile(
5554
private fun getSamSyncCommand(): GeneralCommandLine = getSamCli().samSyncCommand(
5655
connection.toEnvironmentVariables(),
5756
templatePath,
58-
settings,
59-
syncOnlyCode
57+
settings
6058
)
6159

6260
override fun execute(executor: Executor, runner: ProgramRunner<*>) =

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/sam/sync/SyncServerlessApplicationExperiment.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)