From 17ff79677c2fa0c34bbeb4584dcc1ee509f83565 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Wed, 18 Feb 2026 15:15:28 +0100 Subject: [PATCH 01/35] Add nightly system-tests workflow Run the official system-tests reusable workflow daily at 4 AM GMT using dev mode against the latest commit on the default branch. Co-authored-by: Cursor --- .github/workflows/system-tests-nightly.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/system-tests-nightly.yml diff --git a/.github/workflows/system-tests-nightly.yml b/.github/workflows/system-tests-nightly.yml new file mode 100644 index 00000000000..4900b269763 --- /dev/null +++ b/.github/workflows/system-tests-nightly.yml @@ -0,0 +1,20 @@ +name: Nightly System Tests + +on: + workflow_dispatch: {} + schedule: + - cron: '0 4 * * *' + +jobs: + system-tests: + uses: DataDog/system-tests/.github/workflows/system-tests.yml@main + secrets: inherit + permissions: + contents: read + packages: write + with: + library: php + ref: main + scenarios_groups: tracer-release + skip_empty_scenarios: true + _system_tests_dev_mode: true From 10f7eab796fefc1c371c319da25612f6a9763f3e Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Wed, 18 Feb 2026 15:23:44 +0100 Subject: [PATCH 02/35] Enable push_to_test_optimization Co-authored-by: Cursor --- .github/workflows/system-tests-nightly.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/system-tests-nightly.yml b/.github/workflows/system-tests-nightly.yml index 4900b269763..7f01e409d96 100644 --- a/.github/workflows/system-tests-nightly.yml +++ b/.github/workflows/system-tests-nightly.yml @@ -18,3 +18,4 @@ jobs: scenarios_groups: tracer-release skip_empty_scenarios: true _system_tests_dev_mode: true + push_to_test_optimization: true From 2f73f4b49ffc6d5ede09c28e6fed089b8646b1cb Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Wed, 18 Feb 2026 15:40:31 +0100 Subject: [PATCH 03/35] Pass secrets explicitly to reusable workflow Co-authored-by: Cursor --- .github/workflows/system-tests-nightly.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/system-tests-nightly.yml b/.github/workflows/system-tests-nightly.yml index 7f01e409d96..5bbe185231f 100644 --- a/.github/workflows/system-tests-nightly.yml +++ b/.github/workflows/system-tests-nightly.yml @@ -8,7 +8,9 @@ on: jobs: system-tests: uses: DataDog/system-tests/.github/workflows/system-tests.yml@main - secrets: inherit + secrets: + DD_API_KEY: ${{ secrets.DD_API_KEY }} + TEST_OPTIMIZATION_API_KEY: ${{ secrets.DATADOG_API_KEY }} permissions: contents: read packages: write From 34d46d272af77b0f53d67a64ac0d90662d74c02f Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Wed, 18 Feb 2026 15:41:55 +0100 Subject: [PATCH 04/35] Only pass TEST_OPTIMIZATION_API_KEY secret Co-authored-by: Cursor --- .github/workflows/system-tests-nightly.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/system-tests-nightly.yml b/.github/workflows/system-tests-nightly.yml index 5bbe185231f..527b73038da 100644 --- a/.github/workflows/system-tests-nightly.yml +++ b/.github/workflows/system-tests-nightly.yml @@ -9,7 +9,6 @@ jobs: system-tests: uses: DataDog/system-tests/.github/workflows/system-tests.yml@main secrets: - DD_API_KEY: ${{ secrets.DD_API_KEY }} TEST_OPTIMIZATION_API_KEY: ${{ secrets.DATADOG_API_KEY }} permissions: contents: read From 420b281664fd8d3672f9594a2a40c23dc0a58618 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Wed, 18 Feb 2026 15:46:00 +0100 Subject: [PATCH 05/35] tmp: add pull_request trigger for testing Co-authored-by: Cursor --- .github/workflows/system-tests-nightly.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/system-tests-nightly.yml b/.github/workflows/system-tests-nightly.yml index 527b73038da..37682fd3d77 100644 --- a/.github/workflows/system-tests-nightly.yml +++ b/.github/workflows/system-tests-nightly.yml @@ -1,6 +1,7 @@ name: Nightly System Tests on: + pull_request: workflow_dispatch: {} schedule: - cron: '0 4 * * *' From 1185a365772d3b2050f94d1adf6cc49586559f0c Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Wed, 18 Feb 2026 15:58:33 +0100 Subject: [PATCH 06/35] Set desired_execution_time to 300s Co-authored-by: Cursor --- .github/workflows/system-tests-nightly.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/system-tests-nightly.yml b/.github/workflows/system-tests-nightly.yml index 37682fd3d77..16be144fce7 100644 --- a/.github/workflows/system-tests-nightly.yml +++ b/.github/workflows/system-tests-nightly.yml @@ -20,4 +20,5 @@ jobs: scenarios_groups: tracer-release skip_empty_scenarios: true _system_tests_dev_mode: true + desired_execution_time: 300 push_to_test_optimization: true From 4af9b76884be481db76247eb70c933c87ba4b422 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Wed, 18 Feb 2026 17:42:14 +0100 Subject: [PATCH 07/35] Also pass DD_API_KEY secret Co-authored-by: Cursor --- .github/workflows/system-tests-nightly.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/system-tests-nightly.yml b/.github/workflows/system-tests-nightly.yml index 16be144fce7..662a9774d95 100644 --- a/.github/workflows/system-tests-nightly.yml +++ b/.github/workflows/system-tests-nightly.yml @@ -10,6 +10,7 @@ jobs: system-tests: uses: DataDog/system-tests/.github/workflows/system-tests.yml@main secrets: + DD_API_KEY: ${{ secrets.DATADOG_API_KEY }} TEST_OPTIMIZATION_API_KEY: ${{ secrets.DATADOG_API_KEY }} permissions: contents: read From 55526dd4400840e9f7e7a43a5b645073ee7c445e Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 26 Feb 2026 16:01:30 +0100 Subject: [PATCH 08/35] ci: add system-tests Test Optimization upload and tracer-release nightly - Add after_script to .system_tests base job to upload JUnit results to Datadog Test Optimization using the existing upload script - Add tracer-release scenario group to configure_system_tests on schedule and master runs - Remove separate GitHub Actions nightly workflow Made-with: Cursor --- .github/workflows/system-tests-nightly.yml | 25 ---------------------- .gitlab/generate-package.php | 12 +++++++++++ 2 files changed, 12 insertions(+), 25 deletions(-) delete mode 100644 .github/workflows/system-tests-nightly.yml diff --git a/.github/workflows/system-tests-nightly.yml b/.github/workflows/system-tests-nightly.yml deleted file mode 100644 index 662a9774d95..00000000000 --- a/.github/workflows/system-tests-nightly.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Nightly System Tests - -on: - pull_request: - workflow_dispatch: {} - schedule: - - cron: '0 4 * * *' - -jobs: - system-tests: - uses: DataDog/system-tests/.github/workflows/system-tests.yml@main - secrets: - DD_API_KEY: ${{ secrets.DATADOG_API_KEY }} - TEST_OPTIMIZATION_API_KEY: ${{ secrets.DATADOG_API_KEY }} - permissions: - contents: read - packages: write - with: - library: php - ref: main - scenarios_groups: tracer-release - skip_empty_scenarios: true - _system_tests_dev_mode: true - desired_execution_time: 300 - push_to_test_optimization: true diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 0836af2a0d9..c0c507650cc 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -100,6 +100,11 @@ variables: SYSTEM_TESTS_SCENARIOS_GROUPS: "simple_onboarding,simple_onboarding_profiling,simple_onboarding_appsec,lib-injection,lib-injection-profiling,docker-ssi" ALLOW_MULTIPLE_CHILD_LEVELS: "false" + rules: + - if: '$CI_PIPELINE_SOURCE == "schedule" || $CI_COMMIT_REF_NAME == "master"' + variables: + SYSTEM_TESTS_SCENARIOS_GROUPS: "simple_onboarding,simple_onboarding_profiling,simple_onboarding_appsec,lib-injection,lib-injection-profiling,docker-ssi,tracer-release" + - when: on_success package-oci: needs: @@ -1223,6 +1228,13 @@ when: always paths: - .cache/ + after_script: + - mkdir -p artifacts + - | + for f in system-tests/logs*/reportJunit.xml; do + [ -f "$f" ] && cp "$f" "artifacts/$(basename $(dirname "$f"))_reportJunit.xml" + done + - .gitlab/silent-upload-junit-to-datadog.sh artifacts: paths: - "system-tests/logs_parametric/" From 42bcd971b8e83bdea3444f93d3fd3dcde3b39da0 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 26 Feb 2026 16:54:49 +0100 Subject: [PATCH 09/35] ci: fix after_script by using upload script directly The silent wrapper's grep returns exit code 1 when no summary lines are found, causing the after_script to fail. Use the non-silent version with || true to prevent after_script failures. Made-with: Cursor --- .gitlab/generate-package.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index c0c507650cc..2f23afc2fd9 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1234,7 +1234,7 @@ for f in system-tests/logs*/reportJunit.xml; do [ -f "$f" ] && cp "$f" "artifacts/$(basename $(dirname "$f"))_reportJunit.xml" done - - .gitlab/silent-upload-junit-to-datadog.sh + - .gitlab/upload-junit-to-datadog.sh || true artifacts: paths: - "system-tests/logs_parametric/" From 50f858bf514329ecb37c289831dd8a35a2091cc3 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 26 Feb 2026 17:05:30 +0100 Subject: [PATCH 10/35] ci: fix system-tests Test Optimization upload Replace the generic upload-junit-to-datadog.sh with a custom after_script that: - Uses --service system-tests (not dd-trace-php-tests) - References logs directly from system-tests/logs*/ - Uses the datadog-ci standalone binary (no npm needed) - Uses Python for JSON/zip (guaranteed available in the image) - Provides explicit error messages instead of silent exit 0 Made-with: Cursor --- .gitlab/generate-package.php | 42 +++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 2f23afc2fd9..e137b39ef0a 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1229,12 +1229,44 @@ paths: - .cache/ after_script: - - mkdir -p artifacts - | - for f in system-tests/logs*/reportJunit.xml; do - [ -f "$f" ] && cp "$f" "artifacts/$(basename $(dirname "$f"))_reportJunit.xml" - done - - .gitlab/upload-junit-to-datadog.sh || true + set +e + echo "=== Uploading system-tests JUnit results to Test Optimization ===" + + # Check that there are JUnit files to upload + ls system-tests/logs*/reportJunit.xml >/dev/null 2>&1 + if [ $? -ne 0 ]; then echo "No JUnit XML files found, skipping upload"; exit 0; fi + + # Download datadog-ci standalone binary + echo "Downloading datadog-ci..." + curl -L --fail "https://github.com/DataDog/datadog-ci/releases/latest/download/datadog-ci_linux-x64" -o /tmp/datadog-ci + if [ $? -ne 0 ]; then echo "Failed to download datadog-ci"; exit 0; fi + chmod +x /tmp/datadog-ci + + # Download and extract Vault CLI + echo "Downloading Vault..." + VAULT_VERSION="1.20.0" + curl -L --fail "https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip" -o /tmp/vault.zip + if [ $? -ne 0 ]; then echo "Failed to download Vault"; exit 0; fi + python3 -c "import zipfile; zipfile.ZipFile('/tmp/vault.zip').extractall('/tmp/')" + chmod +x /tmp/vault + + # Fetch API key from Vault + echo "Fetching API key from Vault..." + VAULT_JSON=$(/tmp/vault kv get --format=json "kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" 2>&1) + if [ $? -ne 0 ]; then echo "Failed to fetch API key from Vault: $VAULT_JSON"; exit 0; fi + export DATADOG_API_KEY=$(echo "$VAULT_JSON" | python3 -c "import sys,json; print(json.loads(sys.stdin.read())['data']['data']['key'])") + export DATADOG_SITE="datadoghq.com" + + # Upload JUnit results + echo "Uploading JUnit results..." + /tmp/datadog-ci junit upload \ + system-tests/logs*/reportJunit.xml \ + --service system-tests \ + --env ci \ + --verbose \ + --xpath-tag "test.codeowners=/testcase/properties/property[@name='test.codeowners']" + echo "=== Upload complete ===" artifacts: paths: - "system-tests/logs_parametric/" From 34f79e3201d1e8602bae4c39341340dfca0a1cb9 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Mon, 2 Mar 2026 14:20:20 +0100 Subject: [PATCH 11/35] Run only tracer-release on schedule, it already includes other groups Made-with: Cursor --- .gitlab/generate-package.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index e137b39ef0a..3be62edcc99 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -101,9 +101,9 @@ SYSTEM_TESTS_SCENARIOS_GROUPS: "simple_onboarding,simple_onboarding_profiling,simple_onboarding_appsec,lib-injection,lib-injection-profiling,docker-ssi" ALLOW_MULTIPLE_CHILD_LEVELS: "false" rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" || $CI_COMMIT_REF_NAME == "master"' + - if: '$CI_PIPELINE_SOURCE == "schedule"' variables: - SYSTEM_TESTS_SCENARIOS_GROUPS: "simple_onboarding,simple_onboarding_profiling,simple_onboarding_appsec,lib-injection,lib-injection-profiling,docker-ssi,tracer-release" + SYSTEM_TESTS_SCENARIOS_GROUPS: "tracer-release" - when: on_success package-oci: From bafec28b3cb835a8d8dbf171610346cdb0c8737d Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Mon, 2 Mar 2026 14:21:52 +0100 Subject: [PATCH 12/35] Temporarily run tracer-release on all triggers for testing Made-with: Cursor --- .gitlab/generate-package.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 3be62edcc99..45383677847 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -101,10 +101,10 @@ SYSTEM_TESTS_SCENARIOS_GROUPS: "simple_onboarding,simple_onboarding_profiling,simple_onboarding_appsec,lib-injection,lib-injection-profiling,docker-ssi" ALLOW_MULTIPLE_CHILD_LEVELS: "false" rules: - - if: '$CI_PIPELINE_SOURCE == "schedule"' + # - if: '$CI_PIPELINE_SOURCE == "schedule"' + - when: on_success variables: SYSTEM_TESTS_SCENARIOS_GROUPS: "tracer-release" - - when: on_success package-oci: needs: From 578e0b6ed8e2d6e472db7a907bcef9208e24e268 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 5 Mar 2026 12:07:01 +0100 Subject: [PATCH 13/35] Tracer release scenario group on main --- .github/workflows/system_tests.yml | 26 ++++++++++++++++++++++++++ .gitlab/generate-package.php | 5 ----- 2 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/system_tests.yml diff --git a/.github/workflows/system_tests.yml b/.github/workflows/system_tests.yml new file mode 100644 index 00000000000..49c50813fa0 --- /dev/null +++ b/.github/workflows/system_tests.yml @@ -0,0 +1,26 @@ +name: System Tests + +on: + push: + branches: + - main + workflow_dispatch: {} + schedule: + - cron: '00 03 * * 1-5' + +jobs: + system-tests: + uses: DataDog/system-tests/.github/workflows/system-tests.yml@main + secrets: + DD_API_KEY: ${{ secrets.DD_API_KEY }} + TEST_OPTIMIZATION_API_KEY: ${{ secrets.DD_API_KEY }} + permissions: + contents: read + packages: write + with: + library: php + ref: master + scenarios_groups: tracer-release + skip_empty_scenarios: true + _system_tests_dev_mode: true + push_to_test_optimization: true diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 45383677847..43784c31856 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -100,11 +100,6 @@ variables: SYSTEM_TESTS_SCENARIOS_GROUPS: "simple_onboarding,simple_onboarding_profiling,simple_onboarding_appsec,lib-injection,lib-injection-profiling,docker-ssi" ALLOW_MULTIPLE_CHILD_LEVELS: "false" - rules: - # - if: '$CI_PIPELINE_SOURCE == "schedule"' - - when: on_success - variables: - SYSTEM_TESTS_SCENARIOS_GROUPS: "tracer-release" package-oci: needs: From 4db06556d557b53f5a79f595055c35e20344a1d6 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 5 Mar 2026 12:11:12 +0100 Subject: [PATCH 14/35] Test --- .github/workflows/system_tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/system_tests.yml b/.github/workflows/system_tests.yml index 49c50813fa0..30355682563 100644 --- a/.github/workflows/system_tests.yml +++ b/.github/workflows/system_tests.yml @@ -7,6 +7,7 @@ on: workflow_dispatch: {} schedule: - cron: '00 03 * * 1-5' + pull_request: jobs: system-tests: From a65519dc59afce41c0dae00c7f609af6ea965f09 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 5 Mar 2026 12:24:37 +0100 Subject: [PATCH 15/35] Remove ref argument --- .github/workflows/system_tests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/system_tests.yml b/.github/workflows/system_tests.yml index 30355682563..bb6b64426e7 100644 --- a/.github/workflows/system_tests.yml +++ b/.github/workflows/system_tests.yml @@ -20,7 +20,6 @@ jobs: packages: write with: library: php - ref: master scenarios_groups: tracer-release skip_empty_scenarios: true _system_tests_dev_mode: true From b44c4ab3eb071a7b7dd4a17cf334d3807b34d7f9 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 12 Mar 2026 15:27:11 +0100 Subject: [PATCH 16/35] Every day schedule (include weekends) --- .github/workflows/system_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/system_tests.yml b/.github/workflows/system_tests.yml index bb6b64426e7..2de5fe9b5ce 100644 --- a/.github/workflows/system_tests.yml +++ b/.github/workflows/system_tests.yml @@ -6,7 +6,7 @@ on: - main workflow_dispatch: {} schedule: - - cron: '00 03 * * 1-5' + - cron: '00 03 * * *' pull_request: jobs: From 5159a7156267c301226e9e1d7aff25a5f1b1f3a5 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 12 Mar 2026 17:52:14 +0100 Subject: [PATCH 17/35] Use upload-junit-to-datadog.sh --- .gitlab/generate-package.php | 40 ++---------------------------- .gitlab/upload-junit-to-datadog.sh | 12 ++++++--- 2 files changed, 11 insertions(+), 41 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 43784c31856..cb1955826f1 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1224,44 +1224,8 @@ paths: - .cache/ after_script: - - | - set +e - echo "=== Uploading system-tests JUnit results to Test Optimization ===" - - # Check that there are JUnit files to upload - ls system-tests/logs*/reportJunit.xml >/dev/null 2>&1 - if [ $? -ne 0 ]; then echo "No JUnit XML files found, skipping upload"; exit 0; fi - - # Download datadog-ci standalone binary - echo "Downloading datadog-ci..." - curl -L --fail "https://github.com/DataDog/datadog-ci/releases/latest/download/datadog-ci_linux-x64" -o /tmp/datadog-ci - if [ $? -ne 0 ]; then echo "Failed to download datadog-ci"; exit 0; fi - chmod +x /tmp/datadog-ci - - # Download and extract Vault CLI - echo "Downloading Vault..." - VAULT_VERSION="1.20.0" - curl -L --fail "https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip" -o /tmp/vault.zip - if [ $? -ne 0 ]; then echo "Failed to download Vault"; exit 0; fi - python3 -c "import zipfile; zipfile.ZipFile('/tmp/vault.zip').extractall('/tmp/')" - chmod +x /tmp/vault - - # Fetch API key from Vault - echo "Fetching API key from Vault..." - VAULT_JSON=$(/tmp/vault kv get --format=json "kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" 2>&1) - if [ $? -ne 0 ]; then echo "Failed to fetch API key from Vault: $VAULT_JSON"; exit 0; fi - export DATADOG_API_KEY=$(echo "$VAULT_JSON" | python3 -c "import sys,json; print(json.loads(sys.stdin.read())['data']['data']['key'])") - export DATADOG_SITE="datadoghq.com" - - # Upload JUnit results - echo "Uploading JUnit results..." - /tmp/datadog-ci junit upload \ - system-tests/logs*/reportJunit.xml \ - --service system-tests \ - --env ci \ - --verbose \ - --xpath-tag "test.codeowners=/testcase/properties/property[@name='test.codeowners']" - echo "=== Upload complete ===" + - mkdir -p artifacts && cp system-tests/logs*/reportJunit.xml artifacts/ 2>/dev/null || true + - DD_SERVICE=system-tests DD_JUNIT_XPATH_TAGS="test.codeowners=/testcase/properties/property[@name='test.codeowners']" .gitlab/silent-upload-junit-to-datadog.sh artifacts: paths: - "system-tests/logs_parametric/" diff --git a/.gitlab/upload-junit-to-datadog.sh b/.gitlab/upload-junit-to-datadog.sh index af3006595cc..60f1fe358cc 100755 --- a/.gitlab/upload-junit-to-datadog.sh +++ b/.gitlab/upload-junit-to-datadog.sh @@ -4,7 +4,7 @@ set -eo pipefail export DATADOG_SITE="datadoghq.com" export DD_ENV="ci" -export DD_SERVICE="dd-trace-php-tests" +export DD_SERVICE="${DD_SERVICE:-dd-trace-php-tests}" export VAULT_SECRET_PATH="kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" export VAULT_VERSION="1.20.0" @@ -204,10 +204,16 @@ if [[ -n "${TAGS}" ]]; then tags_args="--tags ${TAGS}" fi +# Build xpath-tag arguments if DD_JUNIT_XPATH_TAGS is set +xpath_tags_args="" +if [[ -n "${DD_JUNIT_XPATH_TAGS:-}" ]]; then + xpath_tags_args="--xpath-tag ${DD_JUNIT_XPATH_TAGS}" +fi + echo "Current directory: $(pwd)" -echo "Running command: ${datadog_ci_cmd} junit upload --service \"${DD_SERVICE}\" --max-concurrency 20 --verbose --tags git.repository_url:https://github.com/DataDog/dd-trace-php ${tags_args} ${files_array[*]}" +echo "Running command: ${datadog_ci_cmd} junit upload --service \"${DD_SERVICE}\" --max-concurrency 20 --verbose --tags git.repository_url:https://github.com/DataDog/dd-trace-php ${tags_args} ${xpath_tags_args} ${files_array[*]}" -if ! ${datadog_ci_cmd} junit upload --service "${DD_SERVICE}" --max-concurrency 20 --verbose --tags "git.repository_url:https://github.com/DataDog/dd-trace-php" ${tags_args} "${files_array[@]}"; then +if ! ${datadog_ci_cmd} junit upload --service "${DD_SERVICE}" --max-concurrency 20 --verbose --tags "git.repository_url:https://github.com/DataDog/dd-trace-php" ${tags_args} ${xpath_tags_args} "${files_array[@]}"; then echo "Warning: Failed to upload JUnit files" >&2 exit 0 fi From 85c13ba680df04228ac37d61555d9440009ef376 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 12 Mar 2026 18:37:47 +0100 Subject: [PATCH 18/35] Remove github workflow --- .github/workflows/system_tests.yml | 26 -------------------------- .gitlab/generate-package.php | 12 ++++++++++++ 2 files changed, 12 insertions(+), 26 deletions(-) delete mode 100644 .github/workflows/system_tests.yml diff --git a/.github/workflows/system_tests.yml b/.github/workflows/system_tests.yml deleted file mode 100644 index 2de5fe9b5ce..00000000000 --- a/.github/workflows/system_tests.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: System Tests - -on: - push: - branches: - - main - workflow_dispatch: {} - schedule: - - cron: '00 03 * * *' - pull_request: - -jobs: - system-tests: - uses: DataDog/system-tests/.github/workflows/system-tests.yml@main - secrets: - DD_API_KEY: ${{ secrets.DD_API_KEY }} - TEST_OPTIMIZATION_API_KEY: ${{ secrets.DD_API_KEY }} - permissions: - contents: read - packages: write - with: - library: php - scenarios_groups: tracer-release - skip_empty_scenarios: true - _system_tests_dev_mode: true - push_to_test_optimization: true diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index cb1955826f1..d5aaf056847 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1250,6 +1250,18 @@ script: - ./run.sh $TESTSUITE +"System Tests: [tracer-release]": + extends: .system_tests + rules: + - if: $CI_COMMIT_REF_NAME == "master" + when: on_success + - if: $CI_PIPELINE_SOURCE == "schedule" + when: on_success + - when: manual + allow_failure: true + script: + - ./run.sh TRACER_RELEASE_SCENARIOS + "System Tests: [parametric]": extends: .system_tests variables: From 3c214dceb411c9aabde6ac940ed43aab06a61bec Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Fri, 13 Mar 2026 14:56:52 +0100 Subject: [PATCH 19/35] Test --- .gitlab/generate-package.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index d5aaf056847..5d4ca4d745a 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1252,13 +1252,13 @@ "System Tests: [tracer-release]": extends: .system_tests - rules: - - if: $CI_COMMIT_REF_NAME == "master" - when: on_success - - if: $CI_PIPELINE_SOURCE == "schedule" - when: on_success - - when: manual - allow_failure: true + /* rules: */ + /* - if: $CI_COMMIT_REF_NAME == "master" */ + /* when: on_success */ + /* - if: $CI_PIPELINE_SOURCE == "schedule" */ + /* when: on_success */ + /* - when: manual */ + /* allow_failure: true */ script: - ./run.sh TRACER_RELEASE_SCENARIOS From be1373aba1e2eb5773daa412804cb01dc7598cff Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Fri, 13 Mar 2026 15:30:17 +0100 Subject: [PATCH 20/35] Add tracer-release system tests job on GitLab --- .gitlab/generate-package.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 5d4ca4d745a..ab620bb70f7 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1252,13 +1252,13 @@ "System Tests: [tracer-release]": extends: .system_tests - /* rules: */ - /* - if: $CI_COMMIT_REF_NAME == "master" */ - /* when: on_success */ - /* - if: $CI_PIPELINE_SOURCE == "schedule" */ - /* when: on_success */ - /* - when: manual */ - /* allow_failure: true */ + # rules: + # - if: $CI_COMMIT_REF_NAME == "master" + # when: on_success + # - if: $CI_PIPELINE_SOURCE == "schedule" + # when: on_success + # - when: manual + # allow_failure: true script: - ./run.sh TRACER_RELEASE_SCENARIOS From 6b14c2fdd0ad5d9c9d13384584814c87815180c1 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Fri, 13 Mar 2026 16:41:38 +0100 Subject: [PATCH 21/35] Fetch DD_API_KEY from Vault for tracer-release system tests --- .gitlab/generate-package.php | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index adef5761a52..56cf1e91e5e 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1275,6 +1275,7 @@ # - when: manual # allow_failure: true script: + - export DD_API_KEY=$(curl -s -H "X-Vault-Token:$VAULT_TOKEN" "$VAULT_ADDR/v1/kv/data/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") - ./run.sh TRACER_RELEASE_SCENARIOS "System Tests: [parametric]": From 9d3c4eee266a4b0638f8b094ca0f745bd6dd5673 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 19 Mar 2026 11:37:59 +0100 Subject: [PATCH 22/35] fail when vault call fails --- .gitlab/generate-package.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 56cf1e91e5e..2ac6c65cb27 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1275,7 +1275,8 @@ # - when: manual # allow_failure: true script: - - export DD_API_KEY=$(curl -s -H "X-Vault-Token:$VAULT_TOKEN" "$VAULT_ADDR/v1/kv/data/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") + - DD_API_KEY=$(curl -sf -H "X-Vault-Token:$VAULT_TOKEN" "$VAULT_ADDR/v1/kv/data/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } + - export DD_API_KEY - ./run.sh TRACER_RELEASE_SCENARIOS "System Tests: [parametric]": From 99bd6b0a14d87651664d0834f37274bcef6bd2d2 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 19 Mar 2026 11:43:45 +0100 Subject: [PATCH 23/35] Fix vault path --- .gitlab/generate-package.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 2ac6c65cb27..d8d9bae4d0b 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1275,7 +1275,7 @@ # - when: manual # allow_failure: true script: - - DD_API_KEY=$(curl -sf -H "X-Vault-Token:$VAULT_TOKEN" "$VAULT_ADDR/v1/kv/data/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } + - DD_API_KEY=$(curl -sf -H "X-Vault-Token:$VAULT_TOKEN" "$VAULT_ADDR/v1/kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } - export DD_API_KEY - ./run.sh TRACER_RELEASE_SCENARIOS From 922d80d5ec2ef822b5b2a392b2b6a61dc139b469 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 19 Mar 2026 13:31:11 +0100 Subject: [PATCH 24/35] Using vault CLI --- .gitlab/generate-package.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index d8d9bae4d0b..80fbd1fe675 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1275,7 +1275,8 @@ # - when: manual # allow_failure: true script: - - DD_API_KEY=$(curl -sf -H "X-Vault-Token:$VAULT_TOKEN" "$VAULT_ADDR/v1/kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } + - curl -sfL "https://releases.hashicorp.com/vault/1.20.0/vault_1.20.0_linux_amd64.zip" -o /tmp/vault.zip && unzip -q /tmp/vault.zip -d /tmp && chmod +x /tmp/vault && rm -f /tmp/vault.zip + - DD_API_KEY=$(/tmp/vault kv get --format=json "kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } - export DD_API_KEY - ./run.sh TRACER_RELEASE_SCENARIOS From 18869c3c6c93baf8030b785bc33235c4bf2e559e Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 19 Mar 2026 15:12:46 +0100 Subject: [PATCH 25/35] Fix tracer-release system tests: use vault CLI and compute PHP-compatible scenarios - Use vault CLI instead of curl to fetch DD_API_KEY (matching upload-junit-to-datadog.sh) - Add error handling for vault fetch failure - Use compute-workflow-parameters.py to filter out lambda scenarios unsupported by PHP --- .gitlab/generate-package.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 80fbd1fe675..dae03f182e9 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1278,7 +1278,8 @@ - curl -sfL "https://releases.hashicorp.com/vault/1.20.0/vault_1.20.0_linux_amd64.zip" -o /tmp/vault.zip && unzip -q /tmp/vault.zip -d /tmp && chmod +x /tmp/vault && rm -f /tmp/vault.zip - DD_API_KEY=$(/tmp/vault kv get --format=json "kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } - export DD_API_KEY - - ./run.sh TRACER_RELEASE_SCENARIOS + - SCENARIOS=$(python utils/scripts/compute-workflow-parameters.py php -g tracer_release | sed -n 's/^endtoend_scenarios=//p' | tr -d '[]"' | tr ',' ' ') + - ./run.sh $SCENARIOS "System Tests: [parametric]": extends: .system_tests From b0982a725422e1a059a67774a6a2a8e8a119db5a Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 19 Mar 2026 16:35:15 +0100 Subject: [PATCH 26/35] Use compute-workflow-parameters.py to get PHP-compatible scenarios --- .gitlab/generate-package.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index dae03f182e9..f6a90097145 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1278,7 +1278,7 @@ - curl -sfL "https://releases.hashicorp.com/vault/1.20.0/vault_1.20.0_linux_amd64.zip" -o /tmp/vault.zip && unzip -q /tmp/vault.zip -d /tmp && chmod +x /tmp/vault && rm -f /tmp/vault.zip - DD_API_KEY=$(/tmp/vault kv get --format=json "kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } - export DD_API_KEY - - SCENARIOS=$(python utils/scripts/compute-workflow-parameters.py php -g tracer_release | sed -n 's/^endtoend_scenarios=//p' | tr -d '[]"' | tr ',' ' ') + - SCENARIOS=$(PYTHONPATH=. venv/bin/python utils/scripts/compute-workflow-parameters.py php -g tracer_release -f json | python3 -c "import sys,json;print(' '.join(json.load(sys.stdin)['endtoend']['scenarios']))") - ./run.sh $SCENARIOS "System Tests: [parametric]": From f00dc87ee3203c69b2135c01994ef9d65a4c1307 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Thu, 19 Mar 2026 16:50:18 +0100 Subject: [PATCH 27/35] Pass all computed scenarios to run.sh without filtering --- .gitlab/generate-package.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index f6a90097145..33dd7e47bf3 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1278,7 +1278,7 @@ - curl -sfL "https://releases.hashicorp.com/vault/1.20.0/vault_1.20.0_linux_amd64.zip" -o /tmp/vault.zip && unzip -q /tmp/vault.zip -d /tmp && chmod +x /tmp/vault && rm -f /tmp/vault.zip - DD_API_KEY=$(/tmp/vault kv get --format=json "kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } - export DD_API_KEY - - SCENARIOS=$(PYTHONPATH=. venv/bin/python utils/scripts/compute-workflow-parameters.py php -g tracer_release -f json | python3 -c "import sys,json;print(' '.join(json.load(sys.stdin)['endtoend']['scenarios']))") + - SCENARIOS=$(PYTHONPATH=. venv/bin/python utils/scripts/compute-workflow-parameters.py php -g tracer_release -f json | python3 -c "import sys,json;d=json.load(sys.stdin);s=set();[s.update(v['scenarios']) for v in d.values() if isinstance(v,dict) and 'scenarios' in v];print(' '.join(sorted(s)))") - ./run.sh $SCENARIOS "System Tests: [parametric]": From 0a7ccd18ad39a144e75cfaf570f1033cfbe33777 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Fri, 20 Mar 2026 09:21:43 +0100 Subject: [PATCH 28/35] Increase tracer-release system tests timeout to 4h --- .gitlab/generate-package.php | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 33dd7e47bf3..b9ec23d7d23 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1267,6 +1267,7 @@ "System Tests: [tracer-release]": extends: .system_tests + timeout: 4h # rules: # - if: $CI_COMMIT_REF_NAME == "master" # when: on_success From dbf442b6010405f7b70f46164c9aab446d75bdf2 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Fri, 20 Mar 2026 11:24:51 +0100 Subject: [PATCH 29/35] Run all scenarios regardless of individual failures --- .gitlab/generate-package.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index b9ec23d7d23..968a0674b57 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1280,7 +1280,7 @@ - DD_API_KEY=$(/tmp/vault kv get --format=json "kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } - export DD_API_KEY - SCENARIOS=$(PYTHONPATH=. venv/bin/python utils/scripts/compute-workflow-parameters.py php -g tracer_release -f json | python3 -c "import sys,json;d=json.load(sys.stdin);s=set();[s.update(v['scenarios']) for v in d.values() if isinstance(v,dict) and 'scenarios' in v];print(' '.join(sorted(s)))") - - ./run.sh $SCENARIOS + - FAILED=""; for S in $SCENARIOS; do echo "=== Running $S ==="; ./run.sh $S || FAILED="$FAILED $S"; done; if [ -n "$FAILED" ]; then echo "Failed scenarios:$FAILED"; exit 1; fi "System Tests: [parametric]": extends: .system_tests From e44dc4c4b646e5ee7af110376b7a171683707157 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Fri, 20 Mar 2026 13:55:10 +0100 Subject: [PATCH 30/35] Putting rules back --- .gitlab/generate-package.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 968a0674b57..521eeef5886 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1268,13 +1268,13 @@ "System Tests: [tracer-release]": extends: .system_tests timeout: 4h - # rules: - # - if: $CI_COMMIT_REF_NAME == "master" - # when: on_success - # - if: $CI_PIPELINE_SOURCE == "schedule" - # when: on_success - # - when: manual - # allow_failure: true + rules: + - if: $CI_COMMIT_REF_NAME == "master" + when: on_success + - if: $CI_PIPELINE_SOURCE == "schedule" + when: on_success + - when: manual + allow_failure: true script: - curl -sfL "https://releases.hashicorp.com/vault/1.20.0/vault_1.20.0_linux_amd64.zip" -o /tmp/vault.zip && unzip -q /tmp/vault.zip -d /tmp && chmod +x /tmp/vault && rm -f /tmp/vault.zip - DD_API_KEY=$(/tmp/vault kv get --format=json "kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } From f67c9a0345f5f62c4694cb7ff8f534f8aa929360 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Fri, 20 Mar 2026 15:30:36 +0100 Subject: [PATCH 31/35] Fix JUnit artifact collisions across multiple scenarios --- .gitlab/generate-package.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 521eeef5886..fd4e4d5cee3 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1239,12 +1239,11 @@ paths: - .cache/ after_script: - - mkdir -p artifacts && cp system-tests/logs*/reportJunit.xml artifacts/ 2>/dev/null || true + - mkdir -p artifacts && for f in system-tests/logs*/reportJunit.xml; do dir=$(basename $(dirname "$f")); cp "$f" "artifacts/reportJunit_${dir}.xml" 2>/dev/null || true; done - DD_SERVICE=system-tests DD_JUNIT_XPATH_TAGS="test.codeowners=/testcase/properties/property[@name='test.codeowners']" .gitlab/silent-upload-junit-to-datadog.sh artifacts: paths: - - "system-tests/logs_parametric/" - - "system-tests/logs/" + - "system-tests/logs*/" when: "always" "System Tests: [default]": From 53a128e1fca140d60036bdc9cadbcc55e798724d Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Mon, 23 Mar 2026 10:39:57 +0100 Subject: [PATCH 32/35] Test optim upload fix --- .gitlab/generate-package.php | 4 +++- .gitlab/upload-junit-to-datadog.sh | 13 +++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index fd4e4d5cee3..7b503129ae3 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1229,6 +1229,7 @@ # Install Python dependencies pip install -U pip virtualenv + - /tmp/vault kv get --format=json "kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" 2>/dev/null | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])" > /tmp/.dd-api-key 2>/dev/null || true - git clone https://github.com/DataDog/system-tests.git - mv packages/{datadog-setup.php,dd-library-php-*x86_64-linux-gnu.tar.gz} system-tests/binaries - cd system-tests @@ -1239,8 +1240,9 @@ paths: - .cache/ after_script: + - DATADOG_API_KEY=$(cat /tmp/.dd-api-key 2>/dev/null) || true - mkdir -p artifacts && for f in system-tests/logs*/reportJunit.xml; do dir=$(basename $(dirname "$f")); cp "$f" "artifacts/reportJunit_${dir}.xml" 2>/dev/null || true; done - - DD_SERVICE=system-tests DD_JUNIT_XPATH_TAGS="test.codeowners=/testcase/properties/property[@name='test.codeowners']" .gitlab/silent-upload-junit-to-datadog.sh + - DATADOG_API_KEY=${DATADOG_API_KEY:-} DD_SERVICE=system-tests DD_JUNIT_XPATH_TAGS="test.codeowners=/testcase/properties/property[@name='test.codeowners']" .gitlab/upload-junit-to-datadog.sh artifacts: paths: - "system-tests/logs*/" diff --git a/.gitlab/upload-junit-to-datadog.sh b/.gitlab/upload-junit-to-datadog.sh index 4fc5da43f9f..5d4e48834aa 100755 --- a/.gitlab/upload-junit-to-datadog.sh +++ b/.gitlab/upload-junit-to-datadog.sh @@ -103,7 +103,7 @@ if ! command -v vault &> /dev/null; then fi echo "Extracting Vault..." - if ! unzip -q "${vault_zip}" -d /tmp; then + if ! unzip -o -q "${vault_zip}" -d /tmp; then echo "Warning: Failed to extract Vault. Skipping JUnit upload." >&2 exit 0 fi @@ -142,9 +142,10 @@ export DATADOG_API_KEY # Determine which datadog-ci method to use datadog_ci_cmd="" -# Prefer npm/npx if available -if command -v npx &> /dev/null || command -v npm &> /dev/null; then - echo "Using npx to run datadog-ci" +# Prefer npm/npx if available and node version is recent enough (>=16) +node_version="$(node --version 2>/dev/null | sed 's/^v//' | cut -d. -f1)" +if [ -n "$node_version" ] && [ "$node_version" -ge 16 ] 2>/dev/null && { command -v npx &> /dev/null || command -v npm &> /dev/null; }; then + echo "Using npx to run datadog-ci (node v${node_version})" datadog_ci_cmd="npx --yes @datadog/datadog-ci" else # Fall back to standalone binary if npm/npx not available @@ -222,8 +223,8 @@ echo "Current directory: $(pwd)" echo "Running command: ${datadog_ci_cmd} junit upload --service \"${DD_SERVICE}\" --max-concurrency 20 --verbose --tags git.repository_url:https://github.com/DataDog/dd-trace-php ${tags_args} ${xpath_tags_args} ${files_array[*]}" if ! ${datadog_ci_cmd} junit upload --service "${DD_SERVICE}" --max-concurrency 20 --verbose --tags "git.repository_url:https://github.com/DataDog/dd-trace-php" ${tags_args} ${xpath_tags_args} "${files_array[@]}"; then - echo "Warning: Failed to upload JUnit files" >&2 - exit 0 + echo "Error: Failed to upload JUnit files" >&2 + exit 1 fi echo "=== JUnit upload completed ===" From bed5841c7a756f0f95ea07f8aaa8d2b122497281 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Wed, 25 Mar 2026 11:34:37 +0100 Subject: [PATCH 33/35] Remove debug --- .gitlab/generate-package.php | 2 +- .gitlab/upload-junit-to-datadog.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index a3be96aaf2d..25907d2de41 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1248,7 +1248,7 @@ after_script: - DATADOG_API_KEY=$(cat /tmp/.dd-api-key 2>/dev/null) || true - mkdir -p artifacts && for f in system-tests/logs*/reportJunit.xml; do dir=$(basename $(dirname "$f")); cp "$f" "artifacts/reportJunit_${dir}.xml" 2>/dev/null || true; done - - DATADOG_API_KEY=${DATADOG_API_KEY:-} DD_SERVICE=system-tests DD_JUNIT_XPATH_TAGS="test.codeowners=/testcase/properties/property[@name='test.codeowners']" .gitlab/upload-junit-to-datadog.sh + - DATADOG_API_KEY=${DATADOG_API_KEY:-} DD_SERVICE=system-tests DD_JUNIT_XPATH_TAGS="test.codeowners=/testcase/properties/property[@name='test.codeowners']" .gitlab/silent-upload-junit-to-datadog.sh artifacts: paths: - "system-tests/logs*/" diff --git a/.gitlab/upload-junit-to-datadog.sh b/.gitlab/upload-junit-to-datadog.sh index 80e6dd2f78e..46fb0dc380b 100755 --- a/.gitlab/upload-junit-to-datadog.sh +++ b/.gitlab/upload-junit-to-datadog.sh @@ -223,8 +223,8 @@ echo "Current directory: $(pwd)" echo "Running command: ${datadog_ci_cmd} junit upload --service \"${DD_SERVICE}\" --max-concurrency 20 --verbose --tags git.repository_url:https://github.com/DataDog/dd-trace-php ${tags_args} ${xpath_tags_args} ${files_array[*]}" if ! ${datadog_ci_cmd} junit upload --service "${DD_SERVICE}" --max-concurrency 20 --verbose --tags "git.repository_url:https://github.com/DataDog/dd-trace-php" ${tags_args} ${xpath_tags_args} "${files_array[@]}"; then - echo "Error: Failed to upload JUnit files" >&2 - exit 1 + echo "Warning: Failed to upload JUnit files" >&2 + exit 0 fi echo "=== JUnit upload completed ===" From 147194270db724a0fa5dec8b0d73b8d63d8732e3 Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Wed, 25 Mar 2026 16:44:07 +0100 Subject: [PATCH 34/35] Fix vault install for tracer-release job --- .gitlab/generate-package.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 25907d2de41..767e2e2a209 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1283,8 +1283,7 @@ - when: manual allow_failure: true script: - - curl -sfL "https://releases.hashicorp.com/vault/1.20.0/vault_1.20.0_linux_amd64.zip" -o /tmp/vault.zip && unzip -q /tmp/vault.zip -d /tmp && chmod +x /tmp/vault && rm -f /tmp/vault.zip - - DD_API_KEY=$(/tmp/vault kv get --format=json "kv/k8s/gitlab-runner/dd-trace-php/datadoghq-api-key" | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['data']['key'])") || { echo "Failed to fetch DD_API_KEY from Vault"; exit 1; } + - DD_API_KEY=$(cat /tmp/.dd-api-key 2>/dev/null) || { echo "Failed to fetch DD_API_KEY"; exit 1; } - export DD_API_KEY - SCENARIOS=$(PYTHONPATH=. venv/bin/python utils/scripts/compute-workflow-parameters.py php -g tracer_release -f json | python3 -c "import sys,json;d=json.load(sys.stdin);s=set();[s.update(v['scenarios']) for v in d.values() if isinstance(v,dict) and 'scenarios' in v];print(' '.join(sorted(s)))") - FAILED=""; for S in $SCENARIOS; do echo "=== Running $S ==="; ./run.sh $S || FAILED="$FAILED $S"; done; if [ -n "$FAILED" ]; then echo "Failed scenarios:$FAILED"; exit 1; fi From 5d1aa6af146ed11bb900bb89b2e1f62cbc88081d Mon Sep 17 00:00:00 2001 From: Nicolas Catoni Date: Wed, 25 Mar 2026 16:51:40 +0100 Subject: [PATCH 35/35] Test --- .gitlab/generate-package.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitlab/generate-package.php b/.gitlab/generate-package.php index 767e2e2a209..d03bed35c01 100644 --- a/.gitlab/generate-package.php +++ b/.gitlab/generate-package.php @@ -1276,10 +1276,10 @@ extends: .system_tests timeout: 4h rules: - - if: $CI_COMMIT_REF_NAME == "master" - when: on_success - - if: $CI_PIPELINE_SOURCE == "schedule" - when: on_success + #- if: $CI_COMMIT_REF_NAME == "master" + # when: on_success + #- if: $CI_PIPELINE_SOURCE == "schedule" + # when: on_success - when: manual allow_failure: true script: