diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 78eace9ba..59461d994 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -9,6 +9,7 @@ on: env: FORCE_COLOR: 1 PRINT_OFFLINE_OUTPUT: 1 + SERVERLESS_ACCESS_KEY: ${{ secrets.SERVERLESS_ACCESS_KEY }} jobs: build: diff --git a/package-lock.json b/package-lock.json index 8f732a9bc..26912d776 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "luxon": "^3.4.4", "node-schedule": "^2.1.1", "p-memoize": "^7.1.1", + "tree-kill": "^1.2.2", "tsx": "^4.16.2", "velocityjs": "^2.0.6", "ws": "^8.18.0" @@ -46,7 +47,7 @@ "mocha": "^10.6.0", "nyc": "^17.0.0", "prettier": "^3.3.2", - "serverless": "^4.1.12" + "serverless": "^4.1.18" }, "engines": { "node": ">=18.12.0" @@ -9674,9 +9675,9 @@ } }, "node_modules/serverless": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/serverless/-/serverless-4.1.12.tgz", - "integrity": "sha512-2PLNRei9a0kqK3caV6M8lgUAd0w36MpVvA3PFHhkbOdznSw7fk5QWdm8j6OcigWMS2EPKpxUuTESk8wsIGcxYw==", + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/serverless/-/serverless-4.1.18.tgz", + "integrity": "sha512-rrch3rl1gJlRJOIP4ltYHD0/kyIzRqy3bO0qgo0LNWJl9clUNYZBjuVuyx67g1RlMckxcX7pHyD+JWGV2Oa7Gg==", "dev": true, "dependencies": { "axios": "^1.6.0", @@ -10344,6 +10345,14 @@ "node": ">=18" } }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", diff --git a/package.json b/package.json index 4c12371f7..0c9fa5e2f 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ "luxon": "^3.4.4", "node-schedule": "^2.1.1", "p-memoize": "^7.1.1", + "tree-kill": "^1.2.2", "tsx": "^4.16.2", "velocityjs": "^2.0.6", "ws": "^8.18.0" @@ -114,7 +115,7 @@ "mocha": "^10.6.0", "nyc": "^17.0.0", "prettier": "^3.3.2", - "serverless": "^4.1.12" + "serverless": "^4.1.18" }, "peerDependencies": { "serverless": "^4.0.0" diff --git a/tests/_testHelpers/setupTeardown.js b/tests/_testHelpers/setupTeardown.js index bbe0994de..e97d77f94 100644 --- a/tests/_testHelpers/setupTeardown.js +++ b/tests/_testHelpers/setupTeardown.js @@ -1,20 +1,18 @@ import process, { env } from "node:process" -import { join } from "desm" -import { execaNode } from "execa" +import { execa } from "execa" +import treeKill from "tree-kill" +import { install, getBinary } from "serverless/binary.js" let serverlessProcess -const serverlessPath = join( - import.meta.url, - "../../node_modules/serverless/bin/serverless", -) - const shouldPrintOfflineOutput = env.PRINT_OFFLINE_OUTPUT export async function setup(options) { + await install() + const binary = getBinary() const { args = [], env: optionsEnv, servicePath, stdoutData } = options - serverlessProcess = execaNode(serverlessPath, ["offline", "start", ...args], { + serverlessProcess = execa(binary.binaryPath, ["offline", "start", ...args], { cwd: servicePath, env: optionsEnv, }) @@ -61,11 +59,14 @@ export async function setup(options) { } export async function teardown() { - serverlessProcess.cancel() - - try { - await serverlessProcess - } catch { - // - } + // Forcefully kill the serverless process as it spawns child processes + await new Promise((resolve) => { + treeKill(serverlessProcess.pid, "SIGKILL", (err) => { + if (err) { + console.error("Failed to kill process:", err) + } + resolve() + }) + }) + serverlessProcess = null } diff --git a/tests/end-to-end/defaultResponse/src/serverless.yml b/tests/end-to-end/defaultResponse/src/serverless.yml index 1a8c68373..e2de28a02 100644 --- a/tests/end-to-end/defaultResponse/src/serverless.yml +++ b/tests/end-to-end/defaultResponse/src/serverless.yml @@ -1,7 +1,5 @@ service: uncategorized-tests -frameworkVersion: "3" - plugins: - ../../../../src/index.js diff --git a/tests/manual/nodejs/serverless.yml b/tests/manual/nodejs/serverless.yml index de6176836..6d344d51e 100644 --- a/tests/manual/nodejs/serverless.yml +++ b/tests/manual/nodejs/serverless.yml @@ -1,7 +1,5 @@ service: basic -frameworkVersion: "4" - configValidationMode: error deprecationNotificationMode: error @@ -23,6 +21,7 @@ functions: method: post path: hello handler: src/handler.hello + name: hello-${git:branch} helloTypescript: events: