From 249fa773c1189c734c41b22dc7c77defea9f666c Mon Sep 17 00:00:00 2001 From: PaC#man Date: Thu, 1 Aug 2024 15:29:05 -0500 Subject: [PATCH 1/6] Fix sh bug with package.py sh commands after :zip were not being executed --- package.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.py b/package.py index ded4056e..342fca46 100644 --- a/package.py +++ b/package.py @@ -779,6 +779,9 @@ def commands_step(path, commands): ) else: batch.append(c) + if batch: + step("sh", path, "\n".join(batch)) + batch.clear() for claim in claims: if isinstance(claim, str): @@ -1526,6 +1529,7 @@ def prepare_command(args): Outputs a filename and a command to run if the archive needs to be built. """ + log = logging.getLogger("prepare") # Load the query. From 4415733264e6439c64f9c33e877f2f29425ef639 Mon Sep 17 00:00:00 2001 From: PaC#man Date: Thu, 1 Aug 2024 15:29:36 -0500 Subject: [PATCH 2/6] Add example of using npm ci --- examples/build-package/main.tf | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/examples/build-package/main.tf b/examples/build-package/main.tf index 4c4ecb71..571b2c74 100644 --- a/examples/build-package/main.tf +++ b/examples/build-package/main.tf @@ -244,6 +244,29 @@ module "package_with_commands_and_patterns" { ] } +# Some use cases might require the production packages are deployed while maintaining local node_modules folder +# This example saves the node_modules folder by moving it to an ignored directory +# After the zip file is created with production node_modules, the dev node_modules folder is restored +module "package_with_commands_and_patterns" { + source = "../../" + + runtime = "nodejs18.x" + source_path = [ + { + path = "./app" + commands = [ + "mv ./node_modules ./node_modules_temp", + "npm ci --production", + ":zip", + "rm -rf node_modules", + "mv ./node_modules_temp ./node_modules", + ] + patterns = [ + "!node_modules_temp/.*" + ] + } + ] +} # Create zip-archive with various sources and patterns. # Note, that it is possible to write comments in patterns. module "package_with_patterns" { From 8377577855798a1c983f5f0929cd690c6e5a14d5 Mon Sep 17 00:00:00 2001 From: Austin Mleziva Date: Thu, 1 Aug 2024 16:12:32 -0500 Subject: [PATCH 3/6] update example --- examples/build-package/main.tf | 10 +- tests/fixtures/node-app/index.js | 1 + tests/fixtures/node-app/package-lock.json | 115 ++++++++++++++++++++++ tests/fixtures/node-app/package.json | 16 +++ 4 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 tests/fixtures/node-app/index.js create mode 100644 tests/fixtures/node-app/package-lock.json create mode 100644 tests/fixtures/node-app/package.json diff --git a/examples/build-package/main.tf b/examples/build-package/main.tf index 571b2c74..1b16f1f0 100644 --- a/examples/build-package/main.tf +++ b/examples/build-package/main.tf @@ -247,19 +247,21 @@ module "package_with_commands_and_patterns" { # Some use cases might require the production packages are deployed while maintaining local node_modules folder # This example saves the node_modules folder by moving it to an ignored directory # After the zip file is created with production node_modules, the dev node_modules folder is restored -module "package_with_commands_and_patterns" { +module "npm_package_with_commands_and_patterns" { source = "../../" + create_function = false + runtime = "nodejs18.x" source_path = [ { - path = "./app" + path = "${path.module}/../fixtures/node-app" commands = [ - "mv ./node_modules ./node_modules_temp", + "[ ! -d node_modules ] || mv node_modules node_modules_temp", "npm ci --production", ":zip", "rm -rf node_modules", - "mv ./node_modules_temp ./node_modules", + "[ ! -d node_modules_temp ] || mv node_modules_temp node_modules", ] patterns = [ "!node_modules_temp/.*" diff --git a/tests/fixtures/node-app/index.js b/tests/fixtures/node-app/index.js new file mode 100644 index 00000000..75fa785d --- /dev/null +++ b/tests/fixtures/node-app/index.js @@ -0,0 +1 @@ +// test \ No newline at end of file diff --git a/tests/fixtures/node-app/package-lock.json b/tests/fixtures/node-app/package-lock.json new file mode 100644 index 00000000..2afc4fbe --- /dev/null +++ b/tests/fixtures/node-app/package-lock.json @@ -0,0 +1,115 @@ +{ + "name": "app", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "app", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "axios": "^1.7.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/axios": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", + "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + } + } +} diff --git a/tests/fixtures/node-app/package.json b/tests/fixtures/node-app/package.json new file mode 100644 index 00000000..1bd4d69d --- /dev/null +++ b/tests/fixtures/node-app/package.json @@ -0,0 +1,16 @@ +{ + "name": "app", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + }, + "devDependencies": { + "axios": "^1.7.3" + } +} From 0af51df2f43c2fbbeee2fdc23424ad40f6dd1cca Mon Sep 17 00:00:00 2001 From: Austin Mleziva Date: Thu, 1 Aug 2024 16:25:41 -0500 Subject: [PATCH 4/6] fix formatting --- package.py | 1 - tests/fixtures/node-app/index.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/package.py b/package.py index 342fca46..620be347 100644 --- a/package.py +++ b/package.py @@ -1529,7 +1529,6 @@ def prepare_command(args): Outputs a filename and a command to run if the archive needs to be built. """ - log = logging.getLogger("prepare") # Load the query. diff --git a/tests/fixtures/node-app/index.js b/tests/fixtures/node-app/index.js index 75fa785d..09d4352e 100644 --- a/tests/fixtures/node-app/index.js +++ b/tests/fixtures/node-app/index.js @@ -1 +1 @@ -// test \ No newline at end of file +// test From d8c90c5db2a95425a247ae6505c689c44acb4e88 Mon Sep 17 00:00:00 2001 From: Austin Mleziva Date: Thu, 1 Aug 2024 16:43:14 -0500 Subject: [PATCH 5/6] update docs --- examples/build-package/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/build-package/README.md b/examples/build-package/README.md index 671fa45c..e77c0c59 100644 --- a/examples/build-package/README.md +++ b/examples/build-package/README.md @@ -37,6 +37,7 @@ Note that this example may create resources which cost money. Run `terraform des | [lambda\_layer](#module\_lambda\_layer) | ../../ | n/a | | [lambda\_layer\_pip\_requirements](#module\_lambda\_layer\_pip\_requirements) | ../.. | n/a | | [lambda\_layer\_poetry](#module\_lambda\_layer\_poetry) | ../../ | n/a | +| [npm\_package\_with\_commands\_and\_patterns](#module\_npm\_package\_with\_commands\_and\_patterns) | ../../ | n/a | | [package\_dir](#module\_package\_dir) | ../../ | n/a | | [package\_dir\_pip\_dir](#module\_package\_dir\_pip\_dir) | ../../ | n/a | | [package\_dir\_poetry](#module\_package\_dir\_poetry) | ../../ | n/a | From affbfc78ae0e8853324f1edeaae0ca134e869d30 Mon Sep 17 00:00:00 2001 From: Austin Mleziva Date: Tue, 20 Aug 2024 07:26:50 -0500 Subject: [PATCH 6/6] remove package-lock.json --- examples/build-package/main.tf | 2 +- tests/fixtures/node-app/package-lock.json | 115 ---------------------- 2 files changed, 1 insertion(+), 116 deletions(-) delete mode 100644 tests/fixtures/node-app/package-lock.json diff --git a/examples/build-package/main.tf b/examples/build-package/main.tf index 1b16f1f0..7119a5d5 100644 --- a/examples/build-package/main.tf +++ b/examples/build-package/main.tf @@ -258,7 +258,7 @@ module "npm_package_with_commands_and_patterns" { path = "${path.module}/../fixtures/node-app" commands = [ "[ ! -d node_modules ] || mv node_modules node_modules_temp", - "npm ci --production", + "npm install --production", ":zip", "rm -rf node_modules", "[ ! -d node_modules_temp ] || mv node_modules_temp node_modules", diff --git a/tests/fixtures/node-app/package-lock.json b/tests/fixtures/node-app/package-lock.json deleted file mode 100644 index 2afc4fbe..00000000 --- a/tests/fixtures/node-app/package-lock.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "app", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "axios": "^1.7.3" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/axios": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", - "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - } - } -}