From 16015d3fda07ea2d2fef33eb9bf4159ca1651990 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Apr 2025 05:41:14 -0500 Subject: [PATCH 1/3] wip --- .evergreen/config.yml | 108 ---------------- .evergreen/generated_configs/functions.yml | 138 +++++++++++++++++++++ .evergreen/scripts/generate_config.py | 110 ++++++++++++++++ 3 files changed, 248 insertions(+), 108 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index d83a5620df..46c86103ad 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -29,114 +29,6 @@ include: - filename: .evergreen/generated_configs/tasks.yml - filename: .evergreen/generated_configs/variants.yml -functions: - "fetch source": - # Executes clone and applies the submitted patch, if any - - command: git.get_project - params: - directory: "src" - # Applies the subitted patch, if any - # Deprecated. Should be removed. But still needed for certain agents (ZAP) - - command: git.apply_patch - - "setup system": - # Make an evergreen expansion file with dynamic values - - command: subprocess.exec - params: - include_expansions_in_env: ["is_patch", "project", "version_id"] - binary: bash - working_dir: "src" - args: - - .evergreen/scripts/setup-system.sh - # Load the expansion file to make an evergreen variable with the current unique version - - command: expansions.update - params: - file: src/expansion.yml - - "upload test results": - - command: attach.results - params: - file_location: "${DRIVERS_TOOLS}/results.json" - - command: attach.xunit_results - params: - file: "src/xunit-results/TEST-*.xml" - - "run server": - - command: subprocess.exec - params: - binary: bash - working_dir: "src" - include_expansions_in_env: [VERSION, TOPOLOGY, AUTH, SSL, ORCHESTRATION_FILE, PYTHON_BINARY, PYTHON_VERSION, - STORAGE_ENGINE, REQUIRE_API_VERSION, DRIVERS_TOOLS, TEST_CRYPT_SHARED, AUTH_AWS, LOAD_BALANCER, LOCAL_ATLAS] - args: [.evergreen/just.sh, run-server, "${TEST_NAME}"] - - command: expansions.update - params: - file: ${DRIVERS_TOOLS}/mo-expansion.yml - - "run just script": - - command: subprocess.exec - type: test - params: - include_expansions_in_env: [AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN] - binary: bash - working_dir: "src" - args: [.evergreen/just.sh, "${JUSTFILE_TARGET}"] - - "run tests": - - command: subprocess.exec - type: test - params: - include_expansions_in_env: [AUTH, SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, - AWS_SESSION_TOKEN, COVERAGE, PYTHON_BINARY, LIBMONGOCRYPT_URL, MONGODB_URI, PYTHON_VERSION, - DISABLE_TEST_COMMANDS, GREEN_FRAMEWORK, NO_EXT, COMPRESSORS, MONGODB_API_VERSION, DEBUG_LOG, - ORCHESTRATION_FILE, OCSP_SERVER_TYPE, VERSION] - binary: bash - working_dir: "src" - args: [.evergreen/just.sh, setup-tests, "${TEST_NAME}", "${SUB_TEST_NAME}"] - - command: subprocess.exec - type: test - params: - working_dir: "src" - binary: bash - args: [.evergreen/just.sh, run-tests] - - "cleanup": - - command: subprocess.exec - params: - binary: bash - working_dir: "src" - args: - - .evergreen/scripts/cleanup.sh - - "teardown system": - - command: subprocess.exec - params: - binary: bash - working_dir: "src" - args: [.evergreen/just.sh, teardown-tests] - - command: subprocess.exec - params: - binary: bash - working_dir: "src" - args: - - ${DRIVERS_TOOLS}/.evergreen/teardown.sh - - "assume ec2 role": - - command: ec2.assume_role - params: - role_arn: ${aws_test_secrets_role} - duration_seconds: 3600 - - "attach benchmark test results": - - command: attach.results - params: - file_location: src/report.json - - "send dashboard data": - - command: perf.send - params: - file: src/results.json - pre: - func: "fetch source" - func: "setup system" diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index afd7f11374..f9436c66fa 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -1,4 +1,24 @@ functions: + # Assume ec2 role + assume ec2 role: + - command: ec2.assume_role + params: + role_arn: ${aws_test_secrets_role} + duration_seconds: 3600 + + # Attach benchmark test results + attach benchmark test results: + - command: attach.results + params: + file_location: src/report.json + + # Cleanup + cleanup: + - command: subprocess.exec + params: + args: + - .evergreen/scripts/cleanup.sh + # Download and merge coverage download and merge coverage: - command: ec2.assume_role @@ -56,6 +76,115 @@ functions: optional: "true" type: setup + # Fetch source + fetch source: + - command: git.get_project + params: + directory: src + + # Run just script + run just script: + - command: subprocess.exec + params: + args: + - .evergreen/just.sh + - ${JUSTFILE_TARGET} + include_expansions_in_env: + - AWS_ACCESS_KEY_ID + - AWS_SECRET_ACCESS_KEY + - AWS_SESSION_TOKEN + + # Run server + run server: + - command: subprocess.exec + params: + args: + - .evergreen/just.sh + - run-server + - ${TEST_NAME} + include_expansions_in_env: + - VERSION + - TOPOLOGY + - AUTH + - SSL + - ORCHESTRATION_FILE + - PYTHON_BINARY + - PYTHON_VERSION + - STORAGE_ENGINE + - REQUIRE_API_VERSION + - DRIVERS_TOOLS + - TEST_CRYPT_SHARED + - AUTH_AWS + - LOAD_BALANCER + - LOCAL_ATLAS + - command: expansions.update + params: + file: ${DRIVERS_TOOLS}/mo-expansion.yml + + # Run tests + run tests: + - command: subprocess.exec + params: + args: + - .evergreen/just.sh + - setup-tests + - ${TEST_NAME} + - ${SUB_TEST_NAME} + include_expansions_in_env: + - AUTH + - SSL + - AWS_ACCESS_KEY_ID + - AWS_SECRET_ACCESS_KEY + - AWS_SESSION_TOKEN + - COVERAGE + - PYTHON_BINARY + - LIBMONGOCRYPT_URL + - MONGODB_URI + - PYTHON_VERSION + - DISABLE_TEST_COMMANDS + - GREEN_FRAMEWORK + - NO_EXT + - COMPRESSORS + - MONGODB_API_VERSION + - DEBUG_LOG + - ORCHESTRATION_FILE + - OCSP_SERVER_TYPE + - VERSION + - command: subprocess.exec + params: + args: + - .evergreen/just.sh + - run-tests + + # Setup system + setup system: + - command: subprocess.exec + params: + binary: bash + args: + - .evergreen/scripts/setup-system.sh + working_dir: src + include_expansions_in_env: + - is_patch + - project + - version_id + type: test + - command: expansions.update + params: + file: src/expansion.yml + + # Teardown system + teardown system: + - command: subprocess.exec + params: + args: + - .evergreen/just.sh + - teardown-tests + - command: subprocess.exec + params: + args: + - ${DRIVERS_TOOLS}/.evergreen/teardown.sh + # Upload coverage upload coverage: - command: ec2.assume_role @@ -115,3 +244,12 @@ functions: display_name: drivers-tools-logs.tar.gz optional: "true" type: setup + + # Upload test results + upload test results: + - command: attach.results + params: + file_location: ${DRIVERS_TOOLS}/results.json + - command: attach.xunit_results + params: + file: src/xunit-results/TEST-*.xml diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 5a5f6e93db..9c6159ea55 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -13,7 +13,11 @@ EvgCommandType, FunctionCall, archive_targz_pack, + attach_results, + attach_xunit_results, ec2_assume_role, + expansions_update, + git_get_project, s3_put, subprocess_exec, ) @@ -1291,6 +1295,112 @@ def create_upload_mo_artifacts_func(): return "upload mo artifacts", cmds +def create_fetch_source_func(): + # Executes clone and applies the submitted patch, if any. + cmd = git_get_project(directory="src") + return "fetch source", [cmd] + + +def create_setup_system_func(): + # Make an evergreen expansion file with dynamic values. + includes = ["is_patch", "project", "version_id"] + args = [".evergreen/scripts/setup-system.sh"] + setup_cmd = get_subprocess_exec(include_expansions_in_env=includes, args=args) + # Load the expansion file to make an evergreen variable with the current unique version. + expansion_cmd = expansions_update(file="src/expansion.yml") + return "setup system", [setup_cmd, expansion_cmd] + + +def create_upload_test_results_func(): + results_cmd = attach_results(file_location="${DRIVERS_TOOLS}/results.json") + xresults_cmd = attach_xunit_results(file="src/xunit-results/TEST-*.xml") + return "upload test results", [results_cmd, xresults_cmd] + + +def create_run_server_func(): + includes = [ + "VERSION", + "TOPOLOGY", + "AUTH", + "SSL", + "ORCHESTRATION_FILE", + "PYTHON_BINARY", + "PYTHON_VERSION", + "STORAGE_ENGINE", + "REQUIRE_API_VERSION", + "DRIVERS_TOOLS", + "TEST_CRYPT_SHARED", + "AUTH_AWS", + "LOAD_BALANCER", + "LOCAL_ATLAS", + ] + args = [".evergreen/just.sh", "run-server", "${TEST_NAME}"] + sub_cmd = subprocess_exec(include_expansions_in_env=includes, args=args) + expansion_cmd = expansions_update(file="${DRIVERS_TOOLS}/mo-expansion.yml") + return "run server", [sub_cmd, expansion_cmd] + + +def create_run_just_script_func(): + includes = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN"] + args = [".evergreen/just.sh", "${JUSTFILE_TARGET}"] + cmd = subprocess_exec(include_expansions_in_env=includes, args=args) + return "run just script", [cmd] + + +def create_run_tests_func(): + includes = [ + "AUTH", + "SSL", + "AWS_ACCESS_KEY_ID", + "AWS_SECRET_ACCESS_KEY", + "AWS_SESSION_TOKEN", + "COVERAGE", + "PYTHON_BINARY", + "LIBMONGOCRYPT_URL", + "MONGODB_URI", + "PYTHON_VERSION", + "DISABLE_TEST_COMMANDS", + "GREEN_FRAMEWORK", + "NO_EXT", + "COMPRESSORS", + "MONGODB_API_VERSION", + "DEBUG_LOG", + "ORCHESTRATION_FILE", + "OCSP_SERVER_TYPE", + "VERSION", + ] + args = [".evergreen/just.sh", "setup-tests", "${TEST_NAME}", "${SUB_TEST_NAME}"] + setup_cmd = subprocess_exec(include_expansions_in_env=includes, args=args) + test_cmd = subprocess_exec(args=[".evergreen/just.sh", "run-tests"]) + return "run tests", [setup_cmd, test_cmd] + + +def create_cleanup_func(): + cmd = subprocess_exec(args=[".evergreen/scripts/cleanup.sh"]) + return "cleanup", [cmd] + + +def create_teardown_system_func(): + tests_cmd = subprocess_exec(args=[".evergreen/just.sh", "teardown-tests"]) + drivers_cmd = subprocess_exec(args=["${DRIVERS_TOOLS}/.evergreen/teardown.sh"]) + return "teardown system", [tests_cmd, drivers_cmd] + + +def create_assume_ec2_role_func(): + cmd = ec2_assume_role(role_arn="${aws_test_secrets_role}", duration_seconds=3600) + return "assume ec2 role", [cmd] + + +def create_attach_benchmark_test_results_func(): + cmd = attach_results(file_location="src/report.json") + return "attach benchmark test results", [cmd] + + +# def create_send_dashboard_data_func(): +# cmd = perf_send(file="src/results.json") +# return "send dashboard data", [cmd] + + ################## # Generate Config ################## From ec62534049708994afeaef0de0bab65bb6ddec10 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 10 Apr 2025 15:50:00 -0500 Subject: [PATCH 2/3] fix usage --- .evergreen/generated_configs/functions.yml | 23 ++++++++++++++++++++++ .evergreen/scripts/generate_config.py | 17 ++++++++-------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index c036a9ba9b..ed6845d503 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -16,8 +16,11 @@ functions: cleanup: - command: subprocess.exec params: + binary: bash args: - .evergreen/scripts/cleanup.sh + working_dir: src + type: test # Download and merge coverage download and merge coverage: @@ -86,22 +89,27 @@ functions: run just script: - command: subprocess.exec params: + binary: bash args: - .evergreen/just.sh - ${JUSTFILE_TARGET} + working_dir: src include_expansions_in_env: - AWS_ACCESS_KEY_ID - AWS_SECRET_ACCESS_KEY - AWS_SESSION_TOKEN + type: test # Run server run server: - command: subprocess.exec params: + binary: bash args: - .evergreen/just.sh - run-server - ${TEST_NAME} + working_dir: src include_expansions_in_env: - VERSION - TOPOLOGY @@ -117,6 +125,8 @@ functions: - AUTH_AWS - LOAD_BALANCER - LOCAL_ATLAS + - NO_EXT + type: test - command: expansions.update params: file: ${DRIVERS_TOOLS}/mo-expansion.yml @@ -125,11 +135,13 @@ functions: run tests: - command: subprocess.exec params: + binary: bash args: - .evergreen/just.sh - setup-tests - ${TEST_NAME} - ${SUB_TEST_NAME} + working_dir: src include_expansions_in_env: - AUTH - SSL @@ -150,11 +162,16 @@ functions: - ORCHESTRATION_FILE - OCSP_SERVER_TYPE - VERSION + - REQUIRE_FIPS + type: test - command: subprocess.exec params: + binary: bash args: - .evergreen/just.sh - run-tests + working_dir: src + type: test # Send dashboard data send dashboard data: @@ -183,13 +200,19 @@ functions: teardown system: - command: subprocess.exec params: + binary: bash args: - .evergreen/just.sh - teardown-tests + working_dir: src + type: test - command: subprocess.exec params: + binary: bash args: - ${DRIVERS_TOOLS}/.evergreen/teardown.sh + working_dir: src + type: test # Upload coverage upload coverage: diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 23742d0d5e..ea305ddb41 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -43,7 +43,6 @@ expansions_update, git_get_project, perf_send, - subprocess_exec, ) from shrub.v3.evg_task import EvgTask, EvgTaskDependency, EvgTaskRef @@ -1111,9 +1110,10 @@ def create_run_server_func(): "AUTH_AWS", "LOAD_BALANCER", "LOCAL_ATLAS", + "NO_EXT", ] args = [".evergreen/just.sh", "run-server", "${TEST_NAME}"] - sub_cmd = subprocess_exec(include_expansions_in_env=includes, args=args) + sub_cmd = get_subprocess_exec(include_expansions_in_env=includes, args=args) expansion_cmd = expansions_update(file="${DRIVERS_TOOLS}/mo-expansion.yml") return "run server", [sub_cmd, expansion_cmd] @@ -1121,7 +1121,7 @@ def create_run_server_func(): def create_run_just_script_func(): includes = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN"] args = [".evergreen/just.sh", "${JUSTFILE_TARGET}"] - cmd = subprocess_exec(include_expansions_in_env=includes, args=args) + cmd = get_subprocess_exec(include_expansions_in_env=includes, args=args) return "run just script", [cmd] @@ -1146,21 +1146,22 @@ def create_run_tests_func(): "ORCHESTRATION_FILE", "OCSP_SERVER_TYPE", "VERSION", + "REQUIRE_FIPS", ] args = [".evergreen/just.sh", "setup-tests", "${TEST_NAME}", "${SUB_TEST_NAME}"] - setup_cmd = subprocess_exec(include_expansions_in_env=includes, args=args) - test_cmd = subprocess_exec(args=[".evergreen/just.sh", "run-tests"]) + setup_cmd = get_subprocess_exec(include_expansions_in_env=includes, args=args) + test_cmd = get_subprocess_exec(args=[".evergreen/just.sh", "run-tests"]) return "run tests", [setup_cmd, test_cmd] def create_cleanup_func(): - cmd = subprocess_exec(args=[".evergreen/scripts/cleanup.sh"]) + cmd = get_subprocess_exec(args=[".evergreen/scripts/cleanup.sh"]) return "cleanup", [cmd] def create_teardown_system_func(): - tests_cmd = subprocess_exec(args=[".evergreen/just.sh", "teardown-tests"]) - drivers_cmd = subprocess_exec(args=["${DRIVERS_TOOLS}/.evergreen/teardown.sh"]) + tests_cmd = get_subprocess_exec(args=[".evergreen/just.sh", "teardown-tests"]) + drivers_cmd = get_subprocess_exec(args=["${DRIVERS_TOOLS}/.evergreen/teardown.sh"]) return "teardown system", [tests_cmd, drivers_cmd] From 82016e2c4dfeaa760b5b47e760df12bf27911fef Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 14 Apr 2025 08:12:49 -0500 Subject: [PATCH 3/3] add IS_WIN32 support --- .evergreen/generated_configs/functions.yml | 1 + .evergreen/scripts/generate_config.py | 1 + 2 files changed, 2 insertions(+) diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index ed6845d503..bc8942efc5 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -162,6 +162,7 @@ functions: - ORCHESTRATION_FILE - OCSP_SERVER_TYPE - VERSION + - IS_WIN32 - REQUIRE_FIPS type: test - command: subprocess.exec diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 580babb9bd..e99a9a3980 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -1177,6 +1177,7 @@ def create_run_tests_func(): "ORCHESTRATION_FILE", "OCSP_SERVER_TYPE", "VERSION", + "IS_WIN32", "REQUIRE_FIPS", ] args = [".evergreen/just.sh", "setup-tests", "${TEST_NAME}", "${SUB_TEST_NAME}"]