diff --git a/aws_lambda_builders/workflows/python_pip/packager.py b/aws_lambda_builders/workflows/python_pip/packager.py index 4b33f2d5c..e67d91a4c 100644 --- a/aws_lambda_builders/workflows/python_pip/packager.py +++ b/aws_lambda_builders/workflows/python_pip/packager.py @@ -171,6 +171,7 @@ class DependencyBuilder(object): _COMPATIBLE_PLATFORM_ARM64 = { "any", + "linux_aarch64", "manylinux2014_aarch64", } diff --git a/tests/integration/workflows/python_pip/test_python_pip.py b/tests/integration/workflows/python_pip/test_python_pip.py index 3c4d86c9e..39b244d5f 100644 --- a/tests/integration/workflows/python_pip/test_python_pip.py +++ b/tests/integration/workflows/python_pip/test_python_pip.py @@ -12,6 +12,8 @@ logger = logging.getLogger("aws_lambda_builders.workflows.python_pip.workflow") IS_WINDOWS = platform.system().lower() == "windows" +NOT_ARM = platform.processor() != "aarch64" +ARM_RUNTIMES = {"python3.8", "python3.9"} class TestPythonPipWorkflow(TestCase): @@ -29,12 +31,14 @@ def setUp(self): self.manifest_path_valid = os.path.join(self.TEST_DATA_FOLDER, "requirements-numpy.txt") self.manifest_path_invalid = os.path.join(self.TEST_DATA_FOLDER, "requirements-invalid.txt") + self.manifest_path_sdist = os.path.join(self.TEST_DATA_FOLDER, "requirements-wrapt.txt") self.test_data_files = { "__init__.py", "main.py", "requirements-invalid.txt", "requirements-numpy.txt", + "requirements-wrapt.txt", "local-dependencies", } @@ -84,8 +88,27 @@ def test_must_build_python_project(self): output_files = set(os.listdir(self.artifacts_dir)) self.assertEqual(expected_files, output_files) + @skipIf(NOT_ARM, "Skip if not running on ARM64") + def test_must_build_python_project_from_sdist_with_arm(self): + if self.runtime not in ARM_RUNTIMES: + self.skipTest("{} is not supported on ARM architecture".format(self.runtime)) + + self.builder.build( + self.source_dir, + self.artifacts_dir, + self.scratch_dir, + self.manifest_path_sdist, + runtime=self.runtime, + architecture="arm64", + ) + expected_files = self.test_data_files.union({"wrapt", "wrapt-1.13.3.dist-info"}) + output_files = set(os.listdir(self.artifacts_dir)) + self.assertEqual(expected_files, output_files) + + self.check_architecture_in("wrapt-1.13.3.dist-info", ["linux_aarch64"]) + def test_must_build_python_project_with_arm_architecture(self): - if self.runtime != "python3.8": + if self.runtime not in ARM_RUNTIMES: self.skipTest("{} is not supported on ARM architecture".format(self.runtime)) ### Check the wheels self.builder.build( diff --git a/tests/integration/workflows/python_pip/testdata/requirements-wrapt.txt b/tests/integration/workflows/python_pip/testdata/requirements-wrapt.txt new file mode 100644 index 000000000..3000b0f5f --- /dev/null +++ b/tests/integration/workflows/python_pip/testdata/requirements-wrapt.txt @@ -0,0 +1 @@ +wrapt==1.13.3 \ No newline at end of file