aws-lambda-builders 1.27.0__tar.gz → 1.28.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/PKG-INFO +2 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/__init__.py +1 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/__main__.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/actions.py +40 -13
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/builder.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/exceptions.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/registry.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/utils.py +29 -20
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/validator.py +1 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflow.py +0 -2
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/custom_make/make.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/custom_make/workflow.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/dotnet_clipackage/dotnetcli_resolver.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/dotnet_clipackage/utils.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/dotnet_clipackage/workflow.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/go_modules/actions.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/go_modules/builder.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/go_modules/workflow.py +0 -2
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm/actions.py +32 -20
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm/npm.py +0 -1
- aws_lambda_builders-1.28.0/aws_lambda_builders/workflows/nodejs_npm/workflow.py +213 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm_esbuild/esbuild.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py +1 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/python_pip/DESIGN.md +1 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/python_pip/actions.py +0 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/python_pip/packager.py +7 -7
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/python_pip/workflow.py +0 -2
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/ruby_bundler/workflow.py +7 -9
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders.egg-info/PKG-INFO +2 -1
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders.egg-info/requires.txt +6 -7
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/pyproject.toml +3 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/requirements/dev.txt +6 -7
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/setup.py +1 -0
- aws_lambda_builders-1.27.0/aws_lambda_builders/workflows/nodejs_npm/workflow.py +0 -186
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/LICENSE +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/MANIFEST.in +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/NOTICE +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/README.md +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/architecture.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/binary_path.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/path_resolver.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/custom_make/DESIGN.md +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/custom_make/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/custom_make/actions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/custom_make/exceptions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/custom_make/utils.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/custom_make/validator.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/dotnet_clipackage/DESIGN.md +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/dotnet_clipackage/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/dotnet_clipackage/actions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/dotnet_clipackage/dotnetcli.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/go_modules/DESIGN.md +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/go_modules/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/go_modules/utils.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/go_modules/validator.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java/actions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java/utils.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_gradle/DESIGN.md +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_gradle/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_gradle/actions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_gradle/gradle.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_gradle/gradle_resolver.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_gradle/gradle_validator.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_gradle/resources/lambda-build-init.gradle +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_gradle/workflow.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_maven/DESIGN.md +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_maven/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_maven/actions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_maven/maven.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_maven/maven_resolver.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_maven/maven_validator.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/java_maven/workflow.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm/DESIGN.md +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm/utils.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm_esbuild/DESIGN.md +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm_esbuild/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm_esbuild/actions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/nodejs_npm_esbuild/exceptions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/python_pip/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/python_pip/compat.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/python_pip/exceptions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/python_pip/utils.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/python_pip/validator.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/ruby_bundler/DESIGN.md +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/ruby_bundler/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/ruby_bundler/actions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/ruby_bundler/bundler.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/ruby_bundler/utils.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/rust_cargo/DESIGN.md +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/rust_cargo/__init__.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/rust_cargo/actions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/rust_cargo/cargo_lambda.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/rust_cargo/exceptions.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/rust_cargo/feature_flag.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/rust_cargo/utils.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders/workflows/rust_cargo/workflow.py +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders.egg-info/SOURCES.txt +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders.egg-info/dependency_links.txt +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders.egg-info/entry_points.txt +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/aws_lambda_builders.egg-info/top_level.txt +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/requirements/base.txt +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/requirements/python_pip.txt +0 -0
- {aws_lambda_builders-1.27.0 → aws_lambda_builders-1.28.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: aws_lambda_builders
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.28.0
|
|
4
4
|
Summary: Python library to compile, build & package AWS Lambda functions for several runtimes & frameworks.
|
|
5
5
|
Home-page: https://github.com/awslabs/aws-lambda-builders
|
|
6
6
|
Author: Amazon Web Services
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.7
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.8
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
22
|
Classifier: Topic :: Internet
|
|
22
23
|
Classifier: Topic :: Software Development :: Build Tools
|
|
23
24
|
Classifier: Topic :: Utilities
|
|
@@ -6,10 +6,10 @@ import logging
|
|
|
6
6
|
import os
|
|
7
7
|
import shutil
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import Iterator, Set, Tuple
|
|
9
|
+
from typing import Iterator, Set, Tuple, Union
|
|
10
10
|
|
|
11
11
|
from aws_lambda_builders import utils
|
|
12
|
-
from aws_lambda_builders.utils import copytree
|
|
12
|
+
from aws_lambda_builders.utils import copytree, create_symlink_or_copy
|
|
13
13
|
|
|
14
14
|
LOG = logging.getLogger(__name__)
|
|
15
15
|
|
|
@@ -55,7 +55,6 @@ class Purpose(object):
|
|
|
55
55
|
|
|
56
56
|
class _ActionMetaClass(type):
|
|
57
57
|
def __new__(mcs, name, bases, class_dict):
|
|
58
|
-
|
|
59
58
|
cls = type.__new__(mcs, name, bases, class_dict)
|
|
60
59
|
|
|
61
60
|
if cls.__name__ == "BaseAction":
|
|
@@ -100,24 +99,28 @@ class BaseAction(object, metaclass=_ActionMetaClass):
|
|
|
100
99
|
|
|
101
100
|
|
|
102
101
|
class CopySourceAction(BaseAction):
|
|
103
|
-
|
|
104
102
|
NAME = "CopySource"
|
|
105
103
|
|
|
106
104
|
DESCRIPTION = "Copying source code while skipping certain commonly excluded files"
|
|
107
105
|
|
|
108
106
|
PURPOSE = Purpose.COPY_SOURCE
|
|
109
107
|
|
|
110
|
-
def __init__(self, source_dir, dest_dir, excludes=None):
|
|
108
|
+
def __init__(self, source_dir, dest_dir, excludes=None, maintain_symlinks=False):
|
|
111
109
|
self.source_dir = source_dir
|
|
112
110
|
self.dest_dir = dest_dir
|
|
113
111
|
self.excludes = excludes or []
|
|
112
|
+
self.maintain_symlinks = maintain_symlinks
|
|
114
113
|
|
|
115
114
|
def execute(self):
|
|
116
|
-
copytree(
|
|
115
|
+
copytree(
|
|
116
|
+
self.source_dir,
|
|
117
|
+
self.dest_dir,
|
|
118
|
+
ignore=shutil.ignore_patterns(*self.excludes),
|
|
119
|
+
maintain_symlinks=self.maintain_symlinks,
|
|
120
|
+
)
|
|
117
121
|
|
|
118
122
|
|
|
119
123
|
class LinkSourceAction(BaseAction):
|
|
120
|
-
|
|
121
124
|
NAME = "LinkSource"
|
|
122
125
|
|
|
123
126
|
DESCRIPTION = "Linking source code to the target folder"
|
|
@@ -141,32 +144,54 @@ class LinkSourceAction(BaseAction):
|
|
|
141
144
|
utils.create_symlink_or_copy(str(source_path), str(destination_path))
|
|
142
145
|
|
|
143
146
|
|
|
144
|
-
class
|
|
147
|
+
class LinkSinglePathAction(BaseAction):
|
|
148
|
+
NAME = "LinkSource"
|
|
149
|
+
|
|
150
|
+
DESCRIPTION = "Creates symbolic link at destination, pointing to source"
|
|
151
|
+
|
|
152
|
+
PURPOSE = Purpose.LINK_SOURCE
|
|
145
153
|
|
|
154
|
+
def __init__(self, source: Union[str, os.PathLike], dest: Union[str, os.PathLike]):
|
|
155
|
+
self._source = source
|
|
156
|
+
self._dest = dest
|
|
157
|
+
|
|
158
|
+
def execute(self):
|
|
159
|
+
destination_path = Path(self._dest)
|
|
160
|
+
if not destination_path.exists():
|
|
161
|
+
os.makedirs(destination_path.parent, exist_ok=True)
|
|
162
|
+
utils.create_symlink_or_copy(str(self._source), str(destination_path))
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
class CopyDependenciesAction(BaseAction):
|
|
146
166
|
NAME = "CopyDependencies"
|
|
147
167
|
|
|
148
168
|
DESCRIPTION = "Copying dependencies while skipping source file"
|
|
149
169
|
|
|
150
170
|
PURPOSE = Purpose.COPY_DEPENDENCIES
|
|
151
171
|
|
|
152
|
-
def __init__(self, source_dir, artifact_dir, destination_dir):
|
|
172
|
+
def __init__(self, source_dir, artifact_dir, destination_dir, maintain_symlinks=False):
|
|
153
173
|
self.source_dir = source_dir
|
|
154
174
|
self.artifact_dir = artifact_dir
|
|
155
175
|
self.dest_dir = destination_dir
|
|
176
|
+
self.maintain_symlinks = maintain_symlinks
|
|
156
177
|
|
|
157
178
|
def execute(self):
|
|
158
179
|
deps_manager = DependencyManager(self.source_dir, self.artifact_dir, self.dest_dir)
|
|
159
180
|
|
|
160
181
|
for dependencies_source, new_destination in deps_manager.yield_source_dest():
|
|
161
|
-
if os.path.
|
|
162
|
-
|
|
182
|
+
if os.path.islink(dependencies_source) and self.maintain_symlinks:
|
|
183
|
+
os.makedirs(os.path.dirname(new_destination), exist_ok=True)
|
|
184
|
+
linkto = os.readlink(dependencies_source)
|
|
185
|
+
create_symlink_or_copy(linkto, new_destination)
|
|
186
|
+
shutil.copystat(dependencies_source, new_destination, follow_symlinks=False)
|
|
187
|
+
elif os.path.isdir(dependencies_source):
|
|
188
|
+
copytree(dependencies_source, new_destination, maintain_symlinks=self.maintain_symlinks)
|
|
163
189
|
else:
|
|
164
190
|
os.makedirs(os.path.dirname(new_destination), exist_ok=True)
|
|
165
191
|
shutil.copy2(dependencies_source, new_destination)
|
|
166
192
|
|
|
167
193
|
|
|
168
194
|
class MoveDependenciesAction(BaseAction):
|
|
169
|
-
|
|
170
195
|
NAME = "MoveDependencies"
|
|
171
196
|
|
|
172
197
|
DESCRIPTION = "Moving dependencies while skipping source file"
|
|
@@ -214,7 +239,9 @@ class CleanUpAction(BaseAction):
|
|
|
214
239
|
target_path = os.path.join(self.target_dir, name)
|
|
215
240
|
LOG.debug("Clean up action: %s is deleted", str(target_path))
|
|
216
241
|
|
|
217
|
-
if os.path.
|
|
242
|
+
if os.path.islink(target_path):
|
|
243
|
+
os.unlink(target_path)
|
|
244
|
+
elif os.path.isdir(target_path):
|
|
218
245
|
shutil.rmtree(target_path)
|
|
219
246
|
else:
|
|
220
247
|
os.remove(target_path)
|
|
@@ -7,36 +7,40 @@ import os
|
|
|
7
7
|
import shutil
|
|
8
8
|
import sys
|
|
9
9
|
from pathlib import Path
|
|
10
|
-
from typing import Union
|
|
10
|
+
from typing import Callable, List, Optional, Set, Union
|
|
11
11
|
|
|
12
12
|
from aws_lambda_builders.architecture import ARM64
|
|
13
13
|
|
|
14
14
|
LOG = logging.getLogger(__name__)
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
def copytree(
|
|
17
|
+
def copytree(
|
|
18
|
+
source: str,
|
|
19
|
+
destination: str,
|
|
20
|
+
ignore: Optional[Callable[[str, List[str]], Set[str]]] = None,
|
|
21
|
+
include: Optional[Callable[[str], bool]] = None,
|
|
22
|
+
maintain_symlinks: bool = False,
|
|
23
|
+
) -> None:
|
|
18
24
|
"""
|
|
19
25
|
Similar to shutil.copytree except that it removes the limitation that the destination directory should
|
|
20
26
|
be present.
|
|
21
27
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
:type ignore: function
|
|
31
|
-
:param ignore:
|
|
28
|
+
Parameters
|
|
29
|
+
----------
|
|
30
|
+
source : str
|
|
31
|
+
Path to the source folder to copy.
|
|
32
|
+
destination : str
|
|
33
|
+
Path to destination folder.
|
|
34
|
+
ignore : Optional[Callable[[str, List[str]], Set[str]]]
|
|
32
35
|
A function that returns a set of file names to ignore, given a list of available file names. Similar to the
|
|
33
|
-
``ignore`` property of ``shutils.copytree`` method
|
|
34
|
-
|
|
35
|
-
:type include: Callable[[str], bool]
|
|
36
|
-
:param include:
|
|
36
|
+
``ignore`` property of ``shutils.copytree`` method. By default None.
|
|
37
|
+
include : Optional[Callable[[str], bool]]
|
|
37
38
|
A function that will decide whether a file should be copied or skipped it. It accepts file name as parameter
|
|
38
39
|
and return True or False. Returning True will continue copy operation, returning False will skip copy operation
|
|
39
|
-
for that file
|
|
40
|
+
for that file. By default None.
|
|
41
|
+
maintain_symlinks : bool, optional
|
|
42
|
+
If True, symbolic links in the source are represented as symbolic links in the destination.
|
|
43
|
+
If False, the contents are copied over. By default False.
|
|
40
44
|
"""
|
|
41
45
|
|
|
42
46
|
if not os.path.exists(source):
|
|
@@ -74,8 +78,12 @@ def copytree(source, destination, ignore=None, include=None):
|
|
|
74
78
|
LOG.debug("File (%s) doesn't satisfy the include rule, skipping it", name)
|
|
75
79
|
continue
|
|
76
80
|
|
|
77
|
-
if os.path.
|
|
78
|
-
|
|
81
|
+
if os.path.islink(new_source) and maintain_symlinks:
|
|
82
|
+
linkto = os.readlink(new_source)
|
|
83
|
+
create_symlink_or_copy(linkto, new_destination)
|
|
84
|
+
shutil.copystat(new_source, new_destination, follow_symlinks=False)
|
|
85
|
+
elif os.path.isdir(new_source):
|
|
86
|
+
copytree(new_source, new_destination, ignore=ignore, include=include, maintain_symlinks=maintain_symlinks)
|
|
79
87
|
else:
|
|
80
88
|
LOG.debug("Copying source file (%s) to destination (%s)", new_source, new_destination)
|
|
81
89
|
shutil.copy2(new_source, new_destination)
|
|
@@ -193,7 +201,8 @@ def create_symlink_or_copy(source: str, destination: str) -> None:
|
|
|
193
201
|
os.symlink(Path(source).absolute(), Path(destination).absolute())
|
|
194
202
|
except OSError as ex:
|
|
195
203
|
LOG.warning(
|
|
196
|
-
"
|
|
204
|
+
"Symbolic link creation failed, falling back to copying files instead. To optimize speed, "
|
|
205
|
+
"consider enabling the necessary settings or privileges on your system to support symbolic links.",
|
|
197
206
|
exc_info=ex if LOG.isEnabledFor(logging.DEBUG) else None,
|
|
198
207
|
)
|
|
199
208
|
copytree(source, destination)
|
|
@@ -32,7 +32,6 @@ Capability = namedtuple("Capability", ["language", "dependency_manager", "applic
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class BuildMode(object):
|
|
35
|
-
|
|
36
35
|
DEBUG = "debug"
|
|
37
36
|
RELEASE = "release"
|
|
38
37
|
|
|
@@ -376,7 +375,6 @@ class BaseWorkflow(object, metaclass=_WorkflowMetaClass):
|
|
|
376
375
|
|
|
377
376
|
raise WorkflowFailedError(workflow_name=self.NAME, action_name=action.NAME, reason=str(ex))
|
|
378
377
|
except Exception as ex:
|
|
379
|
-
|
|
380
378
|
LOG.debug("%s raised unhandled exception", action_info, exc_info=ex)
|
|
381
379
|
|
|
382
380
|
raise WorkflowUnknownError(workflow_name=self.NAME, action_name=action.NAME, reason=str(ex))
|
|
@@ -28,7 +28,6 @@ class CustomMakeWorkflow(BaseWorkflow):
|
|
|
28
28
|
BUILD_IN_SOURCE_SUPPORT = BuildInSourceSupport.OPTIONALLY_SUPPORTED
|
|
29
29
|
|
|
30
30
|
def __init__(self, source_dir, artifacts_dir, scratch_dir, manifest_path, runtime=None, osutils=None, **kwargs):
|
|
31
|
-
|
|
32
31
|
super(CustomMakeWorkflow, self).__init__(
|
|
33
32
|
source_dir, artifacts_dir, scratch_dir, manifest_path, runtime=runtime, **kwargs
|
|
34
33
|
)
|
|
@@ -44,7 +44,6 @@ class OSUtils(object):
|
|
|
44
44
|
"""
|
|
45
45
|
|
|
46
46
|
with zipfile.ZipFile(zip_file_path, "r") as zip_ref:
|
|
47
|
-
|
|
48
47
|
# For each item in the zip file, extract the file and set permissions if available
|
|
49
48
|
for file_info in zip_ref.infolist():
|
|
50
49
|
extracted_path = self._extract(file_info, output_dir, zip_ref)
|
|
@@ -23,7 +23,6 @@ class DotnetCliPackageWorkflow(BaseWorkflow):
|
|
|
23
23
|
BUILD_IN_SOURCE_SUPPORT = BuildInSourceSupport.EXCLUSIVELY_SUPPORTED
|
|
24
24
|
|
|
25
25
|
def __init__(self, source_dir, artifacts_dir, scratch_dir, manifest_path, runtime=None, mode=None, **kwargs):
|
|
26
|
-
|
|
27
26
|
super(DotnetCliPackageWorkflow, self).__init__(
|
|
28
27
|
source_dir, artifacts_dir, scratch_dir, manifest_path, runtime=runtime, mode=mode, **kwargs
|
|
29
28
|
)
|
|
@@ -10,7 +10,6 @@ from .validator import GoRuntimeValidator
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class GoModulesWorkflow(BaseWorkflow):
|
|
13
|
-
|
|
14
13
|
NAME = "GoModulesBuilder"
|
|
15
14
|
|
|
16
15
|
CAPABILITY = Capability(language="go", dependency_manager="modules", application_framework=None)
|
|
@@ -21,7 +20,6 @@ class GoModulesWorkflow(BaseWorkflow):
|
|
|
21
20
|
def __init__(
|
|
22
21
|
self, source_dir, artifacts_dir, scratch_dir, manifest_path, runtime=None, osutils=None, mode=None, **kwargs
|
|
23
22
|
):
|
|
24
|
-
|
|
25
23
|
super(GoModulesWorkflow, self).__init__(
|
|
26
24
|
source_dir, artifacts_dir, scratch_dir, manifest_path, runtime=runtime, **kwargs
|
|
27
25
|
)
|
|
@@ -3,11 +3,12 @@ Action to resolve NodeJS dependencies using NPM
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
|
+
from typing import Optional
|
|
6
7
|
|
|
7
8
|
from aws_lambda_builders.actions import ActionFailedError, BaseAction, Purpose
|
|
8
9
|
from aws_lambda_builders.utils import extract_tarfile
|
|
9
10
|
|
|
10
|
-
from .npm import NpmExecutionError
|
|
11
|
+
from .npm import NpmExecutionError, SubprocessNpm
|
|
11
12
|
|
|
12
13
|
LOG = logging.getLogger(__name__)
|
|
13
14
|
|
|
@@ -82,21 +83,22 @@ class NodejsNpmInstallAction(BaseAction):
|
|
|
82
83
|
DESCRIPTION = "Installing dependencies from NPM"
|
|
83
84
|
PURPOSE = Purpose.RESOLVE_DEPENDENCIES
|
|
84
85
|
|
|
85
|
-
def __init__(self, install_dir, subprocess_npm):
|
|
86
|
+
def __init__(self, install_dir: str, subprocess_npm: SubprocessNpm, install_links: Optional[bool] = False):
|
|
86
87
|
"""
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
88
|
+
Parameters
|
|
89
|
+
----------
|
|
90
|
+
install_dir : str
|
|
91
|
+
Dependencies will be installed in this directory.
|
|
92
|
+
subprocess_npm : SubprocessNpm
|
|
93
|
+
An instance of the NPM process wrapper
|
|
94
|
+
install_links : Optional[bool]
|
|
95
|
+
Uses the --install-links npm option if True, by default False
|
|
95
96
|
"""
|
|
96
97
|
|
|
97
98
|
super(NodejsNpmInstallAction, self).__init__()
|
|
98
99
|
self.install_dir = install_dir
|
|
99
100
|
self.subprocess_npm = subprocess_npm
|
|
101
|
+
self.install_links = install_links
|
|
100
102
|
|
|
101
103
|
def execute(self):
|
|
102
104
|
"""
|
|
@@ -107,9 +109,11 @@ class NodejsNpmInstallAction(BaseAction):
|
|
|
107
109
|
try:
|
|
108
110
|
LOG.debug("NODEJS installing in: %s", self.install_dir)
|
|
109
111
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
112
|
+
command = ["install", "-q", "--no-audit", "--no-save", "--unsafe-perm", "--production"]
|
|
113
|
+
if self.install_links:
|
|
114
|
+
command.append("--install-links")
|
|
115
|
+
|
|
116
|
+
self.subprocess_npm.run(command, cwd=self.install_dir)
|
|
113
117
|
|
|
114
118
|
except NpmExecutionError as ex:
|
|
115
119
|
raise ActionFailedError(str(ex))
|
|
@@ -128,18 +132,22 @@ class NodejsNpmCIAction(BaseAction):
|
|
|
128
132
|
DESCRIPTION = "Installing dependencies from NPM using the CI method"
|
|
129
133
|
PURPOSE = Purpose.RESOLVE_DEPENDENCIES
|
|
130
134
|
|
|
131
|
-
def __init__(self, install_dir, subprocess_npm):
|
|
135
|
+
def __init__(self, install_dir: str, subprocess_npm: SubprocessNpm, install_links: Optional[bool] = False):
|
|
132
136
|
"""
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
137
|
+
Parameters
|
|
138
|
+
----------
|
|
139
|
+
install_dir : str
|
|
140
|
+
Dependencies will be installed in this directory.
|
|
141
|
+
subprocess_npm : SubprocessNpm
|
|
142
|
+
An instance of the NPM process wrapper
|
|
143
|
+
install_links : Optional[bool]
|
|
144
|
+
Uses the --install-links npm option if True, by default False
|
|
138
145
|
"""
|
|
139
146
|
|
|
140
147
|
super(NodejsNpmCIAction, self).__init__()
|
|
141
148
|
self.install_dir = install_dir
|
|
142
149
|
self.subprocess_npm = subprocess_npm
|
|
150
|
+
self.install_links = install_links
|
|
143
151
|
|
|
144
152
|
def execute(self):
|
|
145
153
|
"""
|
|
@@ -151,7 +159,11 @@ class NodejsNpmCIAction(BaseAction):
|
|
|
151
159
|
try:
|
|
152
160
|
LOG.debug("NODEJS installing ci in: %s", self.install_dir)
|
|
153
161
|
|
|
154
|
-
|
|
162
|
+
command = ["ci"]
|
|
163
|
+
if self.install_links:
|
|
164
|
+
command.append("--install-links")
|
|
165
|
+
|
|
166
|
+
self.subprocess_npm.run(command, cwd=self.install_dir)
|
|
155
167
|
|
|
156
168
|
except NpmExecutionError as ex:
|
|
157
169
|
raise ActionFailedError(str(ex))
|