From 4707aa3813cbf6b218c4c9d2ca167042e079fbff Mon Sep 17 00:00:00 2001 From: Dmitry Kireev Date: Tue, 20 Sep 2022 18:48:04 +0100 Subject: [PATCH 1/3] Added serverless_version and Serverless v3/v2 launch differences, add support of serverless.ts --- internal/config/app.go | 1 + internal/manager/serverless/native.go | 57 +++++++++++++++++++---- internal/manager/serverless/serverless.go | 12 ++++- 3 files changed, 59 insertions(+), 11 deletions(-) diff --git a/internal/config/app.go b/internal/config/app.go index 067b64f7..3b11ed1f 100644 --- a/internal/config/app.go +++ b/internal/config/app.go @@ -20,6 +20,7 @@ type Serverless struct { Name string `mapstructure:",omitempty"` File string `mapstructure:",omitempty"` NodeVersion string `mapstructure:"node_version"` + ServerlessVersion string `mapstructure:"serverless_version"` Path string `mapstructure:",omitempty"` SLSNodeModuleCacheMount string `mapstructure:",omitempty"` CreateDomain bool `mapstructure:"create_domain"` diff --git a/internal/manager/serverless/native.go b/internal/manager/serverless/native.go index bfe1fc53..d28e6954 100644 --- a/internal/manager/serverless/native.go +++ b/internal/manager/serverless/native.go @@ -54,9 +54,26 @@ func (sls *Manager) runDeploy(w io.Writer) error { if len(nvmDir) == 0 { nvmDir = "$HOME/.nvm" } + var command string - command := fmt.Sprintf( - `source %s/nvm.sh && + // SLS v3 has breaking changes in syntax + if sls.App.ServerlessVersion == "3" { + command = fmt.Sprintf( + `source %s/nvm.sh && + nvm use %s && + npx serverless deploy \ + --config=%s \ + --param="service=%s" \ + --region=%s \ + --param="profile=%s" \ + --stage=%s \ + --verbose \`, + nvmDir, sls.App.NodeVersion, sls.App.File, + sls.App.Name, sls.App.AwsRegion, + sls.App.AwsProfile, sls.Project.Env) + } else { + command = fmt.Sprintf( + `source %s/nvm.sh && nvm use %s && npx serverless deploy \ --config %s \ @@ -65,9 +82,10 @@ func (sls *Manager) runDeploy(w io.Writer) error { --region %s \ --profile %s \ --stage %s`, - nvmDir, sls.App.NodeVersion, sls.App.File, - sls.App.Name, sls.App.AwsRegion, - sls.App.AwsProfile, sls.Project.Env) + nvmDir, sls.App.NodeVersion, sls.App.File, + sls.App.Name, sls.App.AwsRegion, + sls.App.AwsProfile, sls.Project.Env) + } cmd := exec.Command("bash", "-c", command) cmd.Stdout = w @@ -88,8 +106,26 @@ func (sls *Manager) runRemove(w io.Writer) error { nvmDir = "$HOME/.nvm" } - command := fmt.Sprintf( - `source %s/nvm.sh && + var command string + + // SLS v3 has breaking changes in syntax + if sls.App.ServerlessVersion == "3" { + command = fmt.Sprintf( + `source %s/nvm.sh && + nvm use %s && + npx serverless remove \ + --config=%s \ + --param="service=%s" \ + --region=%s \ + --param="profile=%s" \ + --stage=%s \ + --verbose \`, + nvmDir, sls.App.NodeVersion, sls.App.File, + sls.App.Name, sls.App.AwsRegion, + sls.App.AwsProfile, sls.Project.Env) + } else { + command = fmt.Sprintf( + `source %s/nvm.sh && nvm use %s && npx serverless remove \ --config %s \ @@ -98,9 +134,10 @@ func (sls *Manager) runRemove(w io.Writer) error { --region %s \ --profile %s \ --stage %s`, - nvmDir, sls.App.NodeVersion, sls.App.File, - sls.App.Name, sls.App.AwsRegion, - sls.App.AwsProfile, sls.Project.Env) + nvmDir, sls.App.NodeVersion, sls.App.File, + sls.App.Name, sls.App.AwsRegion, + sls.App.AwsProfile, sls.Project.Env) + } cmd := exec.Command("bash", "-c", command) cmd.Stdout = w diff --git a/internal/manager/serverless/serverless.go b/internal/manager/serverless/serverless.go index 1c58dad9..7aa166c7 100644 --- a/internal/manager/serverless/serverless.go +++ b/internal/manager/serverless/serverless.go @@ -32,8 +32,18 @@ func (sls *Manager) prepare() { } if len(sls.App.File) == 0 { - sls.App.File = "serverless.yml" + _, err := os.Stat(filepath.Join(sls.Project.RootDir, "serverless.ts")) + if os.IsNotExist(err) { + sls.App.File = "serverless.yml" + } else { + sls.App.File = "serverless.ts" + } + } + + if len(sls.App.ServerlessVersion) == 0 { + sls.App.ServerlessVersion = "2" } + if len(sls.App.SLSNodeModuleCacheMount) == 0 { sls.App.SLSNodeModuleCacheMount = fmt.Sprintf("%s-node-modules", sls.App.Name) } From 635923396f5070875d42d6e659214620662cb1f4 Mon Sep 17 00:00:00 2001 From: Dmitry Kireev Date: Tue, 20 Sep 2022 18:52:53 +0100 Subject: [PATCH 2/3] Add Schema --- internal/schema/ize-spec.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/internal/schema/ize-spec.json b/internal/schema/ize-spec.json index c84b426f..b17ca572 100644 --- a/internal/schema/ize-spec.json +++ b/internal/schema/ize-spec.json @@ -251,6 +251,10 @@ "type": "string", "description": "(optional) Node version that will be used by nvm can be specified here that. Default is v14." }, + "serverless_version": { + "type": "string", + "description": "(optional) Serverless framework version which is used. Defines cli interface. Default is 2." + }, "create_domain" : { "type": "boolean", "description": "(optional) Create domain for the serverless domain manager during the deployment." @@ -375,6 +379,10 @@ "type": "string", "description": "(optional) Node version that will be used by nvm can be specified here that. Default is v14." }, + "serverless_version": { + "type": "string", + "description": "(optional) Serverless framework version which is used. Defines cli interface. Default is 2." + }, "create_domain" : { "type": "boolean", "description": "(optional) Create domain for the serverless domain manager during the deployment." From 54e3433dafb6d3d5f9a2dde4131cc4a4d4ded9d8 Mon Sep 17 00:00:00 2001 From: Dmitry Kireev Date: Tue, 20 Sep 2022 18:58:51 +0100 Subject: [PATCH 3/3] Look for serverless.ts in the app dir. --- internal/manager/serverless/serverless.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/manager/serverless/serverless.go b/internal/manager/serverless/serverless.go index 7aa166c7..e68235d3 100644 --- a/internal/manager/serverless/serverless.go +++ b/internal/manager/serverless/serverless.go @@ -32,7 +32,7 @@ func (sls *Manager) prepare() { } if len(sls.App.File) == 0 { - _, err := os.Stat(filepath.Join(sls.Project.RootDir, "serverless.ts")) + _, err := os.Stat(filepath.Join(sls.App.Path, "serverless.ts")) if os.IsNotExist(err) { sls.App.File = "serverless.yml" } else {