diff --git a/CHANGELOG.md b/CHANGELOG.md index dc2a680..ba7dd3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.4.5] - 2025-11-03 + +### Security + +- Update to address vulnerability in [CVE-2025-54988](https://nvd.nist.gov/vuln/detail/CVE-2025-54988) + ## [3.4.4] - 2025-10-08 ### Security diff --git a/VERSION.txt b/VERSION.txt index f989260..4f5e697 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -3.4.4 +3.4.5 diff --git a/deployment/ecr/distributed-load-testing-on-aws-load-tester/jar_updater.py b/deployment/ecr/distributed-load-testing-on-aws-load-tester/jar_updater.py index cb81882..7b743c1 100644 --- a/deployment/ecr/distributed-load-testing-on-aws-load-tester/jar_updater.py +++ b/deployment/ecr/distributed-load-testing-on-aws-load-tester/jar_updater.py @@ -2,15 +2,11 @@ # SPDX-License-Identifier: Apache-2.0 #!/usr/bin/python -import os -import time -import requests - -from bzt.modules.jmeter import JarCleaner - """ -jar_updater.py updates following jar files to address CVEs on the taurus image. this is not DLT application code. -the script may be removed once taurus updates the libraries on the image. +jar_updater.py updates following jar files to address CVEs on the taurus image. +This is not DLT application code. The script may be removed once taurus updates +the libraries on the image. + Affected Jmeter jars: * json-smart v2.5.0 will be replaced with v2.5.2 * neo4j-java-driver v4.12.0 will be replaced with v5.14.0 @@ -19,7 +15,7 @@ * batik-transcoder v1.14 will be replaced with v1.17 * lets-plot-batik v2.2.1 will be replaced with 4.2.0 * commons-net v3.8.0 will be replaced with v3.9.0 - * tika-core v1.28.3 will be replaced with v1.28.4 + * tika-core v1.28.3 will be replaced with v3.2.2 (fixes CVE-2025-54988) * json-path v2.7.0 will be replaced with v2.9.0 * dnsjava v2.1.9 will be replaced with v3.6.1 * xstream will be replaced with v1.4.21 @@ -29,101 +25,297 @@ * kotlin-stdlib will be replaced with v2.1.0 * commons-lang3 will be replaced with v3.18.0 * commons-lang v2.5 - no fix available for CVE-2025-48924 -Also jmeter plugins manager will be updated to v1.11 to address CVEs and cmdrunner will be updated to v2.3 to accomodate with plugins manager. + +Also jmeter plugins manager will be updated to v1.11 to address CVEs and +cmdrunner will be updated to v2.3 to accommodate with plugins manager. """ -# these jars should be replaced with newer version in order to fix some vulnerabilities +import os +import time +from pathlib import Path +from typing import Dict, List, Optional + +import requests + +from bzt.modules.jmeter import JarCleaner + + +# Constants +MAVEN_REPO_BASE_URL = "https://repo1.maven.org/maven2/" +MAVEN_SEARCH_BASE_URL = "https://search.maven.org/remotecontent?filepath=" +JAR_FILE_EXTENSION = ".jar" +PLUGINS_MANAGER_WAIT_TIME = 5 # seconds +DOWNLOAD_CHUNK_SIZE = 8192 + +# Version constants +JMETER_VERSION = "5.6.3" +JMETER_PLUGINS_MANAGER_VERSION = "1.11" +CMD_RUNNER_VERSION = "2.3" + +# These jars should be replaced with newer version in order to fix some vulnerabilities # component name and download link in https://repo1.maven.org/maven2/ # These are Components with regards to JMETER -JMETER_COMPONENTS = { +JMETER_COMPONENTS: Dict[str, str] = { "json-smart": "net/minidev/json-smart/2.5.2/json-smart-2.5.2.jar", "neo4j-java-driver": "org/neo4j/driver/neo4j-java-driver/5.14.0/neo4j-java-driver-5.14.0.jar", "batik-script": "org/apache/xmlgraphics/batik-script/1.17/batik-script-1.17.jar", "batik-bridge": "org/apache/xmlgraphics/batik-bridge/1.17/batik-bridge-1.17.jar", "batik-transcoder": "org/apache/xmlgraphics/batik-transcoder/1.17/batik-transcoder-1.17.jar", - "lets-plot-batik": "org/jetbrains/lets-plot/lets-plot-batik/4.2.0/lets-plot-batik-4.2.0.jar", + "lets-plot-batik": "org/jetbrains/lets-plot/lets-plot-batik/4.2.0/lets-plot-batik-4.2.0.jar", "commons-net": "commons-net/commons-net/3.9.0/commons-net-3.9.0.jar", - "tika-core": "org/apache/tika/tika-core/1.28.4/tika-core-1.28.4.jar", + "tika-core": "org/apache/tika/tika-core/3.2.2/tika-core-3.2.2.jar", "json-path": "com/jayway/jsonpath/json-path/2.9.0/json-path-2.9.0.jar", "dnsjava": "dnsjava/dnsjava/3.6.1/dnsjava-3.6.1.jar", - "xstream":"com/thoughtworks/xstream/xstream/1.4.21/xstream-1.4.21.jar", + "xstream": "com/thoughtworks/xstream/xstream/1.4.21/xstream-1.4.21.jar", "http2-hpack": "org/eclipse/jetty/http2/http2-hpack/11.0.26/http2-hpack-11.0.26.jar", "jetty-http": "org/eclipse/jetty/jetty-http/12.0.25/jetty-http-12.0.25.jar", "http2-common": "org/eclipse/jetty/http2/http2-common/11.0.26/http2-common-11.0.26.jar", "kotlin-stdlib": "org/jetbrains/kotlin/kotlin-stdlib/2.1.0/kotlin-stdlib-2.1.0.jar", "commons-lang3": "org/apache/commons/commons-lang3/3.18.0/commons-lang3-3.18.0.jar", - } -JMETER_VERSION = "5.6.3" -JMETER_PLUGINS_MANAGER_VERSION = "1.11" -CMD_RUNNER_VERSION = "2.3" -# To add other platform, and what to update, add affected components and version HERE -def download(url, target_path): - response = requests.get(url, stream=True) - response.raise_for_status() - # Write the content to a file - with open(target_path, 'wb') as file: - for chunk in response.iter_content(chunk_size=8192): - file.write(chunk) +# Jars to remove from the container +JARS_TO_REMOVE: List[str] = [ + "tika-parsers-1.28.5.jar" +] + + +def validate_components(components: Dict[str, str]) -> None: + """ + Validate the structure of components dictionary. + + Args: + components: Dictionary mapping component names to Maven paths + + Raises: + ValueError: If components dictionary is invalid + """ + if not components: + raise ValueError("Components dictionary cannot be empty") + + for name, path in components.items(): + if not name or not isinstance(name, str): + raise ValueError(f"Invalid component name: {name}") + if not path or not isinstance(path, str): + raise ValueError(f"Invalid path for component {name}: {path}") + if not path.endswith(JAR_FILE_EXTENSION): + raise ValueError(f"Component path must end with {JAR_FILE_EXTENSION}: {path}") + + +def build_maven_url(maven_path: str) -> str: + """ + Build a complete Maven repository URL from a relative path. + + Args: + maven_path: Relative path to the artifact in Maven repository + + Returns: + Complete URL to download the artifact + """ + return MAVEN_REPO_BASE_URL + maven_path + + +def build_plugins_manager_url(artifact: str, group_path: str, version: str) -> str: + """ + Build a Maven search URL for plugins manager artifacts. + + Args: + artifact: Artifact name (e.g., 'jmeter-plugins-manager') + group_path: Group path (e.g., 'kg/apc') + version: Version string + + Returns: + Complete URL to download the artifact + """ + return f"{MAVEN_SEARCH_BASE_URL}{group_path}/{artifact}/{version}/{artifact}-{version}.jar" + + +def download(url: str, target_path: str) -> None: + """ + Download a file from a URL to a target path. + + Args: + url: URL to download from + target_path: Local file path to save the downloaded content + + Raises: + requests.RequestException: If download fails + IOError: If file write fails + """ + try: + response = requests.get(url, stream=True) + response.raise_for_status() + + # Ensure parent directory exists + Path(target_path).parent.mkdir(parents=True, exist_ok=True) + + # Write the content to a file + with open(target_path, 'wb') as file: + for chunk in response.iter_content(chunk_size=DOWNLOAD_CHUNK_SIZE): + file.write(chunk) + except requests.RequestException as exc: + raise requests.RequestException(f"Failed to download from {url}: {exc}") from exc + except IOError as exc: + raise IOError(f"Failed to write file to {target_path}: {exc}") from exc + class Platform: - def __init__(self, platform, version, affected_components=None): + """ + Manages platform-specific jar updates and plugin installations. + + Attributes: + obj: Platform-specific object (e.g., JMeter instance) + lib_dir: Path to the platform's library directory + affected_components: Dictionary of components to update + """ + + def __init__( + self, + platform: str, + version: str, + affected_components: Optional[Dict[str, str]] = None + ): + """ + Initialize Platform with specified configuration. + + Args: + platform: Platform name (e.g., 'JMeter', 'Gatling') + version: Platform version string + affected_components: Dictionary mapping component names to Maven paths + + Raises: + ImportError: If platform module cannot be imported + AttributeError: If platform class cannot be found + """ # To dynamically import from bzt.modules.gatling import Platform Objects - module = __import__('bzt.modules.' + platform.lower(), fromlist=[platform]) + module = __import__(f'bzt.modules.{platform.lower()}', fromlist=[platform]) # Object created for the platform i.e JMeter(), Gatling() self.obj = getattr(module, platform)() - self.lib_dir = f"/root/.bzt/{platform.lower()}-taurus/{version}/lib" - self.affected_components = affected_components + self.lib_dir = Path(f"/root/.bzt/{platform.lower()}-taurus/{version}/lib") + self.affected_components = affected_components or {} - def install_jmeter_plugins(self): - plugins_mgr_link = f'https://search.maven.org/remotecontent?filepath=kg/apc/jmeter-plugins-manager/{JMETER_PLUGINS_MANAGER_VERSION}/jmeter-plugins-manager-{JMETER_PLUGINS_MANAGER_VERSION}.jar' - command_runner_link = f'https://search.maven.org/remotecontent?filepath=kg/apc/cmdrunner/{CMD_RUNNER_VERSION}/cmdrunner-{CMD_RUNNER_VERSION}.jar' + def install_jmeter_plugins(self) -> None: + """ + Install JMeter plugins manager and command runner. + + Downloads and installs the plugins manager and command runner, + then performs cleanup of duplicate jars. + + Raises: + Exception: If plugin installation fails + """ + plugins_mgr_link = build_plugins_manager_url( + 'jmeter-plugins-manager', + 'kg/apc', + JMETER_PLUGINS_MANAGER_VERSION + ) + command_runner_link = build_plugins_manager_url( + 'cmdrunner', + 'kg/apc', + CMD_RUNNER_VERSION + ) + plugins_mgr_name = os.path.basename(plugins_mgr_link) command_runner_name = os.path.basename(command_runner_link) - pm_installer_path = os.path.join(self.lib_dir, 'ext', plugins_mgr_name) - command_runner_path = os.path.join(self.lib_dir, command_runner_name) - download(plugins_mgr_link, pm_installer_path) - download(command_runner_link, command_runner_path) - self.obj._JMeter__install_plugins_manager(pm_installer_path) + + pm_installer_path = self.lib_dir / 'ext' / plugins_mgr_name + command_runner_path = self.lib_dir / command_runner_name + + self.obj.log.info(f"Installing JMeter plugins manager version {JMETER_PLUGINS_MANAGER_VERSION}") + download(plugins_mgr_link, str(pm_installer_path)) + download(command_runner_link, str(command_runner_path)) + + self.obj._JMeter__install_plugins_manager(str(pm_installer_path)) + cleaner = JarCleaner(self.obj.log) - cleaner.clean(os.path.join(self.lib_dir, 'ext')) - - def _install_plugins(self): - dest = os.path.dirname(self.lib_dir) - plugins_manager_cmd = os.path.join(dest, 'bin', 'PluginsManagerCMD.sh') - cmd_line = [plugins_manager_cmd, 'install', ",".join([])] - - try: - out, err = self.obj.call(cmd_line) - except Exception as exc: - raise Exception(f"Failed to install plugins : {exc}") #NOSONAR - - self.log.debug("Install plugins: %s / %s", out, err) - - if out and "Plugins manager will apply some modifications" in out: - time.sleep(5) + cleaner.clean(str(self.lib_dir / 'ext')) - def update_jars(self): - jar_files = [_file for _file in os.listdir(self.lib_dir) if _file.endswith(".jar")] + def update_jars(self) -> None: + """ + Update affected jar files with newer versions. + + Scans the library directory for jars that need updating based on + component names, downloads new versions, and cleans up old versions. + + Raises: + ValueError: If affected_components is empty + requests.RequestException: If download fails + """ + if not self.affected_components: + self.obj.log.warning("No components to update") + return + + self.obj.log.info(f"Updating jars in {self.lib_dir}") + + jar_files = [ + _file for _file in os.listdir(str(self.lib_dir)) + if _file.endswith(JAR_FILE_EXTENSION) + ] + + updated_count = 0 for jar_file in jar_files: for comp_name in self.affected_components: if jar_file.startswith(comp_name): - download_link = "https://repo1.maven.org/maven2/" + self.affected_components[comp_name] - target_path = os.path.join(self.lib_dir, os.path.basename(download_link)) - download(download_link, target_path) + download_link = build_maven_url(self.affected_components[comp_name]) + target_path = self.lib_dir / os.path.basename(download_link) + + self.obj.log.info(f"Updating {comp_name}: {jar_file} -> {target_path.name}") + download(download_link, str(target_path)) + updated_count += 1 break - + + self.obj.log.info(f"Updated {updated_count} jar files") + cleaner = JarCleaner(self.obj.log) - cleaner.clean(self.lib_dir) + cleaner.clean(str(self.lib_dir)) + def remove_jars(self, jars_to_remove: List[str]) -> None: + """ + Remove specified jar files from the lib directory. + + Args: + jars_to_remove: List of jar filenames to remove + """ + if not jars_to_remove: + self.obj.log.debug("No jars to remove") + return + + for jar_name in jars_to_remove: + jar_path = self.lib_dir / jar_name + if jar_path.exists(): + jar_path.unlink() + self.obj.log.info(f"Removed jar file: {jar_name}") + else: + self.obj.log.debug(f"Jar file not found, skipping: {jar_name}") -if __name__ == "__main__": - # update this map to add other platforms - platform_components_map = {"JMeter": (JMETER_VERSION, JMETER_COMPONENTS)} - for key, value in platform_components_map.items(): - platform = Platform(key, value[0], value[1]) + +def main() -> None: + """ + Main entry point for jar updater script. + + Processes all configured platforms, updates their jars, removes obsolete jars, + and installs platform-specific plugins as needed. + """ + # Validate configuration before processing + validate_components(JMETER_COMPONENTS) + + # Update this map to add other platforms + platform_components_map = { + "JMeter": (JMETER_VERSION, JMETER_COMPONENTS) + } + + for platform_name, (version, components) in platform_components_map.items(): + print(f"Processing platform: {platform_name} version {version}") + + platform = Platform(platform_name, version, components) platform.update_jars() - if key == "JMeter": + platform.remove_jars(JARS_TO_REMOVE) + + if platform_name == "JMeter": platform.install_jmeter_plugins() - \ No newline at end of file + + print(f"Completed processing for {platform_name}") + + +if __name__ == "__main__": + main() diff --git a/solution-manifest.yaml b/solution-manifest.yaml index 0b913e5..5840b4c 100644 --- a/solution-manifest.yaml +++ b/solution-manifest.yaml @@ -1,6 +1,6 @@ id: SO0062 name: distributed-load-testing-on-aws -version: v3.4.4 +version: v3.4.5 cloudformation_templates: - template: distributed-load-testing-on-aws.template main_template: true diff --git a/source/api-services/package-lock.json b/source/api-services/package-lock.json index 0249285..b40f002 100644 --- a/source/api-services/package-lock.json +++ b/source/api-services/package-lock.json @@ -1,12 +1,12 @@ { "name": "api-services", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "api-services", - "version": "3.4.3", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-cloudformation": "^3.758.0", @@ -34,7 +34,7 @@ } }, "../solution-utils": { - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "axios": "^1.8.3", diff --git a/source/api-services/package.json b/source/api-services/package.json index 0770f4b..4f02f85 100644 --- a/source/api-services/package.json +++ b/source/api-services/package.json @@ -1,6 +1,6 @@ { "name": "api-services", - "version": "3.4.4", + "version": "3.4.5", "description": "REST API micro services", "repository": { "type": "git", diff --git a/source/console/package-lock.json b/source/console/package-lock.json index 48f1c31..77a3083 100644 --- a/source/console/package-lock.json +++ b/source/console/package-lock.json @@ -1,12 +1,12 @@ { "name": "distributed-load-testing-on-aws-ui", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "distributed-load-testing-on-aws-ui", - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "@aws-amplify/pubsub": "^6.0.16", @@ -39,7 +39,7 @@ } }, "../solution-utils": { - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "axios": "^1.8.3", diff --git a/source/console/package.json b/source/console/package.json index 6e5cb0d..b49fa65 100644 --- a/source/console/package.json +++ b/source/console/package.json @@ -1,6 +1,6 @@ { "name": "distributed-load-testing-on-aws-ui", - "version": "3.4.4", + "version": "3.4.5", "private": true, "license": "Apache-2.0", "author": { @@ -57,7 +57,7 @@ "axios": "^1.8.3", "react-refresh": "0.14.0", "fast-xml-parser": "4.4.1", - "webpack-dev-server":"5.2.2", + "webpack-dev-server": "5.2.2", "form-data": "3.0.4" }, "readme": "./README.md", @@ -96,4 +96,4 @@ "@babel/preset-react" ] } -} \ No newline at end of file +} diff --git a/source/custom-resource/package-lock.json b/source/custom-resource/package-lock.json index 22dad1a..8153b80 100644 --- a/source/custom-resource/package-lock.json +++ b/source/custom-resource/package-lock.json @@ -1,12 +1,12 @@ { "name": "custom-resource", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "custom-resource", - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-dynamodb": "^3.758.0", @@ -27,7 +27,7 @@ } }, "../solution-utils": { - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "axios": "^1.8.3", diff --git a/source/custom-resource/package.json b/source/custom-resource/package.json index cfd271e..d80cdc4 100644 --- a/source/custom-resource/package.json +++ b/source/custom-resource/package.json @@ -1,6 +1,6 @@ { "name": "custom-resource", - "version": "3.4.4", + "version": "3.4.5", "description": "cfn custom resources for distributed load testing on AWS workflow", "repository": { "type": "git", diff --git a/source/infrastructure/cdk.json b/source/infrastructure/cdk.json index 42896eb..4a2e33e 100644 --- a/source/infrastructure/cdk.json +++ b/source/infrastructure/cdk.json @@ -4,7 +4,7 @@ "@aws-cdk/core:stackRelativeExports": false, "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": false, "solutionId": "SO0062", - "solutionVersion": "custom-v3.4.4", + "solutionVersion": "custom-v3.4.5", "solutionName": "distributed-load-testing-on-aws" } } diff --git a/source/infrastructure/package-lock.json b/source/infrastructure/package-lock.json index 821321c..b09c7cc 100644 --- a/source/infrastructure/package-lock.json +++ b/source/infrastructure/package-lock.json @@ -1,12 +1,12 @@ { "name": "distributed-load-testing-on-aws-infrastructure", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "distributed-load-testing-on-aws-infrastructure", - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "source-map-support": "^0.5.16" diff --git a/source/infrastructure/package.json b/source/infrastructure/package.json index 925a309..6b591b6 100644 --- a/source/infrastructure/package.json +++ b/source/infrastructure/package.json @@ -1,6 +1,6 @@ { "name": "distributed-load-testing-on-aws-infrastructure", - "version": "3.4.4", + "version": "3.4.5", "author": { "name": "Amazon Web Services", "url": "https://aws.amazon.com/solutions" diff --git a/source/metrics-utils/package-lock.json b/source/metrics-utils/package-lock.json index 52226de..8c359b9 100644 --- a/source/metrics-utils/package-lock.json +++ b/source/metrics-utils/package-lock.json @@ -1,12 +1,12 @@ { "name": "metrics-utils", - "version": "3.4.3", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "metrics-utils", - "version": "3.4.3", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-cloudwatch": "^3.637.0", diff --git a/source/metrics-utils/package.json b/source/metrics-utils/package.json index 248ec0c..da3a52c 100644 --- a/source/metrics-utils/package.json +++ b/source/metrics-utils/package.json @@ -1,6 +1,6 @@ { "name": "metrics-utils", - "version": "3.4.3", + "version": "3.4.5", "main": "index.ts", "license": "Apache-2.0", "description": "Distributed Load Testing on AWS Ops Metrics", diff --git a/source/package-lock.json b/source/package-lock.json index c3f5d9b..270cd7d 100644 --- a/source/package-lock.json +++ b/source/package-lock.json @@ -1,12 +1,12 @@ { "name": "source", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "source", - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "devDependencies": { "@types/node": "^18.8.0", diff --git a/source/package.json b/source/package.json index 6550fbb..70327a6 100644 --- a/source/package.json +++ b/source/package.json @@ -1,6 +1,6 @@ { "name": "source", - "version": "3.4.4", + "version": "3.4.5", "private": true, "description": "ESLint and prettier dependencies to be used within the solution", "license": "Apache-2.0", @@ -45,4 +45,4 @@ "eslint-plugin-react": "^7.32.2", "prettier": "~2.7.1" } -} \ No newline at end of file +} diff --git a/source/real-time-data-publisher/package-lock.json b/source/real-time-data-publisher/package-lock.json index ae55027..2d58c23 100644 --- a/source/real-time-data-publisher/package-lock.json +++ b/source/real-time-data-publisher/package-lock.json @@ -1,12 +1,12 @@ { "name": "real-time-data-publisher", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "real-time-data-publisher", - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-iot-data-plane": "^3.758.0", @@ -22,7 +22,7 @@ } }, "../solution-utils": { - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "axios": "^1.8.3", diff --git a/source/real-time-data-publisher/package.json b/source/real-time-data-publisher/package.json index e09e225..c6d2e95 100644 --- a/source/real-time-data-publisher/package.json +++ b/source/real-time-data-publisher/package.json @@ -1,6 +1,6 @@ { "name": "real-time-data-publisher", - "version": "3.4.4", + "version": "3.4.5", "description": "Publishes real time test data to an IoT endpoint", "repository": { "type": "git", diff --git a/source/results-parser/package-lock.json b/source/results-parser/package-lock.json index 5a09311..f18caab 100644 --- a/source/results-parser/package-lock.json +++ b/source/results-parser/package-lock.json @@ -1,12 +1,12 @@ { "name": "results-parser", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "results-parser", - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-cloudwatch": "^3.758.0", @@ -27,7 +27,7 @@ } }, "../solution-utils": { - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "axios": "^1.8.3", diff --git a/source/results-parser/package.json b/source/results-parser/package.json index ee5cbe6..99feba5 100644 --- a/source/results-parser/package.json +++ b/source/results-parser/package.json @@ -1,6 +1,6 @@ { "name": "results-parser", - "version": "3.4.4", + "version": "3.4.5", "description": "result parser for indexing xml test results to DynamoDB", "repository": { "type": "git", diff --git a/source/solution-utils/package-lock.json b/source/solution-utils/package-lock.json index e2c00e3..1121b4c 100644 --- a/source/solution-utils/package-lock.json +++ b/source/solution-utils/package-lock.json @@ -1,12 +1,12 @@ { "name": "solution-utils", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "solution-utils", - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "axios": "^1.8.3", diff --git a/source/solution-utils/package.json b/source/solution-utils/package.json index 1158fba..a95bbad 100644 --- a/source/solution-utils/package.json +++ b/source/solution-utils/package.json @@ -1,6 +1,6 @@ { "name": "solution-utils", - "version": "3.4.4", + "version": "3.4.5", "description": "Utilities package for Distributed Load Testing on AWS", "license": "Apache-2.0", "author": { diff --git a/source/task-canceler/package-lock.json b/source/task-canceler/package-lock.json index 0a9c284..5b7ff5c 100644 --- a/source/task-canceler/package-lock.json +++ b/source/task-canceler/package-lock.json @@ -1,12 +1,12 @@ { "name": "task-canceler", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "task-canceler", - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-dynamodb": "^3.758.0", @@ -22,7 +22,7 @@ } }, "../solution-utils": { - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "axios": "^1.8.3", diff --git a/source/task-canceler/package.json b/source/task-canceler/package.json index 7c4d31e..e83b8bb 100644 --- a/source/task-canceler/package.json +++ b/source/task-canceler/package.json @@ -1,6 +1,6 @@ { "name": "task-canceler", - "version": "3.4.4", + "version": "3.4.5", "description": "Triggered by api-services lambda function, cancels ecs tasks", "repository": { "type": "git", diff --git a/source/task-runner/package-lock.json b/source/task-runner/package-lock.json index 5337d80..695b895 100644 --- a/source/task-runner/package-lock.json +++ b/source/task-runner/package-lock.json @@ -1,12 +1,12 @@ { "name": "task-runner", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "task-runner", - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-cloudwatch": "^3.758.0", @@ -26,7 +26,7 @@ } }, "../solution-utils": { - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "axios": "^1.8.3", diff --git a/source/task-runner/package.json b/source/task-runner/package.json index 21f13b8..80b19c1 100644 --- a/source/task-runner/package.json +++ b/source/task-runner/package.json @@ -1,6 +1,6 @@ { "name": "task-runner", - "version": "3.4.4", + "version": "3.4.5", "description": "Triggered by Step Functions, runs ecs task Definitions", "repository": { "type": "git", diff --git a/source/task-status-checker/package-lock.json b/source/task-status-checker/package-lock.json index 470a0a7..3bc0329 100644 --- a/source/task-status-checker/package-lock.json +++ b/source/task-status-checker/package-lock.json @@ -1,12 +1,12 @@ { "name": "task-status-checker", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "task-status-checker", - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-dynamodb": "^3.758.0", @@ -23,7 +23,7 @@ } }, "../solution-utils": { - "version": "3.4.4", + "version": "3.4.5", "license": "Apache-2.0", "dependencies": { "axios": "^1.8.3", diff --git a/source/task-status-checker/package.json b/source/task-status-checker/package.json index 0439920..81ad3f6 100644 --- a/source/task-status-checker/package.json +++ b/source/task-status-checker/package.json @@ -1,6 +1,6 @@ { "name": "task-status-checker", - "version": "3.4.4", + "version": "3.4.5", "description": "checks if tasks are running or not", "repository": { "type": "git",