diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 06a0a936503..b0bd5f07e28 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -120,7 +120,7 @@ jobs: # folders that is commented below requires credentials, no need to spare time to run them tests_config: - name: "integ-buildcmd-arm64" - params: "-n 2 --reruns 3 tests/integration/buildcmd/test_build_cmd_arm64.py" + params: "-n 2 --reruns 3 tests/integration/buildcmd/test_build_cmd_arm64.py" - name: "integ-buildcmd-main" params: "-n 2 --reruns 3 tests/integration/buildcmd/test_build_cmd_dotnet.py tests/integration/buildcmd/test_build_cmd_provided.py tests/integration/buildcmd/test_build_cmd_rust.py tests/integration/buildcmd/test_build_cmd_python.py tests/integration/buildcmd/test_build_cmd_node.py" - name: "integ-buildcmd-java" @@ -154,6 +154,7 @@ jobs: 3.11 3.12 3.13 + 3.14 ${{ matrix.python }} cache: 'pip' - uses: actions/setup-go@v6 @@ -173,6 +174,7 @@ jobs: 11 17 21 + 25 # Install and configure Rust & Cargo Lambda - name: Install and configure Rust & Cargo Lambda if: ${{ matrix.os == 'ubuntu-latest' }} @@ -268,6 +270,7 @@ jobs: with: # These are the versions of Python that correspond to the supported Lambda runtimes python-version: | + 3.14 3.9 3.10 3.11 diff --git a/.gitignore b/.gitignore index 44ddf9dc064..cbbabe9471f 100644 --- a/.gitignore +++ b/.gitignore @@ -425,4 +425,5 @@ samcli/lib/init/templates/cookiecutter-aws-sam-hello-java-gradle/**/.gradle/ # Installer build folder .build -.kiro \ No newline at end of file +.kiro +mise.toml \ No newline at end of file diff --git a/appveyor-linux-binary.yml b/appveyor-linux-binary.yml index e3021084f2a..c57f879e225 100644 --- a/appveyor-linux-binary.yml +++ b/appveyor-linux-binary.yml @@ -79,7 +79,7 @@ install: - sh: "./aws_cli/bin/python -m pip install awscli" - sh: "PATH=$(echo $PWD'/aws_cli/bin'):$PATH" - - sh: "PATH=$PATH:$HOME/venv3.9/bin:$HOME/venv3.10/bin:$HOME/venv3.11/bin:$HOME/venv3.12/bin:$HOME/venv3.13/bin" + - sh: "PATH=$PATH:$HOME/venv3.9/bin:$HOME/venv3.10/bin:$HOME/venv3.11/bin:$HOME/venv3.12/bin:$HOME/venv3.13/bin:$HOME/venv3.14/bin" # Install pytest - sh: "python3.9 -m venv $HOME/pytest" diff --git a/appveyor-ubuntu.yml b/appveyor-ubuntu.yml index 2e07d7135e7..048feaccfd8 100644 --- a/appveyor-ubuntu.yml +++ b/appveyor-ubuntu.yml @@ -253,7 +253,7 @@ install: - sh: "./aws_cli/bin/python -m pip install awscli" - sh: "PATH=$(echo $PWD'/aws_cli/bin'):$PATH" - - sh: "PATH=$PATH:$HOME/venv3.7/bin:$HOME/venv3.8/bin:$HOME/venv3.9/bin:$HOME/venv3.10/bin:$HOME/venv3.11/bin:$HOME/venv3.12/bin:$HOME/venv3.13/bin" + - sh: "PATH=$PATH:$HOME/venv3.7/bin:$HOME/venv3.8/bin:$HOME/venv3.9/bin:$HOME/venv3.10/bin:$HOME/venv3.11/bin:$HOME/venv3.12/bin:$HOME/venv3.13/bin:$HOME/venv3.14/bin" # update ca-certificates which causes failures with newest golang library - sh: "sudo apt-get install --reinstall ca-certificates" diff --git a/appveyor-windows-al2023.yml b/appveyor-windows-al2023.yml index fb62202e46b..4be0330e8e2 100644 --- a/appveyor-windows-al2023.yml +++ b/appveyor-windows-al2023.yml @@ -57,7 +57,7 @@ install: # Make sure the temp directory exists for Python to use. - ps: "mkdir -Force C:\\tmp" - "python --version" - - 'set PATH=%PYTHON_HOME%;C:\Ruby32-x64\bin;C:\Ruby33-x64\bin;C:\Ruby34-x64\bin;%PATH%;C:\Python39-x64;C:\Python310-x64;C:\Python311-x64;C:\Python312-x64;C:\Python313-x64' + - 'set PATH=%PYTHON_HOME%;C:\Ruby32-x64\bin;C:\Ruby33-x64\bin;C:\Ruby34-x64\bin;%PATH%;C:\Python39-x64;C:\Python310-x64;C:\Python311-x64;C:\Python312-x64;C:\Python313-x64;C:\Python314-x64' - "node --version" - "echo %PYTHON_HOME%" - "echo %PATH%" diff --git a/appveyor-windows-binary.yml b/appveyor-windows-binary.yml index c47dd26fcfa..cb38d598e97 100644 --- a/appveyor-windows-binary.yml +++ b/appveyor-windows-binary.yml @@ -69,7 +69,7 @@ install: # Make sure the temp directory exists for Python to use. - ps: "mkdir -Force C:\\tmp" - - 'set PATH=%PYTHON_HOME%;C:\Ruby32-x64\bin;C:\Ruby33-x64\bin;C:\Ruby34-x64\bin;%PATH%;C:\Python39-x64;C:\Python310-x64;C:\Python38-x64;C:\Python312-x64;C:\Python313-x64' + - 'set PATH=%PYTHON_HOME%;C:\Ruby32-x64\bin;C:\Ruby33-x64\bin;C:\Ruby34-x64\bin;%PATH%;C:\Python39-x64;C:\Python310-x64;C:\Python38-x64;C:\Python312-x64;C:\Python313-x64;C:\Python314-x64' - "echo %PYTHON_HOME%" - "echo %PATH%" - "python --version" diff --git a/appveyor-windows.yml b/appveyor-windows.yml index 58c61a39417..7fa57a4c859 100644 --- a/appveyor-windows.yml +++ b/appveyor-windows.yml @@ -68,7 +68,7 @@ install: # Make sure the temp directory exists for Python to use. - ps: "mkdir -Force C:\\tmp" - - 'set PATH=%PYTHON_HOME%;C:\Ruby32-x64\bin;C:\Ruby33-x64\bin;C:\Ruby34-x64\bin;%PATH%;C:\Python39-x64;C:\Python310-x64;C:\Python311-x64;C:\Python312-x64;C:\Python313-x64' + - 'set PATH=%PYTHON_HOME%;C:\Ruby32-x64\bin;C:\Ruby33-x64\bin;C:\Ruby34-x64\bin;%PATH%;C:\Python39-x64;C:\Python310-x64;C:\Python311-x64;C:\Python312-x64;C:\Python313-x64;C:\Python314-x64' - "echo %PYTHON_HOME%" - "echo %PATH%" - "python --version" diff --git a/pytest.ini b/pytest.ini index a02d5bd6f59..64b9b713511 100644 --- a/pytest.ini +++ b/pytest.ini @@ -13,6 +13,8 @@ filterwarnings = default::ResourceWarning ; Ignore below warning to not fail in Python3.12. Remove once dateutil updates itself or botocore use another way to generate EPOCH ignore::DeprecationWarning:dateutil.tz.tz: +; Ignore dateparser deprecation warnings about parsing dates without years (Python 3.13+) + ignore:.*Parsing dates involving a day of month without a year specified.*:DeprecationWarning ; The following deprecation warnings are treated as failures unless we explicitly tell pytest not to ; Remove once we no longer support python3.7 ignore::boto3.exceptions.PythonDeprecationWarning diff --git a/samcli/commands/build/command.py b/samcli/commands/build/command.py index 32e92591bd0..4ce71e25fbd 100644 --- a/samcli/commands/build/command.py +++ b/samcli/commands/build/command.py @@ -56,10 +56,10 @@ \b Supported Runtimes ------------------ - 1. Python 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 using PIP\n + 1. Python 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, 3.14 using PIP\n 2. Nodejs 22.x, Nodejs 20.x, 18.x, 16.x, 14.x, 12.x using NPM\n 3. Ruby 3.2, 3.3, 3.4 using Bundler\n - 4. Java 8, Java 11, Java 17, Java 21 using Gradle and Maven\n + 4. Java 8, Java 11, Java 17, Java 21, Java 25 using Gradle and Maven\n 5. Dotnet8, Dotnet6 using Dotnet CLI\n 6. Go 1.x using Go Modules (without --use-container)\n """ diff --git a/samcli/lib/build/workflow_config.py b/samcli/lib/build/workflow_config.py index ce98121394e..1c899402b60 100644 --- a/samcli/lib/build/workflow_config.py +++ b/samcli/lib/build/workflow_config.py @@ -91,6 +91,7 @@ def get_layer_subfolder(build_workflow: str) -> str: "python3.11": "python", "python3.12": "python", "python3.13": "python", + "python3.14": "python", "nodejs4.3": "nodejs", "nodejs6.10": "nodejs", "nodejs8.10": "nodejs", @@ -105,6 +106,7 @@ def get_layer_subfolder(build_workflow: str) -> str: "java8.al2": "java", "java17": "java", "java21": "java", + "java25": "java", "dotnet6": "dotnet", "dotnet8": "dotnet", # User is responsible for creating subfolder in these workflows @@ -162,6 +164,7 @@ def get_workflow_config( "python3.11": BasicWorkflowSelector(PYTHON_PIP_CONFIG), "python3.12": BasicWorkflowSelector(PYTHON_PIP_CONFIG), "python3.13": BasicWorkflowSelector(PYTHON_PIP_CONFIG), + "python3.14": BasicWorkflowSelector(PYTHON_PIP_CONFIG), "nodejs16.x": BasicWorkflowSelector(NODEJS_NPM_CONFIG), "nodejs18.x": BasicWorkflowSelector(NODEJS_NPM_CONFIG), "nodejs20.x": BasicWorkflowSelector(NODEJS_NPM_CONFIG), @@ -206,6 +209,14 @@ def get_workflow_config( JAVA_MAVEN_CONFIG, ] ), + "java25": ManifestWorkflowSelector( + [ + # Gradle builder needs custom executable paths to find `gradlew` binary + JAVA_GRADLE_CONFIG._replace(executable_search_paths=[code_dir, project_dir]), + JAVA_KOTLIN_GRADLE_CONFIG._replace(executable_search_paths=[code_dir, project_dir]), + JAVA_MAVEN_CONFIG, + ] + ), "provided": BasicWorkflowSelector(PROVIDED_MAKE_CONFIG), "provided.al2": BasicWorkflowSelector(PROVIDED_MAKE_CONFIG), "provided.al2023": BasicWorkflowSelector(PROVIDED_MAKE_CONFIG), diff --git a/samcli/lib/utils/architecture.py b/samcli/lib/utils/architecture.py index 7822c238f0e..373ea95a13e 100644 --- a/samcli/lib/utils/architecture.py +++ b/samcli/lib/utils/architecture.py @@ -25,6 +25,7 @@ "python3.11": [ARM64, X86_64], "python3.12": [ARM64, X86_64], "python3.13": [ARM64, X86_64], + "python3.14": [ARM64, X86_64], "ruby3.2": [ARM64, X86_64], "ruby3.3": [ARM64, X86_64], "ruby3.4": [ARM64, X86_64], @@ -32,6 +33,7 @@ "java11": [ARM64, X86_64], "java17": [ARM64, X86_64], "java21": [ARM64, X86_64], + "java25": [ARM64, X86_64], "go1.x": [X86_64], "dotnet6": [ARM64, X86_64], "dotnet8": [ARM64, X86_64], diff --git a/samcli/local/common/runtime_template.py b/samcli/local/common/runtime_template.py index b0484aab097..22206578b8f 100644 --- a/samcli/local/common/runtime_template.py +++ b/samcli/local/common/runtime_template.py @@ -16,7 +16,15 @@ RUNTIME_DEP_TEMPLATE_MAPPING = { "python": [ { - "runtimes": ["python3.13", "python3.12", "python3.11", "python3.10", "python3.9", "python3.8"], + "runtimes": [ + "python3.14", + "python3.13", + "python3.12", + "python3.11", + "python3.10", + "python3.9", + "python3.8", + ], "dependency_manager": "pip", "init_location": os.path.join(_templates, "cookiecutter-aws-sam-hello-python"), "build": True, @@ -56,13 +64,13 @@ ], "java": [ { - "runtimes": ["java11", "java8.al2", "java17", "java21"], + "runtimes": ["java11", "java8.al2", "java17", "java21", "java25"], "dependency_manager": "maven", "init_location": os.path.join(_templates, "cookiecutter-aws-sam-hello-java-maven"), "build": True, }, { - "runtimes": ["java11", "java8.al2", "java17", "java21"], + "runtimes": ["java11", "java8.al2", "java17", "java21", "java25"], "dependency_manager": "gradle", "init_location": os.path.join(_templates, "cookiecutter-aws-sam-hello-java-gradle"), "build": True, @@ -104,6 +112,7 @@ def get_local_lambda_images_location(mapping, runtime): # go runtimes in descending order "go1.x", # java runtimes in descending order + "java25", "java21", "java17", "java11", @@ -118,6 +127,7 @@ def get_local_lambda_images_location(mapping, runtime): "provided.al2", "provided", # python runtimes in descending order + "python3.14", "python3.13", "python3.12", "python3.11", @@ -137,6 +147,7 @@ def get_local_lambda_images_location(mapping, runtime): "go1.x": "amazon/go1.x-base", "go (provided.al2)": "amazon/go-provided.al2-base", "go (provided.al2023)": "amazon/go-provided.al2023-base", + "java25": "amazon/java25-base", "java21": "amazon/java21-base", "java17": "amazon/java17-base", "java11": "amazon/java11-base", @@ -145,6 +156,7 @@ def get_local_lambda_images_location(mapping, runtime): "nodejs20.x": "amazon/nodejs20.x-base", "nodejs18.x": "amazon/nodejs18.x-base", "nodejs16.x": "amazon/nodejs16.x-base", + "python3.14": "amazon/python3.14-base", "python3.13": "amazon/python3.13-base", "python3.12": "amazon/python3.12-base", "python3.11": "amazon/python3.11-base", @@ -166,12 +178,14 @@ def get_local_lambda_images_location(mapping, runtime): "java11": "Java8", "java17": "Java8", "java21": "Java8", + "java25": "Java8", "python3.8": "Python36", "python3.9": "Python36", "python3.10": "Python36", "python3.11": "Python36", "python3.12": "Python36", "python3.13": "Python36", + "python3.14": "Python36", "dotnet6": "dotnet6", "dotnet8": "dotnet6", "go1.x": "Go1", diff --git a/samcli/local/docker/lambda_debug_settings.py b/samcli/local/docker/lambda_debug_settings.py index 6a033526bfb..cc46e2eabb8 100644 --- a/samcli/local/docker/lambda_debug_settings.py +++ b/samcli/local/docker/lambda_debug_settings.py @@ -93,6 +93,16 @@ def get_debug_settings(debug_port, debug_args_list, _container_env_vars, runtime **_container_env_vars, }, ), + Runtime.java25.value: lambda: DebugSettings( + entry, + container_env_vars={ + "_JAVA_OPTIONS": "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,quiet=y," + f"address=*:{debug_port} -XX:MaxHeapSize=2834432k -XX:+UseSerialGC " + "-XX:+TieredCompilation -XX:TieredStopAtLevel=1 " + "-Djava.net.preferIPv4Stack=true" + " ".join(debug_args_list), + **_container_env_vars, + }, + ), Runtime.dotnet6.value: lambda: DebugSettings( entry + ["/var/runtime/bootstrap"] + debug_args_list, container_env_vars={"_AWS_LAMBDA_DOTNET_DEBUGGING": "1", **_container_env_vars}, @@ -191,6 +201,10 @@ def get_debug_settings(debug_port, debug_args_list, _container_env_vars, runtime entry + ["/var/lang/bin/python3.13"] + debug_args_list + ["/var/runtime/bootstrap.py"], container_env_vars=_container_env_vars, ), + Runtime.python314.value: lambda: DebugSettings( + entry + ["/var/lang/bin/python3.14"] + debug_args_list + ["/var/runtime/bootstrap.py"], + container_env_vars=_container_env_vars, + ), } try: return entrypoint_mapping[runtime]() diff --git a/samcli/local/docker/lambda_image.py b/samcli/local/docker/lambda_image.py index e54668f163e..719db174cf6 100644 --- a/samcli/local/docker/lambda_image.py +++ b/samcli/local/docker/lambda_image.py @@ -46,6 +46,7 @@ class Runtime(Enum): python311 = "python3.11" python312 = "python3.12" python313 = "python3.13" + python314 = "python3.14" ruby32 = "ruby3.2" ruby33 = "ruby3.3" ruby34 = "ruby3.4" @@ -53,6 +54,7 @@ class Runtime(Enum): java11 = "java11" java17 = "java17" java21 = "java21" + java25 = "java25" go1x = "go1.x" dotnet6 = "dotnet6" dotnet8 = "dotnet8" diff --git a/schema/samcli.json b/schema/samcli.json index 5203d60bc7a..9c14395d644 100644 --- a/schema/samcli.json +++ b/schema/samcli.json @@ -23,7 +23,7 @@ "properties": { "parameters": { "title": "Parameters for the init command", - "description": "Available parameters for the init command:\n* no_interactive:\nDisable interactive prompting for init parameters. (fail if any required values are missing)\n* architecture:\nArchitectures for Lambda functions.\n\nArchitectures: ['arm64', 'x86_64']\n* location:\nTemplate location (git, mercurial, http(s), zip, path).\n* runtime:\nLambda runtime for application.\n\nRuntimes: dotnet8, dotnet6, go1.x, java21, java17, java11, java8.al2, nodejs22.x, nodejs20.x, nodejs18.x, nodejs16.x, provided, provided.al2, provided.al2023, python3.9, python3.8, python3.13, python3.12, python3.11, python3.10, ruby3.4, ruby3.3, ruby3.2\n* package_type:\nLambda deployment package type.\n\nPackage Types: Zip, Image\n* base_image:\nLambda base image for deploying IMAGE based package type.\n\nBase images: amazon/dotnet6-base, amazon/dotnet8-base, amazon/go-provided.al2-base, amazon/go-provided.al2023-base, amazon/go1.x-base, amazon/java11-base, amazon/java17-base, amazon/java21-base, amazon/java8.al2-base, amazon/nodejs16.x-base, amazon/nodejs18.x-base, amazon/nodejs20.x-base, amazon/nodejs22.x-base, amazon/python3.10-base, amazon/python3.11-base, amazon/python3.12-base, amazon/python3.13-base, amazon/python3.8-base, amazon/python3.9-base, amazon/ruby3.2-base, amazon/ruby3.3-base, amazon/ruby3.4-base\n* dependency_manager:\nDependency manager for Lambda runtime.\n\nDependency managers: bundler, cli-package, gradle, maven, mod, npm, pip\n* output_dir:\nDirectory to initialize AWS SAM application.\n* name:\nName of AWS SAM Application.\n* app_template:\nIdentifier of the managed application template to be used. Alternatively, run '$ sam init' without options for an interactive workflow.\n* no_input:\nDisable Cookiecutter prompting and accept default values defined in the cookiecutter config.\n* extra_context:\nOverride custom parameters in the template's cookiecutter.json configuration e.g. {\"customParam1\": \"customValue1\", \"customParam2\":\"customValue2\"}\n* tracing:\nEnable AWS X-Ray tracing for application.\n* application_insights:\nEnable CloudWatch Application Insights monitoring for application.\n* structured_logging:\nEnable Structured Logging for application.\n* beta_features:\nEnable/Disable beta features.\n* debug:\nTurn on debug logging to print debug message generated by AWS SAM CLI and display timestamps.\n* save_params:\nSave the parameters provided via the command line to the configuration file.", + "description": "Available parameters for the init command:\n* no_interactive:\nDisable interactive prompting for init parameters. (fail if any required values are missing)\n* architecture:\nArchitectures for Lambda functions.\n\nArchitectures: ['arm64', 'x86_64']\n* location:\nTemplate location (git, mercurial, http(s), zip, path).\n* runtime:\nLambda runtime for application.\n\nRuntimes: dotnet8, dotnet6, go1.x, java25, java21, java17, java11, java8.al2, nodejs22.x, nodejs20.x, nodejs18.x, nodejs16.x, provided, provided.al2, provided.al2023, python3.9, python3.8, python3.14, python3.13, python3.12, python3.11, python3.10, ruby3.4, ruby3.3, ruby3.2\n* package_type:\nLambda deployment package type.\n\nPackage Types: Zip, Image\n* base_image:\nLambda base image for deploying IMAGE based package type.\n\nBase images: amazon/dotnet6-base, amazon/dotnet8-base, amazon/go-provided.al2-base, amazon/go-provided.al2023-base, amazon/go1.x-base, amazon/java11-base, amazon/java17-base, amazon/java21-base, amazon/java25-base, amazon/java8.al2-base, amazon/nodejs16.x-base, amazon/nodejs18.x-base, amazon/nodejs20.x-base, amazon/nodejs22.x-base, amazon/python3.10-base, amazon/python3.11-base, amazon/python3.12-base, amazon/python3.13-base, amazon/python3.14-base, amazon/python3.8-base, amazon/python3.9-base, amazon/ruby3.2-base, amazon/ruby3.3-base, amazon/ruby3.4-base\n* dependency_manager:\nDependency manager for Lambda runtime.\n\nDependency managers: bundler, cli-package, gradle, maven, mod, npm, pip\n* output_dir:\nDirectory to initialize AWS SAM application.\n* name:\nName of AWS SAM Application.\n* app_template:\nIdentifier of the managed application template to be used. Alternatively, run '$ sam init' without options for an interactive workflow.\n* no_input:\nDisable Cookiecutter prompting and accept default values defined in the cookiecutter config.\n* extra_context:\nOverride custom parameters in the template's cookiecutter.json configuration e.g. {\"customParam1\": \"customValue1\", \"customParam2\":\"customValue2\"}\n* tracing:\nEnable AWS X-Ray tracing for application.\n* application_insights:\nEnable CloudWatch Application Insights monitoring for application.\n* structured_logging:\nEnable Structured Logging for application.\n* beta_features:\nEnable/Disable beta features.\n* debug:\nTurn on debug logging to print debug message generated by AWS SAM CLI and display timestamps.\n* save_params:\nSave the parameters provided via the command line to the configuration file.", "type": "object", "properties": { "no_interactive": { @@ -48,7 +48,7 @@ "runtime": { "title": "runtime", "type": "string", - "description": "Lambda runtime for application.\n\nRuntimes: dotnet8, dotnet6, go1.x, java21, java17, java11, java8.al2, nodejs22.x, nodejs20.x, nodejs18.x, nodejs16.x, provided, provided.al2, provided.al2023, python3.9, python3.8, python3.13, python3.12, python3.11, python3.10, ruby3.4, ruby3.3, ruby3.2", + "description": "Lambda runtime for application.\n\nRuntimes: dotnet8, dotnet6, go1.x, java25, java21, java17, java11, java8.al2, nodejs22.x, nodejs20.x, nodejs18.x, nodejs16.x, provided, provided.al2, provided.al2023, python3.9, python3.8, python3.14, python3.13, python3.12, python3.11, python3.10, ruby3.4, ruby3.3, ruby3.2", "enum": [ "dotnet6", "dotnet8", @@ -56,6 +56,7 @@ "java11", "java17", "java21", + "java25", "java8.al2", "nodejs16.x", "nodejs18.x", @@ -68,6 +69,7 @@ "python3.11", "python3.12", "python3.13", + "python3.14", "python3.8", "python3.9", "ruby3.2", @@ -87,7 +89,7 @@ "base_image": { "title": "base_image", "type": "string", - "description": "Lambda base image for deploying IMAGE based package type.\n\nBase images: amazon/dotnet6-base, amazon/dotnet8-base, amazon/go-provided.al2-base, amazon/go-provided.al2023-base, amazon/go1.x-base, amazon/java11-base, amazon/java17-base, amazon/java21-base, amazon/java8.al2-base, amazon/nodejs16.x-base, amazon/nodejs18.x-base, amazon/nodejs20.x-base, amazon/nodejs22.x-base, amazon/python3.10-base, amazon/python3.11-base, amazon/python3.12-base, amazon/python3.13-base, amazon/python3.8-base, amazon/python3.9-base, amazon/ruby3.2-base, amazon/ruby3.3-base, amazon/ruby3.4-base", + "description": "Lambda base image for deploying IMAGE based package type.\n\nBase images: amazon/dotnet6-base, amazon/dotnet8-base, amazon/go-provided.al2-base, amazon/go-provided.al2023-base, amazon/go1.x-base, amazon/java11-base, amazon/java17-base, amazon/java21-base, amazon/java25-base, amazon/java8.al2-base, amazon/nodejs16.x-base, amazon/nodejs18.x-base, amazon/nodejs20.x-base, amazon/nodejs22.x-base, amazon/python3.10-base, amazon/python3.11-base, amazon/python3.12-base, amazon/python3.13-base, amazon/python3.14-base, amazon/python3.8-base, amazon/python3.9-base, amazon/ruby3.2-base, amazon/ruby3.3-base, amazon/ruby3.4-base", "enum": [ "amazon/dotnet6-base", "amazon/dotnet8-base", @@ -97,6 +99,7 @@ "amazon/java11-base", "amazon/java17-base", "amazon/java21-base", + "amazon/java25-base", "amazon/java8.al2-base", "amazon/nodejs16.x-base", "amazon/nodejs18.x-base", @@ -106,6 +109,7 @@ "amazon/python3.11-base", "amazon/python3.12-base", "amazon/python3.13-base", + "amazon/python3.14-base", "amazon/python3.8-base", "amazon/python3.9-base", "amazon/ruby3.2-base", @@ -408,7 +412,7 @@ "properties": { "parameters": { "title": "Parameters for the local invoke command", - "description": "Available parameters for the local invoke command:\n* terraform_plan_file:\nUsed for passing a custom plan file when executing the Terraform hook.\n* hook_name:\nHook package id to extend AWS SAM CLI commands functionality. \n\nExample: `terraform` to extend AWS SAM CLI commands functionality to support terraform applications. \n\nAvailable Hook Names: ['terraform']\n* skip_prepare_infra:\nSkip preparation stage when there are no infrastructure changes. Only used in conjunction with --hook-name.\n* event:\nJSON file containing event data passed to the Lambda function during invoke. If this option is not specified, no event is assumed. Pass in the value '-' to input JSON via stdin\n* no_event:\nDEPRECATED: By default no event is assumed.\n* runtime:\nLambda runtime used to invoke the function.\n\nRuntimes: dotnet8, dotnet6, go1.x, java21, java17, java11, java8.al2, nodejs22.x, nodejs20.x, nodejs18.x, nodejs16.x, provided, provided.al2, provided.al2023, python3.9, python3.8, python3.13, python3.12, python3.11, python3.10, ruby3.4, ruby3.3, ruby3.2\n* mount_symlinks:\nSpecify if symlinks at the top level of the code should be mounted inside the container. Activating this flag could allow access to locations outside of your workspace by using a symbolic link. By default symlinks are not mounted.\n* template_file:\nAWS SAM template which references built artifacts for resources in the template. (if applicable)\n* env_vars:\nJSON file containing values for Lambda function's environment variables.\n* parameter_overrides:\nString that contains AWS CloudFormation parameter overrides encoded as key=value pairs.\n* debug_port:\nWhen specified, Lambda function container will start in debug mode and will expose this port on localhost.\n* debugger_path:\nHost path to a debugger that will be mounted into the Lambda container.\n* debug_args:\nAdditional arguments to be passed to the debugger.\n* container_env_vars:\nJSON file containing additional environment variables to be set within the container when used in a debugging session locally.\n* docker_volume_basedir:\nSpecify the location basedir where the SAM template exists. If Docker is running on a remote machine, Path of the SAM template must be mounted on the Docker machine and modified to match the remote machine.\n* log_file:\nFile to capture output logs.\n* layer_cache_basedir:\nSpecify the location basedir where the lambda layers used by the template will be downloaded to.\n* skip_pull_image:\nSkip pulling down the latest Docker image for Lambda runtime.\n* docker_network:\nName or ID of an existing docker network for AWS Lambda docker containers to connect to, along with the default bridge network. If not specified, the Lambda containers will only connect to the default bridge docker network.\n* force_image_build:\nForce rebuilding the image used for invoking functions with layers.\n* shutdown:\nEmulate a shutdown event after invoke completes, to test extension handling of shutdown behavior.\n* container_host:\nHost of locally emulated Lambda container. This option is useful when the container runs on a different host than AWS SAM CLI. For example, if one wants to run AWS SAM CLI in a Docker container on macOS, this option could specify `host.docker.internal`\n* container_host_interface:\nIP address of the host network interface that container ports should bind to. Use 0.0.0.0 to bind to all interfaces.\n* add_host:\nPasses a hostname to IP address mapping to the Docker container's host file. This parameter can be passed multiple times.Example:--add-host example.com:127.0.0.1\n* invoke_image:\nContainer image URIs for invoking functions or starting api and function. One can specify the image URI used for the local function invocation (--invoke-image public.ecr.aws/sam/build-nodejs20.x:latest). One can also specify for each individual function with (--invoke-image Function1=public.ecr.aws/sam/build-nodejs20.x:latest). If a function does not have invoke image specified, the default AWS SAM CLI emulation image will be used.\n* no_memory_limit:\nRemoves the Memory limit during emulation. With this parameter, the underlying container will run without a --memory parameter\n* beta_features:\nEnable/Disable beta features.\n* debug:\nTurn on debug logging to print debug message generated by AWS SAM CLI and display timestamps.\n* profile:\nSelect a specific profile from your credential file to get AWS credentials.\n* region:\nSet the AWS Region of the service. (e.g. us-east-1)\n* save_params:\nSave the parameters provided via the command line to the configuration file.", + "description": "Available parameters for the local invoke command:\n* terraform_plan_file:\nUsed for passing a custom plan file when executing the Terraform hook.\n* hook_name:\nHook package id to extend AWS SAM CLI commands functionality. \n\nExample: `terraform` to extend AWS SAM CLI commands functionality to support terraform applications. \n\nAvailable Hook Names: ['terraform']\n* skip_prepare_infra:\nSkip preparation stage when there are no infrastructure changes. Only used in conjunction with --hook-name.\n* event:\nJSON file containing event data passed to the Lambda function during invoke. If this option is not specified, no event is assumed. Pass in the value '-' to input JSON via stdin\n* no_event:\nDEPRECATED: By default no event is assumed.\n* runtime:\nLambda runtime used to invoke the function.\n\nRuntimes: dotnet8, dotnet6, go1.x, java25, java21, java17, java11, java8.al2, nodejs22.x, nodejs20.x, nodejs18.x, nodejs16.x, provided, provided.al2, provided.al2023, python3.9, python3.8, python3.14, python3.13, python3.12, python3.11, python3.10, ruby3.4, ruby3.3, ruby3.2\n* mount_symlinks:\nSpecify if symlinks at the top level of the code should be mounted inside the container. Activating this flag could allow access to locations outside of your workspace by using a symbolic link. By default symlinks are not mounted.\n* template_file:\nAWS SAM template which references built artifacts for resources in the template. (if applicable)\n* env_vars:\nJSON file containing values for Lambda function's environment variables.\n* parameter_overrides:\nString that contains AWS CloudFormation parameter overrides encoded as key=value pairs.\n* debug_port:\nWhen specified, Lambda function container will start in debug mode and will expose this port on localhost.\n* debugger_path:\nHost path to a debugger that will be mounted into the Lambda container.\n* debug_args:\nAdditional arguments to be passed to the debugger.\n* container_env_vars:\nJSON file containing additional environment variables to be set within the container when used in a debugging session locally.\n* docker_volume_basedir:\nSpecify the location basedir where the SAM template exists. If Docker is running on a remote machine, Path of the SAM template must be mounted on the Docker machine and modified to match the remote machine.\n* log_file:\nFile to capture output logs.\n* layer_cache_basedir:\nSpecify the location basedir where the lambda layers used by the template will be downloaded to.\n* skip_pull_image:\nSkip pulling down the latest Docker image for Lambda runtime.\n* docker_network:\nName or ID of an existing docker network for AWS Lambda docker containers to connect to, along with the default bridge network. If not specified, the Lambda containers will only connect to the default bridge docker network.\n* force_image_build:\nForce rebuilding the image used for invoking functions with layers.\n* shutdown:\nEmulate a shutdown event after invoke completes, to test extension handling of shutdown behavior.\n* container_host:\nHost of locally emulated Lambda container. This option is useful when the container runs on a different host than AWS SAM CLI. For example, if one wants to run AWS SAM CLI in a Docker container on macOS, this option could specify `host.docker.internal`\n* container_host_interface:\nIP address of the host network interface that container ports should bind to. Use 0.0.0.0 to bind to all interfaces.\n* add_host:\nPasses a hostname to IP address mapping to the Docker container's host file. This parameter can be passed multiple times.Example:--add-host example.com:127.0.0.1\n* invoke_image:\nContainer image URIs for invoking functions or starting api and function. One can specify the image URI used for the local function invocation (--invoke-image public.ecr.aws/sam/build-nodejs20.x:latest). One can also specify for each individual function with (--invoke-image Function1=public.ecr.aws/sam/build-nodejs20.x:latest). If a function does not have invoke image specified, the default AWS SAM CLI emulation image will be used.\n* no_memory_limit:\nRemoves the Memory limit during emulation. With this parameter, the underlying container will run without a --memory parameter\n* beta_features:\nEnable/Disable beta features.\n* debug:\nTurn on debug logging to print debug message generated by AWS SAM CLI and display timestamps.\n* profile:\nSelect a specific profile from your credential file to get AWS credentials.\n* region:\nSet the AWS Region of the service. (e.g. us-east-1)\n* save_params:\nSave the parameters provided via the command line to the configuration file.", "type": "object", "properties": { "terraform_plan_file": { @@ -440,7 +444,7 @@ "runtime": { "title": "runtime", "type": "string", - "description": "Lambda runtime used to invoke the function.\n\nRuntimes: dotnet8, dotnet6, go1.x, java21, java17, java11, java8.al2, nodejs22.x, nodejs20.x, nodejs18.x, nodejs16.x, provided, provided.al2, provided.al2023, python3.9, python3.8, python3.13, python3.12, python3.11, python3.10, ruby3.4, ruby3.3, ruby3.2", + "description": "Lambda runtime used to invoke the function.\n\nRuntimes: dotnet8, dotnet6, go1.x, java25, java21, java17, java11, java8.al2, nodejs22.x, nodejs20.x, nodejs18.x, nodejs16.x, provided, provided.al2, provided.al2023, python3.9, python3.8, python3.14, python3.13, python3.12, python3.11, python3.10, ruby3.4, ruby3.3, ruby3.2", "enum": [ "dotnet6", "dotnet8", @@ -448,6 +452,7 @@ "java11", "java17", "java21", + "java25", "java8.al2", "nodejs16.x", "nodejs18.x", @@ -460,6 +465,7 @@ "python3.11", "python3.12", "python3.13", + "python3.14", "python3.8", "python3.9", "ruby3.2", diff --git a/tests/integration/buildcmd/test_build_cmd.py b/tests/integration/buildcmd/test_build_cmd.py index d8351d4eb5e..c46d2a732fb 100644 --- a/tests/integration/buildcmd/test_build_cmd.py +++ b/tests/integration/buildcmd/test_build_cmd.py @@ -151,7 +151,7 @@ class TestSkipBuildingFunctionsWithLocalImageUriContainer(BuildIntegBase): FUNCTION_LOGICAL_ID_IMAGE = "ImageFunction" - @parameterized.expand(["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]) + @parameterized.expand(["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]) def test_with_default_requirements(self, runtime): _tag = uuid4().hex image_uri = f"func:{_tag}" diff --git a/tests/integration/buildcmd/test_build_cmd_arm64.py b/tests/integration/buildcmd/test_build_cmd_arm64.py index cb0ff24f452..c9b4db35854 100644 --- a/tests/integration/buildcmd/test_build_cmd_arm64.py +++ b/tests/integration/buildcmd/test_build_cmd_arm64.py @@ -39,11 +39,13 @@ class TestBuildCommand_PythonFunctions_With_Specified_Architecture_arm64(BuildIn ("python3.11", "Python", False), ("python3.12", "Python", False), ("python3.13", "Python", False), + ("python3.14", "Python", False), ("python3.9", "PythonPEP600", False), ("python3.10", "PythonPEP600", False), ("python3.11", "PythonPEP600", False), ("python3.12", "PythonPEP600", False), ("python3.13", "PythonPEP600", False), + ("python3.14", "PythonPEP600", False), ("python3.9", "Python", "use_container"), ("python3.10", "Python", "use_container"), ("python3.11", "Python", "use_container"), @@ -56,6 +58,7 @@ def test_with_default_requirements_invoke_in_container(self, runtime, codeuri, u [ ("python3.12", "Python", "use_container"), ("python3.13", "Python", "use_container"), + ("python3.14", "Python", "use_container"), ], name_func=show_container_in_test_name, ) @@ -307,6 +310,34 @@ def test_building_java_in_container_with_arm64_architecture( BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_MAVEN, BuildIntegJavaBase.EXPECTED_MAVEN_DEPENDENCIES, ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLE_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLEW_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLE_KOTLIN_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_MAVEN_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_MAVEN, + BuildIntegJavaBase.EXPECTED_MAVEN_DEPENDENCIES, + ), ] ) @skipIf(SKIP_DOCKER_TESTS or SKIP_DOCKER_BUILD, SKIP_DOCKER_MESSAGE) @@ -438,6 +469,34 @@ def test_building_java_in_container_with_arm64_architecture_al2023( BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_MAVEN, BuildIntegJavaBase.EXPECTED_MAVEN_DEPENDENCIES, ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLE_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLEW_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLE_KOTLIN_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_MAVEN_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_MAVEN, + BuildIntegJavaBase.EXPECTED_MAVEN_DEPENDENCIES, + ), ] ) def test_building_java_in_process_with_arm_architecture( diff --git a/tests/integration/buildcmd/test_build_cmd_java.py b/tests/integration/buildcmd/test_build_cmd_java.py index 2b4f0a29ec8..79c40ced097 100644 --- a/tests/integration/buildcmd/test_build_cmd_java.py +++ b/tests/integration/buildcmd/test_build_cmd_java.py @@ -156,6 +156,34 @@ def test_building_java_in_container( BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_MAVEN, BuildIntegJavaBase.EXPECTED_MAVEN_DEPENDENCIES, ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLE_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLEW_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLE_KOTLIN_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_MAVEN_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_MAVEN, + BuildIntegJavaBase.EXPECTED_MAVEN_DEPENDENCIES, + ), ] ) @skipIf(SKIP_DOCKER_TESTS or SKIP_DOCKER_BUILD, SKIP_DOCKER_MESSAGE) @@ -286,6 +314,34 @@ def test_building_java_in_container_al2023( BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_MAVEN, BuildIntegJavaBase.EXPECTED_MAVEN_DEPENDENCIES, ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLE_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLEW_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_GRADLE_KOTLIN_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_GRADLE, + BuildIntegJavaBase.EXPECTED_GRADLE_DEPENDENCIES, + ), + ( + "java25", + "25", + BuildIntegJavaBase.USING_MAVEN_PATH, + BuildIntegJavaBase.EXPECTED_FILES_PROJECT_MANIFEST_MAVEN, + BuildIntegJavaBase.EXPECTED_MAVEN_DEPENDENCIES, + ), ] ) def test_building_java_in_process(self, runtime, runtime_version, code_path, expected_files, expected_dependencies): diff --git a/tests/integration/buildcmd/test_build_cmd_python.py b/tests/integration/buildcmd/test_build_cmd_python.py index 4956ab15022..24c83554352 100644 --- a/tests/integration/buildcmd/test_build_cmd_python.py +++ b/tests/integration/buildcmd/test_build_cmd_python.py @@ -79,8 +79,8 @@ def test_with_default_requirements(self, runtime, dockerfile): @parameterized.expand( [ - *[(runtime, "Dockerfile") for runtime in ["3.12", "3.13"]], - *[(runtime, "Dockerfile.production") for runtime in ["3.12", "3.13"]], + *[(runtime, "Dockerfile") for runtime in ["3.12", "3.13", "3.14"]], + *[(runtime, "Dockerfile.production") for runtime in ["3.12", "3.13", "3.14"]], ] ) @pytest.mark.al2023 @@ -308,6 +308,8 @@ def test_with_default_requirements(self): ("python3.12", "PythonPEP600"), ("python3.13", "Python"), ("python3.13", "PythonPEP600"), + ("python3.14", "Python"), + ("python3.14", "PythonPEP600"), ], ) @pytest.mark.al2023 @@ -363,6 +365,7 @@ def test_with_default_requirements_in_container(self, runtime): [ ("python3.12",), ("python3.13",), + ("python3.14",), ] ) @pytest.mark.al2023 @@ -490,6 +493,9 @@ def test_with_default_requirements(self, runtime, codeuri, use_container, archit ("python3.13", "Python", False, "x86_64"), ("python3.13", "PythonPEP600", False, "x86_64"), ("python3.13", "Python", "use_container", "x86_64"), + ("python3.14", "Python", False, "x86_64"), + ("python3.14", "PythonPEP600", False, "x86_64"), + ("python3.14", "Python", "use_container", "x86_64"), ], name_func=show_container_in_test_name, ) diff --git a/tests/integration/init/test_init_command.py b/tests/integration/init/test_init_command.py index b371e146f94..13efa024c2d 100644 --- a/tests/integration/init/test_init_command.py +++ b/tests/integration/init/test_init_command.py @@ -912,7 +912,7 @@ def test_interactive_init(self): 1 1 N -11 +13 1 1 N diff --git a/tests/integration/testdata/buildcmd/Java/gradle-kotlin/25/build.gradle.kts b/tests/integration/testdata/buildcmd/Java/gradle-kotlin/25/build.gradle.kts new file mode 100644 index 00000000000..8b766b1c662 --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/gradle-kotlin/25/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + java +} + +repositories { + mavenCentral() +} + +dependencies { + implementation("software.amazon.awssdk:annotations:2.1.0") + implementation("com.amazonaws:aws-lambda-java-core:1.1.0") +} + +java.sourceCompatibility = JavaVersion.VERSION_25 +java.targetCompatibility = JavaVersion.VERSION_25 \ No newline at end of file diff --git a/tests/integration/testdata/buildcmd/Java/gradle-kotlin/25/src/main/java/aws/example/Hello.java b/tests/integration/testdata/buildcmd/Java/gradle-kotlin/25/src/main/java/aws/example/Hello.java new file mode 100644 index 00000000000..db02d37583f --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/gradle-kotlin/25/src/main/java/aws/example/Hello.java @@ -0,0 +1,13 @@ +package aws.example; + + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; + +public class Hello { + public String myHandler(Context context) { + LambdaLogger logger = context.getLogger(); + logger.log("Function Invoked\n"); + return "Hello World"; + } +} diff --git a/tests/integration/testdata/buildcmd/Java/gradle/25/build.gradle b/tests/integration/testdata/buildcmd/Java/gradle/25/build.gradle new file mode 100644 index 00000000000..2e89372f6f3 --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/gradle/25/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'software.amazon.awssdk:annotations:2.1.0' + implementation 'com.amazonaws:aws-lambda-java-core:1.1.0' +} + +java.sourceCompatibility = JavaVersion.VERSION_25 +java.targetCompatibility = JavaVersion.VERSION_25 \ No newline at end of file diff --git a/tests/integration/testdata/buildcmd/Java/gradle/25/src/main/java/aws/example/Hello.java b/tests/integration/testdata/buildcmd/Java/gradle/25/src/main/java/aws/example/Hello.java new file mode 100644 index 00000000000..db02d37583f --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/gradle/25/src/main/java/aws/example/Hello.java @@ -0,0 +1,13 @@ +package aws.example; + + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; + +public class Hello { + public String myHandler(Context context) { + LambdaLogger logger = context.getLogger(); + logger.log("Function Invoked\n"); + return "Hello World"; + } +} diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/11/gradle/wrapper/gradle-wrapper.properties b/tests/integration/testdata/buildcmd/Java/gradlew/11/gradle/wrapper/gradle-wrapper.properties index 3fa8f862f75..bad7c2462f5 100644 --- a/tests/integration/testdata/buildcmd/Java/gradlew/11/gradle/wrapper/gradle-wrapper.properties +++ b/tests/integration/testdata/buildcmd/Java/gradlew/11/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/17/gradle/wrapper/gradle-wrapper.properties b/tests/integration/testdata/buildcmd/Java/gradlew/17/gradle/wrapper/gradle-wrapper.properties index 3fa8f862f75..bad7c2462f5 100644 --- a/tests/integration/testdata/buildcmd/Java/gradlew/17/gradle/wrapper/gradle-wrapper.properties +++ b/tests/integration/testdata/buildcmd/Java/gradlew/17/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/21/gradle/wrapper/gradle-wrapper.properties b/tests/integration/testdata/buildcmd/Java/gradlew/21/gradle/wrapper/gradle-wrapper.properties index 3fa8f862f75..bad7c2462f5 100644 --- a/tests/integration/testdata/buildcmd/Java/gradlew/21/gradle/wrapper/gradle-wrapper.properties +++ b/tests/integration/testdata/buildcmd/Java/gradlew/21/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/25/build.gradle b/tests/integration/testdata/buildcmd/Java/gradlew/25/build.gradle new file mode 100644 index 00000000000..2e89372f6f3 --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/gradlew/25/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'software.amazon.awssdk:annotations:2.1.0' + implementation 'com.amazonaws:aws-lambda-java-core:1.1.0' +} + +java.sourceCompatibility = JavaVersion.VERSION_25 +java.targetCompatibility = JavaVersion.VERSION_25 \ No newline at end of file diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/25/gradle/wrapper/gradle-wrapper.jar b/tests/integration/testdata/buildcmd/Java/gradlew/25/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000000..7f93135c49b Binary files /dev/null and b/tests/integration/testdata/buildcmd/Java/gradlew/25/gradle/wrapper/gradle-wrapper.jar differ diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/25/gradle/wrapper/gradle-wrapper.properties b/tests/integration/testdata/buildcmd/Java/gradlew/25/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000000..bad7c2462f5 --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/gradlew/25/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/25/gradlew b/tests/integration/testdata/buildcmd/Java/gradlew/25/gradlew new file mode 100755 index 00000000000..1aa94a42690 --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/gradlew/25/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/25/gradlew.bat b/tests/integration/testdata/buildcmd/Java/gradlew/25/gradlew.bat new file mode 100644 index 00000000000..6689b85beec --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/gradlew/25/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/25/src/main/java/aws/example/Hello.java b/tests/integration/testdata/buildcmd/Java/gradlew/25/src/main/java/aws/example/Hello.java new file mode 100644 index 00000000000..db02d37583f --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/gradlew/25/src/main/java/aws/example/Hello.java @@ -0,0 +1,13 @@ +package aws.example; + + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; + +public class Hello { + public String myHandler(Context context) { + LambdaLogger logger = context.getLogger(); + logger.log("Function Invoked\n"); + return "Hello World"; + } +} diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/25/src/main/java/aws/example/SecondFunction.java b/tests/integration/testdata/buildcmd/Java/gradlew/25/src/main/java/aws/example/SecondFunction.java new file mode 100644 index 00000000000..24a06e2582e --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/gradlew/25/src/main/java/aws/example/SecondFunction.java @@ -0,0 +1,13 @@ +package aws.example; + + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; + +public class SecondFunction { + public String myHandler(Context context) { + LambdaLogger logger = context.getLogger(); + logger.log("Second function Invoked\n"); + return "Hello Mars"; + } +} \ No newline at end of file diff --git a/tests/integration/testdata/buildcmd/Java/gradlew/8/gradle/wrapper/gradle-wrapper.properties b/tests/integration/testdata/buildcmd/Java/gradlew/8/gradle/wrapper/gradle-wrapper.properties index 3fa8f862f75..bad7c2462f5 100644 --- a/tests/integration/testdata/buildcmd/Java/gradlew/8/gradle/wrapper/gradle-wrapper.properties +++ b/tests/integration/testdata/buildcmd/Java/gradlew/8/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/tests/integration/testdata/buildcmd/Java/maven/25/pom.xml b/tests/integration/testdata/buildcmd/Java/maven/25/pom.xml new file mode 100644 index 00000000000..c90c116f681 --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/maven/25/pom.xml @@ -0,0 +1,35 @@ + + 4.0.0 + helloworld + HelloWorld + 1.0 + jar + A sample Hello World created for SAM CLI. + + + + com.amazonaws + aws-lambda-java-core + 1.1.0 + + + software.amazon.awssdk + annotations + 2.1.0 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.14.1 + + 25 + + + + + \ No newline at end of file diff --git a/tests/integration/testdata/buildcmd/Java/maven/25/src/main/java/aws/example/Hello.java b/tests/integration/testdata/buildcmd/Java/maven/25/src/main/java/aws/example/Hello.java new file mode 100644 index 00000000000..9f6e4084e9b --- /dev/null +++ b/tests/integration/testdata/buildcmd/Java/maven/25/src/main/java/aws/example/Hello.java @@ -0,0 +1,13 @@ +package aws.example; + + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; + +public class Hello { + public String myHandler(Context context) { + LambdaLogger logger = context.getLogger(); + logger.log("Function Invoked\n"); + return "Hello World"; + } +} \ No newline at end of file diff --git a/tests/integration/testdata/buildcmd/Python/requirements.txt b/tests/integration/testdata/buildcmd/Python/requirements.txt index a14e9494b33..91281c35ea4 100644 --- a/tests/integration/testdata/buildcmd/Python/requirements.txt +++ b/tests/integration/testdata/buildcmd/Python/requirements.txt @@ -2,7 +2,8 @@ # NOTE: Fixing to <1.20.3 as numpy1.20.3 started to use a new wheel naming convention (PEP 600) numpy<1.20.3; python_version <= '3.9' -numpy==2.1.3; python_version >= '3.10' +numpy==2.1.3; python_version >= '3.10' and python_version < '3.14' +numpy==2.3.4; python_version >= '3.14' # `cryptography` has a dependency on `pycparser` which, for some reason doesn't build inside a Docker container. # Turning this off until we resolve this issue: https://github.com/awslabs/aws-lambda-builders/issues/29 # cryptography~=2.4 diff --git a/tests/integration/testdata/buildcmd/PythonImage/requirements.txt b/tests/integration/testdata/buildcmd/PythonImage/requirements.txt index 3457c916b5f..a76c797c4d9 100644 --- a/tests/integration/testdata/buildcmd/PythonImage/requirements.txt +++ b/tests/integration/testdata/buildcmd/PythonImage/requirements.txt @@ -2,7 +2,8 @@ # NOTE: Fixing to <1.20.3 as numpy1.20.3 started to use a new wheel naming convention (PEP 600) numpy<1.20.3; python_version < '3.10' -numpy==2.1.3; python_version >= '3.10' +numpy==2.1.3; python_version >= '3.10' and python_version < '3.14' +numpy==2.3.4; python_version >= '3.14' # `cryptography` has a dependency on `pycparser` which, for some reason doesn't build inside a Docker container. # Turning this off until we resolve this issue: https://github.com/awslabs/aws-lambda-builders/issues/29 # cryptography~=2.4 diff --git a/tests/integration/testdata/buildcmd/PythonImagesWithSharedCode/requirements.txt b/tests/integration/testdata/buildcmd/PythonImagesWithSharedCode/requirements.txt index 3457c916b5f..a76c797c4d9 100644 --- a/tests/integration/testdata/buildcmd/PythonImagesWithSharedCode/requirements.txt +++ b/tests/integration/testdata/buildcmd/PythonImagesWithSharedCode/requirements.txt @@ -2,7 +2,8 @@ # NOTE: Fixing to <1.20.3 as numpy1.20.3 started to use a new wheel naming convention (PEP 600) numpy<1.20.3; python_version < '3.10' -numpy==2.1.3; python_version >= '3.10' +numpy==2.1.3; python_version >= '3.10' and python_version < '3.14' +numpy==2.3.4; python_version >= '3.14' # `cryptography` has a dependency on `pycparser` which, for some reason doesn't build inside a Docker container. # Turning this off until we resolve this issue: https://github.com/awslabs/aws-lambda-builders/issues/29 # cryptography~=2.4 diff --git a/tests/integration/testdata/buildcmd/PythonPEP600/requirements.txt b/tests/integration/testdata/buildcmd/PythonPEP600/requirements.txt index 4e7c155791d..d93df166f97 100644 --- a/tests/integration/testdata/buildcmd/PythonPEP600/requirements.txt +++ b/tests/integration/testdata/buildcmd/PythonPEP600/requirements.txt @@ -2,6 +2,8 @@ # these dependency versions use PEP600 numpy==1.20.3; python_version <= '3.9' -numpy==2.1.3; python_version >= '3.10' -greenlet==3.1.1 +numpy==2.1.3; python_version >= '3.10' and python_version < '3.14' +numpy==2.3.4; python_version >= '3.14' +greenlet==3.1.1; python_version < '3.14' +greenlet==3.2.4; python_version >= '3.14' sqlalchemy==2.0.36 diff --git a/tests/unit/commands/init/test_cli.py b/tests/unit/commands/init/test_cli.py index 1e6bfd3a9a5..3b7ad9b4dfa 100644 --- a/tests/unit/commands/init/test_cli.py +++ b/tests/unit/commands/init/test_cli.py @@ -2008,7 +2008,7 @@ def test_init_cli_generate_default_hello_world_app( request_mock.side_effect = requests.Timeout() init_options_from_manifest_mock.return_value = [ { - "directory": "python3.13/cookiecutter-aws-sam-hello-python", + "directory": "python3.14/cookiecutter-aws-sam-hello-python", "displayName": "Hello World Example", "dependencyManager": "pip", "appTemplate": "hello-world", @@ -2016,7 +2016,7 @@ def test_init_cli_generate_default_hello_world_app( "useCaseName": "Hello World Example", }, { - "directory": "java11/cookiecutter-aws-sam-eventbridge-schema-app-java-maven", + "directory": "java25/cookiecutter-aws-sam-eventbridge-schema-app-java-maven", "displayName": "EventBridge App from scratch (100+ Event Schemas): Maven", "dependencyManager": "maven", "appTemplate": "eventBridge-schema-app", @@ -2028,10 +2028,10 @@ def test_init_cli_generate_default_hello_world_app( get_preprocessed_manifest_mock.return_value = { "Hello World Example": { - "python3.13": { + "python3.14": { "Zip": [ { - "directory": "python3.13/cookiecutter-aws-sam-hello-python3.12", + "directory": "python3.14/cookiecutter-aws-sam-hello-python3.12", "displayName": "Hello World Example", "dependencyManager": "pip", "appTemplate": "hello-world", @@ -2040,7 +2040,7 @@ def test_init_cli_generate_default_hello_world_app( }, ] }, - "java11": { + "java25": { "Zip": [ { "directory": "java11/cookiecutter-aws-sam-eventbridge-schema-app-java-maven", @@ -2077,12 +2077,12 @@ def test_init_cli_generate_default_hello_world_app( generate_project_patch.assert_called_once_with( ANY, ZIP, - "python3.13", + "python3.14", "pip", ".", "test-project", True, - {"project_name": "test-project", "runtime": "python3.13", "architectures": {"value": ["x86_64"]}}, + {"project_name": "test-project", "runtime": "python3.14", "architectures": {"value": ["x86_64"]}}, False, False, False, diff --git a/tests/unit/lib/build_module/test_workflow_config.py b/tests/unit/lib/build_module/test_workflow_config.py index 5441c3f7844..0edebf231ef 100644 --- a/tests/unit/lib/build_module/test_workflow_config.py +++ b/tests/unit/lib/build_module/test_workflow_config.py @@ -17,7 +17,15 @@ def setUp(self): EventTracker.clear_trackers() @parameterized.expand( - [("python3.8",), ("python3.9",), ("python3.10",), ("python3.11",), ("python3.12",), ("python3.13",)] + [ + ("python3.8",), + ("python3.9",), + ("python3.10",), + ("python3.11",), + ("python3.12",), + ("python3.13",), + ("python3.14",), + ] ) def test_must_work_for_python(self, runtime): result = get_workflow_config(runtime, self.code_dir, self.project_dir) diff --git a/tests/unit/local/docker/test_lambda_container.py b/tests/unit/local/docker/test_lambda_container.py index dd4f6847961..3d06aa93d0c 100644 --- a/tests/unit/local/docker/test_lambda_container.py +++ b/tests/unit/local/docker/test_lambda_container.py @@ -27,11 +27,13 @@ Runtime.python311.value, Runtime.python312.value, Runtime.python313.value, + Runtime.python314.value, Runtime.dotnet6.value, Runtime.dotnet8.value, ] RUNTIMES_WITH_DEBUG_ENV_VARS_ONLY = [ + Runtime.java25.value, Runtime.java21.value, Runtime.java17.value, Runtime.java11.value, diff --git a/tests/unit/local/docker/test_lambda_debug_settings.py b/tests/unit/local/docker/test_lambda_debug_settings.py index 67914bd090c..037c5696047 100644 --- a/tests/unit/local/docker/test_lambda_debug_settings.py +++ b/tests/unit/local/docker/test_lambda_debug_settings.py @@ -10,6 +10,7 @@ Runtime.java11, Runtime.java17, Runtime.java21, + Runtime.java25, Runtime.dotnet6, Runtime.dotnet8, Runtime.go1x, @@ -23,6 +24,7 @@ Runtime.python311, Runtime.python312, Runtime.python313, + Runtime.python314, ]