Skip to content

Commit 69cd0ca

Browse files
Merge branch 'develop'
2 parents 7d004a7 + b2609a3 commit 69cd0ca

File tree

8 files changed

+85
-45
lines changed

8 files changed

+85
-45
lines changed

.github/workflows/build.yml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ concurrency:
1818
jobs:
1919
run-workflow:
2020
name: PR Workflow
21-
if: always()
21+
# If any dependent jobs fails, this WF skips which won't block merging PRs
22+
# calling always() is required for this WF to run all the time
23+
if: github.repository_owner == 'aws' && always()
2224
runs-on: ubuntu-latest
2325
needs:
2426
- unit-functional
@@ -98,9 +100,9 @@ jobs:
98100
- uses: actions/setup-python@v4
99101
with:
100102
python-version: ${{ matrix.python }}
101-
- uses: actions/setup-node@v3
103+
- uses: actions/setup-node@v4
102104
with:
103-
node-version: 18
105+
node-version: 20
104106
- if: ${{ matrix.npm }}
105107
run: npm install -g npm@${{ matrix.npm }}
106108
- run: npm --version
@@ -131,9 +133,9 @@ jobs:
131133
- uses: actions/setup-python@v4
132134
with:
133135
python-version: ${{ matrix.python }}
134-
- uses: actions/setup-node@v3
136+
- uses: actions/setup-node@v4
135137
with:
136-
node-version: 18
138+
node-version: 20
137139
- if: ${{ matrix.npm }}
138140
run: npm install -g npm@${{ matrix.npm }}
139141
- run: npm --version

aws_lambda_builders/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44

55
# Changing version will trigger a new release!
66
# Please make the version change as the last step of your development.
7-
__version__ = "1.40.0"
7+
8+
__version__ = "1.41.0"
89
RPC_PROTOCOL_VERSION = "0.3"

aws_lambda_builders/validator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"nodejs14.x": [ARM64, X86_64],
1515
"nodejs16.x": [ARM64, X86_64],
1616
"nodejs18.x": [ARM64, X86_64],
17+
"nodejs20.x": [ARM64, X86_64],
1718
"python3.7": [X86_64],
1819
"python3.8": [ARM64, X86_64],
1920
"python3.9": [ARM64, X86_64],

aws_lambda_builders/workflows/ruby_bundler/bundler.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"""
44

55
import logging
6+
from os import linesep
67

78
LOG = logging.getLogger(__name__)
89

@@ -54,7 +55,7 @@ def run(self, args, cwd=None):
5455

5556
p = self.osutils.popen(invoke_bundler, stdout=self.osutils.pipe, stderr=self.osutils.pipe, cwd=cwd)
5657

57-
out, _ = p.communicate()
58+
out, err = p.communicate()
5859

5960
if p.returncode != 0:
6061
if p.returncode == GEMFILE_NOT_FOUND:
@@ -65,7 +66,19 @@ def run(self, args, cwd=None):
6566
if self.osutils.directory_exists(check_dir):
6667
self.osutils.remove_directory(check_dir)
6768
else:
68-
# Bundler has relevant information in stdout, not stderr.
69-
raise BundlerExecutionError(message=out.decode("utf8").strip())
69+
# Bundler can contain information in both stdout and stderr so we check and log both
70+
err_str = err.decode("utf8").strip()
71+
out_str = out.decode("utf8").strip()
72+
if out_str and err_str:
73+
message_out = f"{out_str}{linesep}{err_str}"
74+
LOG.debug(f"Bundler output: {out_str}")
75+
LOG.debug(f"Bundler error: {err_str}")
76+
elif out_str:
77+
message_out = out_str
78+
LOG.debug(f"Bundler output: {out_str}")
79+
else:
80+
message_out = err_str
81+
LOG.debug(f"Bundler error: {err_str}")
82+
raise BundlerExecutionError(message=message_out)
7083

7184
return out.decode("utf8").strip()

requirements/dev.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ pyelftools~=0.30 # Used to verify the generated Go binary architecture in integr
1313

1414
# formatter
1515
black==22.6.0; python_version < "3.8"
16-
black==23.9.1; python_version >= "3.8"
17-
ruff==0.0.292
16+
black==23.10.1; python_version >= "3.8"
17+
ruff==0.1.4

tests/integration/workflows/nodejs_npm/test_nodejs_npm.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def tearDown(self):
4141
shutil.rmtree(self.dependencies_dir)
4242
shutil.rmtree(self.temp_dir)
4343

44-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
44+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
4545
def test_builds_project_without_dependencies(self, runtime):
4646
source_dir = os.path.join(self.TEST_DATA_FOLDER, "no-deps")
4747

@@ -57,7 +57,7 @@ def test_builds_project_without_dependencies(self, runtime):
5757
output_files = set(os.listdir(self.artifacts_dir))
5858
self.assertEqual(expected_files, output_files)
5959

60-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
60+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
6161
def test_builds_project_without_manifest(self, runtime):
6262
source_dir = os.path.join(self.TEST_DATA_FOLDER, "no-manifest")
6363

@@ -75,7 +75,7 @@ def test_builds_project_without_manifest(self, runtime):
7575
mock_warning.assert_called_once_with("package.json file not found. Continuing the build without dependencies.")
7676
self.assertEqual(expected_files, output_files)
7777

78-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
78+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
7979
def test_builds_project_and_excludes_hidden_aws_sam(self, runtime):
8080
source_dir = os.path.join(self.TEST_DATA_FOLDER, "excluded-files")
8181

@@ -91,7 +91,7 @@ def test_builds_project_and_excludes_hidden_aws_sam(self, runtime):
9191
output_files = set(os.listdir(self.artifacts_dir))
9292
self.assertEqual(expected_files, output_files)
9393

94-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
94+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
9595
def test_builds_project_with_remote_dependencies(self, runtime):
9696
source_dir = os.path.join(self.TEST_DATA_FOLDER, "npm-deps")
9797

@@ -111,7 +111,7 @@ def test_builds_project_with_remote_dependencies(self, runtime):
111111
output_modules = set(os.listdir(os.path.join(self.artifacts_dir, "node_modules")))
112112
self.assertEqual(expected_modules, output_modules)
113113

114-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
114+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
115115
def test_builds_project_with_npmrc(self, runtime):
116116
source_dir = os.path.join(self.TEST_DATA_FOLDER, "npmrc")
117117

@@ -138,14 +138,17 @@ def test_builds_project_with_npmrc(self, runtime):
138138
("nodejs14.x", "package-lock"),
139139
("nodejs16.x", "package-lock"),
140140
("nodejs18.x", "package-lock"),
141+
("nodejs20.x", "package-lock"),
141142
("nodejs12.x", "shrinkwrap"),
142143
("nodejs14.x", "shrinkwrap"),
143144
("nodejs16.x", "shrinkwrap"),
144145
("nodejs18.x", "shrinkwrap"),
146+
("nodejs20.x", "shrinkwrap"),
145147
("nodejs12.x", "package-lock-and-shrinkwrap"),
146148
("nodejs14.x", "package-lock-and-shrinkwrap"),
147149
("nodejs16.x", "package-lock-and-shrinkwrap"),
148150
("nodejs18.x", "package-lock-and-shrinkwrap"),
151+
("nodejs20.x", "package-lock-and-shrinkwrap"),
149152
]
150153
)
151154
def test_builds_project_with_lockfile(self, runtime, dir_name):
@@ -172,7 +175,7 @@ def test_builds_project_with_lockfile(self, runtime, dir_name):
172175

173176
self.assertEqual(expected_files, output_files)
174177

175-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
178+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
176179
def test_fails_if_npm_cannot_resolve_dependencies(self, runtime):
177180
source_dir = os.path.join(self.TEST_DATA_FOLDER, "broken-deps")
178181

@@ -187,7 +190,7 @@ def test_fails_if_npm_cannot_resolve_dependencies(self, runtime):
187190

188191
self.assertIn("No matching version found for aws-sdk@2.997.999", str(ctx.exception))
189192

190-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
193+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
191194
def test_builds_project_with_remote_dependencies_without_download_dependencies_with_dependencies_dir(self, runtime):
192195
source_dir = os.path.join(self.TEST_DATA_FOLDER, "npm-deps")
193196

@@ -205,7 +208,7 @@ def test_builds_project_with_remote_dependencies_without_download_dependencies_w
205208
output_files = set(os.listdir(self.artifacts_dir))
206209
self.assertEqual(expected_files, output_files)
207210

208-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
211+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
209212
def test_builds_project_with_remote_dependencies_with_download_dependencies_and_dependencies_dir(self, runtime):
210213
source_dir = os.path.join(self.TEST_DATA_FOLDER, "npm-deps")
211214

@@ -235,7 +238,7 @@ def test_builds_project_with_remote_dependencies_with_download_dependencies_and_
235238
output_dependencies_files = set(os.listdir(os.path.join(self.dependencies_dir)))
236239
self.assertNotIn(expected_dependencies_files, output_dependencies_files)
237240

238-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
241+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
239242
def test_builds_project_with_remote_dependencies_without_download_dependencies_without_dependencies_dir(
240243
self, runtime
241244
):
@@ -256,7 +259,7 @@ def test_builds_project_with_remote_dependencies_without_download_dependencies_w
256259
output_files = set(os.listdir(self.artifacts_dir))
257260
self.assertEqual(expected_files, output_files)
258261

259-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
262+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
260263
def test_builds_project_without_combine_dependencies(self, runtime):
261264
source_dir = os.path.join(self.TEST_DATA_FOLDER, "npm-deps")
262265

@@ -283,7 +286,7 @@ def test_builds_project_without_combine_dependencies(self, runtime):
283286
output_dependencies_files = set(os.listdir(os.path.join(self.dependencies_dir)))
284287
self.assertNotIn(expected_dependencies_files, output_dependencies_files)
285288

286-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
289+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
287290
def test_build_in_source_with_download_dependencies(self, runtime):
288291
source_dir = os.path.join(self.temp_testdata_dir, "npm-deps")
289292

@@ -312,7 +315,7 @@ def test_build_in_source_with_download_dependencies(self, runtime):
312315
output_files = set(os.listdir(self.artifacts_dir))
313316
self.assertEqual(expected_files, output_files)
314317

315-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
318+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
316319
def test_build_in_source_with_download_dependencies_local_dependency(self, runtime):
317320
source_dir = os.path.join(self.temp_testdata_dir, "with-local-dependency")
318321

@@ -341,7 +344,7 @@ def test_build_in_source_with_download_dependencies_local_dependency(self, runti
341344
output_files = set(os.listdir(self.artifacts_dir))
342345
self.assertEqual(expected_files, output_files)
343346

344-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
347+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
345348
def test_build_in_source_with_download_dependencies_and_dependencies_dir(self, runtime):
346349
source_dir = os.path.join(self.temp_testdata_dir, "npm-deps")
347350

@@ -376,7 +379,7 @@ def test_build_in_source_with_download_dependencies_and_dependencies_dir(self, r
376379
output_files = set(os.listdir(self.artifacts_dir))
377380
self.assertEqual(expected_files, output_files)
378381

379-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
382+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
380383
def test_build_in_source_with_download_dependencies_and_dependencies_dir_without_combine_dependencies(
381384
self, runtime
382385
):
@@ -409,7 +412,7 @@ def test_build_in_source_with_download_dependencies_and_dependencies_dir_without
409412
output_files = set(os.listdir(self.artifacts_dir))
410413
self.assertEqual(expected_files, output_files)
411414

412-
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",)])
415+
@parameterized.expand([("nodejs12.x",), ("nodejs14.x",), ("nodejs16.x",), ("nodejs18.x",), ("nodejs20.x",)])
413416
def test_build_in_source_reuse_saved_dependencies_dir(self, runtime):
414417
source_dir = os.path.join(self.temp_testdata_dir, "npm-deps")
415418

0 commit comments

Comments
 (0)