Skip to content

ci(benchmarks): support BP_EXTERNAL_S3_URL override#9155

Merged
igoragoli merged 6 commits into
masterfrom
augusto/external-s3-url-override
Jul 8, 2026
Merged

ci(benchmarks): support BP_EXTERNAL_S3_URL override#9155
igoragoli merged 6 commits into
masterfrom
augusto/external-s3-url-override

Conversation

@igoragoli

@igoragoli igoragoli commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

What does this PR do?

Adds an opt-in BP_EXTERNAL_S3_URL override to .gitlab/benchmarks/upload-results-to-s3.sh. When set, it overrides the S3 destination prefix for the artifact upload. When unset, the existing path is used unchanged.

BP_EXTERNAL_S3_URL is validated to start with s3://relenv-benchmarking-data/ before use. Any other value exits non-zero with a clear error, preventing uploads to an arbitrary bucket.

Motivation

APMSP-2893 Set up flaky benchmark monitoring

  • benchmarking-platform-tools will orchestrate dd-trace-js benchmark jobs for monitoring benchmark health and needs results uploaded under a s3 URL it controls.
  • The override lets the orchestrator pass that prefix in via an env var, without changing default behavior.

This will also be used on allowing libdatadog to run benchmarks on dd-trace-js, futurely: (WIP) Libdatadog benchmarks on dd-trace-* repos

Add optional EXTERNAL_S3_URL to redirect uploads to an orchestrator-controlled
prefix, with a prefix validation guard (must stay within relenv-benchmarking-data).
Write a _READY marker object after each upload so downstream pollers know the
sample is complete. Default behavior is unchanged when EXTERNAL_S3_URL is unset.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
@dd-octo-sts

dd-octo-sts Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Overall package size

Self size: 6.65 MB
Deduped: 7.31 MB
No deduping: 7.31 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | import-in-the-middle | 3.3.1 | 122.62 kB | 437.94 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | dc-polyfill | 0.1.11 | 25.74 kB | 25.74 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

Collapse the override to ${EXTERNAL_S3_URL:-default} with a single prefix
guard and the _READY marker, so the per-repo diff stays small when this is
replicated across dd-trace-* repos.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
@datadog-prod-us1-6

datadog-prod-us1-6 Bot commented Jun 30, 2026

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
Patch Coverage: 100.00%
Overall Coverage: 96.50% (+0.00%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 39bf127 | Docs | Datadog PR Page | Give us feedback!

Completion is signalled by the bench pipeline reaching success, polled by the
orchestrator, so a per-sample S3 marker is unnecessary. Leaves the override and
its prefix guard as the only change.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
@igoragoli igoragoli changed the title ci(benchmarks): support EXTERNAL_S3_URL override and _READY marker ci(benchmarks): support EXTERNAL_S3_URL override for uploads Jun 30, 2026
@igoragoli igoragoli changed the title ci(benchmarks): support EXTERNAL_S3_URL override for uploads ci(benchmarks): support EXTERNAL_S3_URL override Jun 30, 2026
@pr-commenter

pr-commenter Bot commented Jun 30, 2026

Copy link
Copy Markdown

Benchmarks

Benchmark execution time: 2026-07-08 14:59:47

Comparing candidate commit 39bf127 in PR branch augusto/external-s3-url-override with baseline commit 6ffe627 in branch master.

📊 Benchmarking dashboard

Found 0 performance improvements and 0 performance regressions! Performance is the same for 2312 metrics, 46 unstable metrics.

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

Unstable benchmarks

These benchmarks have a confidence interval too wide to call a change; treat them as noise rather than signal.

scenario:appsec-appsec-enabled-24

  • unstable execution_time [-195.245ms; +138.717ms] or [-7.458%; +5.299%]

scenario:appsec-appsec-enabled-26

  • unstable execution_time [-229.316ms; +225.170ms] or [-8.993%; +8.830%]

scenario:appsec-appsec-enabled-with-attacks-26

  • unstable execution_time [-183.187ms; +128.111ms] or [-6.358%; +4.447%]

scenario:appsec-control-20

  • unstable execution_time [-139.922ms; +113.670ms] or [-8.539%; +6.937%]

scenario:appsec-control-24

  • unstable execution_time [-113272.024µs; +112915.158µs] or [-9.173%; +9.144%]

scenario:appsec-control-26

  • unstable execution_time [-119.249ms; +136.864ms] or [-9.704%; +11.137%]

scenario:appsec-iast-no-vulnerability-control-20

  • unstable execution_time [-9.885ms; +16.442ms] or [-3.883%; +6.459%]

scenario:appsec-iast-no-vulnerability-iast-enabled-always-active-20

  • unstable execution_time [-14.125ms; +22.059ms] or [-5.413%; +8.454%]

scenario:appsec-iast-no-vulnerability-iast-enabled-default-config-20

  • unstable execution_time [-10.220ms; +18.842ms] or [-3.981%; +7.339%]

scenario:appsec-iast-with-vulnerability-control-20

  • unstable cpu_usage_percentage [-5.608%; +4.431%]
  • unstable execution_time [-32.027ms; +40.607ms] or [-5.868%; +7.440%]

scenario:debugger-line-probe-with-snapshot-default-24

  • unstable cpu_user_time [-1760.118ms; +486.943ms] or [-20.763%; +5.744%]
  • unstable execution_time [-1810.502ms; +458.774ms] or [-19.638%; +4.976%]
  • unstable instructions [-16.5G instructions; +5.2G instructions] or [-23.742%; +7.442%]
  • unstable throughput [-127.270op/s; +516.388op/s] or [-3.570%; +14.487%]

scenario:debugger-line-probe-with-snapshot-default-26

  • unstable cpu_user_time [-4046.799ms; +4024.033ms] or [-35.113%; +34.916%]
  • unstable execution_time [-4095.567ms; +4048.288ms] or [-33.401%; +33.016%]
  • unstable instructions [-35914.8M instructions; +35957.2M instructions] or [-36.904%; +36.948%]
  • unstable max_rss_usage [-13366.388KB; +12559.188KB] or [-8.034%; +7.549%]
  • unstable throughput [-823.830op/s; +839.257op/s] or [-29.285%; +29.833%]

scenario:debugger-line-probe-with-snapshot-minimal-24

  • unstable cpu_user_time [-1744.827ms; +592.509ms] or [-20.485%; +6.956%]
  • unstable execution_time [-1833.464ms; +636.379ms] or [-19.887%; +6.902%]
  • unstable instructions [-14.7G instructions; +4.8G instructions] or [-21.097%; +6.921%]
  • unstable throughput [-199.542op/s; +515.219op/s] or [-5.586%; +14.423%]

scenario:debugger-line-probe-with-snapshot-minimal-26

  • unstable cpu_user_time [-2300.559ms; +707.322ms] or [-24.199%; +7.440%]
  • unstable execution_time [-2319.677ms; +695.306ms] or [-22.668%; +6.794%]
  • unstable instructions [-20.6G instructions; +6.5G instructions] or [-26.010%; +8.217%]
  • unstable throughput [-131.486op/s; +467.558op/s] or [-4.060%; +14.437%]

scenario:debugger-line-probe-without-snapshot-24

  • unstable cpu_user_time [-2256.349ms; +2241.875ms] or [-25.196%; +25.034%]
  • unstable execution_time [-2256.702ms; +2233.553ms] or [-23.339%; +23.099%]
  • unstable instructions [-18899.7M instructions; +18817.6M instructions] or [-25.743%; +25.631%]
  • unstable max_rss_usage [-8746.753KB; +8717.153KB] or [-5.504%; +5.486%]
  • unstable throughput [-628.673op/s; +639.440op/s] or [-18.367%; +18.682%]

scenario:debugger-line-probe-without-snapshot-26

  • unstable cpu_user_time [-2905.981ms; +2894.130ms] or [-29.057%; +28.938%]
  • unstable execution_time [-3035.777ms; +3053.431ms] or [-28.316%; +28.480%]
  • unstable instructions [-25722.6M instructions; +25663.1M instructions] or [-30.742%; +30.671%]
  • unstable max_rss_usage [-8405.525KB; +9750.325KB] or [-5.206%; +6.039%]
  • unstable throughput [-655.621op/s; +648.902op/s] or [-20.977%; +20.762%]

scenario:dogstatsd-with-tags-20

  • unstable throughput [-161882.700op/s; +3404.767op/s] or [-9.884%; +0.208%]

scenario:fs-subscribed-24

  • unstable execution_time [-13.220ms; +27.339ms] or [-3.273%; +6.769%]

scenario:plugin-graphql-long-with-depth-off-20

  • unstable max_rss_usage [-7182.288KB; +7909.145KB] or [-5.538%; +6.098%]

scenario:plugin-graphql-long-with-depth-on-max-20

  • unstable cpu_user_time [-730.432ms; +781.506ms] or [-5.690%; +6.088%]
  • unstable execution_time [-735.572ms; +791.644ms] or [-5.605%; +6.032%]
  • unstable throughput [-3.610op/s; +3.388op/s] or [-5.885%; +5.522%]

scenario:plugin-memcached-get-24

  • unstable execution_time [-114.708ms; +164.934ms] or [-4.755%; +6.837%]

scenario:test-optimization-large-suite-20

  • unstable max_rss_usage [-5185.960KB; +3454.294KB] or [-6.458%; +4.301%]

@codecov

codecov Bot commented Jun 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 96.54%. Comparing base (6ffe627) to head (39bf127).

Additional details and impacted files
@@           Coverage Diff            @@
##           master    #9155    +/-   ##
========================================
  Coverage   96.54%   96.54%            
========================================
  Files         915      915            
  Lines      121034   121034            
  Branches    20808    20610   -198     
========================================
+ Hits       116849   116851     +2     
+ Misses       4185     4183     -2     
Flag Coverage Δ
aiguard 53.56% <ø> (-0.05%) ⬇️
aiguard-integration 57.00% <ø> (ø)
apm-bucket-0 53.79% <ø> (-0.05%) ⬇️
apm-bucket-1 58.09% <ø> (-0.05%) ⬇️
apm-bucket-2 56.11% <ø> (-0.05%) ⬇️
apm-capabilities-tracing 60.29% <ø> (ø)
apm-integrations-aerospike 52.94% <ø> (-0.05%) ⬇️
apm-integrations-confluentinc-kafka-javascript 57.07% <ø> (-0.05%) ⬇️
apm-integrations-couchbase 53.26% <ø> (-0.05%) ⬇️
apm-integrations-http 57.98% <ø> (-0.04%) ⬇️
apm-integrations-kafkajs 57.72% <ø> (-0.05%) ⬇️
apm-integrations-next 54.24% <ø> (-0.05%) ⬇️
apm-integrations-prisma 54.18% <ø> (-0.05%) ⬇️
apm-integrations-tedious 53.04% <ø> (-0.05%) ⬇️
appsec 69.03% <ø> (-0.04%) ⬇️
appsec-express_fastify_graphql 65.70% <ø> (-0.03%) ⬇️
appsec-integration 45.50% <ø> (ø)
appsec-kafka_ldapjs_lodash 59.12% <ø> (-0.04%) ⬇️
appsec-mongodb-core_mongoose_mysql 62.28% <ø> (-0.04%) ⬇️
appsec-next 52.86% <ø> (-0.04%) ⬇️
appsec-node-serialize_passport_postgres 61.92% <ø> (-0.04%) ⬇️
appsec-sourcing_stripe_template 60.27% <ø> (-0.04%) ⬇️
debugger 65.69% <ø> (-0.02%) ⬇️
instrumentations-bucket-0 48.75% <ø> (-0.05%) ⬇️
instrumentations-bucket-1 54.97% <ø> (-0.05%) ⬇️
instrumentations-bucket-10 56.64% <ø> (-0.05%) ⬇️
instrumentations-bucket-11 48.74% <ø> (-0.05%) ⬇️
instrumentations-bucket-12 48.84% <ø> (-0.05%) ⬇️
instrumentations-bucket-13 48.67% <ø> (-0.05%) ⬇️
instrumentations-bucket-2 49.73% <ø> (-0.05%) ⬇️
instrumentations-bucket-3 53.83% <ø> (-0.05%) ⬇️
instrumentations-bucket-4 49.16% <ø> (-0.05%) ⬇️
instrumentations-bucket-5 53.01% <ø> (-0.05%) ⬇️
instrumentations-bucket-6 55.62% <ø> (-0.05%) ⬇️
instrumentations-bucket-7 53.60% <ø> (-0.05%) ⬇️
instrumentations-bucket-8 54.64% <ø> (-0.05%) ⬇️
instrumentations-bucket-9 56.10% <ø> (-0.04%) ⬇️
instrumentations-instrumentation-couchbase 48.17% <ø> (-0.05%) ⬇️
instrumentations-integration-esbuild 33.90% <ø> (ø)
llmobs-ai_anthropic_bedrock 57.75% <ø> (-0.04%) ⬇️
llmobs-bucket-1 56.82% <ø> (-0.04%) ⬇️
llmobs-openai 57.58% <ø> (-0.04%) ⬇️
llmobs-sdk 59.98% <ø> (-0.05%) ⬇️
llmobs-vertex-ai 54.22% <ø> (-0.05%) ⬇️
master-coverage 96.54% <ø> (?)
openfeature 54.60% <ø> (+0.08%) ⬆️
openfeature-unit 49.82% <ø> (-0.05%) ⬇️
platform-core_esbuild_instrumentations-misc 38.40% <ø> (-0.03%) ⬇️
platform-integration 62.18% <ø> (ø)
platform-shimmer_unit-guardrails_webpack 37.19% <ø> (-0.03%) ⬇️
plugins-bucket-0 53.18% <ø> (-0.05%) ⬇️
plugins-bucket-1 55.07% <ø> (ø)
plugins-bucket-11 56.73% <ø> (-0.05%) ⬇️
plugins-bucket-17 56.75% <ø> (-0.05%) ⬇️
plugins-bucket-18 57.60% <ø> (-0.05%) ⬇️
plugins-bucket-19 57.13% <ø> (-0.05%) ⬇️
plugins-bucket-20 59.38% <ø> (-0.05%) ⬇️
plugins-bucket-4 53.85% <ø> (-0.05%) ⬇️
plugins-bullmq_cassandra_cookie 57.40% <ø> (-0.05%) ⬇️
plugins-cookie-parser_crypto_dd-trace-api 52.32% <ø> (-0.05%) ⬇️
plugins-fetch_fs_generic-pool 54.46% <ø> (-0.05%) ⬇️
plugins-google-cloud-pubsub_grpc_handlebars 59.88% <ø> (-0.05%) ⬇️
plugins-hapi_hono_ioredis 55.87% <ø> (-0.05%) ⬇️
plugins-jest_knex_langgraph 51.66% <ø> (-0.05%) ⬇️
plugins-ldapjs_light-my-request_limitd-client 53.44% <ø> (-0.05%) ⬇️
plugins-lodash_mariadb_memcached 54.21% <ø> (-0.05%) ⬇️
plugins-mongodb_mongodb-core_mongoose 55.46% <ø> (-0.05%) ⬇️
plugins-multer_mysql_mysql2 54.37% <ø> (-0.05%) ⬇️
plugins-nats_node-serialize_opensearch 56.07% <ø> (-0.05%) ⬇️
plugins-passport-http_pino_postgres 54.75% <ø> (-0.05%) ⬇️
plugins-process_pug_redis 53.85% <ø> (-0.07%) ⬇️
plugins-undici_url_valkey 54.30% <ø> (-0.13%) ⬇️
plugins-vm_winston_ws 55.27% <ø> (-0.05%) ⬇️
profiling 58.21% <ø> (-0.05%) ⬇️
serverless-aws-sdk-aws-sdk 50.66% <ø> (-0.04%) ⬇️
serverless-aws-sdk-bedrockruntime 50.68% <ø> (-0.05%) ⬇️
serverless-aws-sdk-client 51.95% <ø> (-0.05%) ⬇️
serverless-aws-sdk-dynamodb 51.75% <ø> (-0.05%) ⬇️
serverless-aws-sdk-eventbridge 46.22% <ø> (-0.05%) ⬇️
serverless-aws-sdk-kinesis 54.70% <ø> (-0.05%) ⬇️
serverless-aws-sdk-lambda 52.78% <ø> (-0.05%) ⬇️
serverless-aws-sdk-s3 51.52% <ø> (-0.05%) ⬇️
serverless-aws-sdk-serverless-peer-service 54.73% <ø> (-0.05%) ⬇️
serverless-aws-sdk-sns 55.48% <ø> (-0.05%) ⬇️
serverless-aws-sdk-sqs 55.91% <ø> (-0.05%) ⬇️
serverless-aws-sdk-stepfunctions 51.25% <ø> (-0.05%) ⬇️
serverless-aws-sdk-util 48.45% <ø> (-0.05%) ⬇️
serverless-bucket-0 55.23% <ø> (ø)
serverless-bucket-1 56.01% <ø> (-0.05%) ⬇️
test-optimization-cucumber 72.93% <ø> (-0.04%) ⬇️
test-optimization-cypress 66.40% <ø> (+0.01%) ⬆️
test-optimization-jest 73.89% <ø> (-0.05%) ⬇️
test-optimization-mocha 74.30% <ø> (+0.05%) ⬆️
test-optimization-playwright-playwright-atr 61.60% <ø> (-0.01%) ⬇️
test-optimization-playwright-playwright-efd 61.79% <ø> (ø)
test-optimization-playwright-playwright-final-status 61.74% <ø> (+0.06%) ⬆️
test-optimization-playwright-playwright-impacted-tests 61.47% <ø> (+0.16%) ⬆️
test-optimization-playwright-playwright-reporting 61.37% <ø> (-0.01%) ⬇️
test-optimization-playwright-playwright-test-management 62.28% <ø> (-0.12%) ⬇️
test-optimization-playwright-playwright-test-span 61.51% <ø> (-0.06%) ⬇️
test-optimization-selenium 60.69% <ø> (-0.17%) ⬇️
test-optimization-testopt 59.16% <ø> (+0.08%) ⬆️
test-optimization-vitest 72.75% <ø> (+0.03%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@igoragoli
igoragoli marked this pull request as ready for review June 30, 2026 17:43
@igoragoli
igoragoli requested review from a team as code owners June 30, 2026 17:43
Namespace the orchestrator-supplied override with the BP_ prefix, matching the
other bp-tools contract variables.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
@igoragoli igoragoli changed the title ci(benchmarks): support EXTERNAL_S3_URL override ci(benchmarks): support BP_EXTERNAL_S3_URL override for uploads Jun 30, 2026
@igoragoli igoragoli changed the title ci(benchmarks): support BP_EXTERNAL_S3_URL override for uploads ci(benchmarks): support BP_EXTERNAL_S3_URL override Jun 30, 2026
@igoragoli
igoragoli merged commit 506615c into master Jul 8, 2026
688 of 689 checks passed
@igoragoli
igoragoli deleted the augusto/external-s3-url-override branch July 8, 2026 15:48
This was referenced Jul 9, 2026
igoragoli added a commit to DataDog/dd-trace-go that referenced this pull request Jul 9, 2026
### What does this PR do?

Adds an opt-in `BP_EXTERNAL_S3_URL` override to the microbenchmark
upload path (`.gitlab/benchmarks/micro/gitlab-ci.yml`). When set, it
overrides the S3 destination prefix for the artifact upload. When unset,
the existing path is used unchanged.

The value is used as-is when set; an empty value falls back to the
existing default destination.

### Motivation

[APMSP-2893 Set up flaky benchmark
monitoring](https://datadoghq.atlassian.net/browse/APMSP-2893)

- benchmarking-platform-tools will orchestrate dd-trace-go benchmark
jobs for monitoring benchmark health and needs results uploaded under a
s3 URL it controls.
- The override lets the orchestrator pass that prefix in via an env var,
without changing default behavior.

This mirrors the same change on dd-trace-js:
DataDog/dd-trace-js#9155

### Reviewer's Checklist

- [ ] Changed code has unit tests for its functionality at or near 100%
coverage.
- [ ] [System-Tests](https://github.com/DataDog/system-tests/) covering
this feature have been added and enabled with the va.b.c-dev version
tag.
- [ ] There is a benchmark for any new code, or changes to existing
code.
- [ ] If this interacts with the agent in a new way, a system test has
been added.
- [ ] New code is free of linting errors. You can check this by running
`make lint` locally.
- [ ] New code doesn't break existing tests. You can check this by
running `make test` locally.
- [ ] Add an appropriate team label so this PR gets put in the right
place for the release notes.
- [ ] All generated files are up to date. You can check this by running
`make generate` locally.
- [ ] Non-trivial go.mod changes, e.g. adding new modules, are reviewed
by @DataDog/dd-trace-go-guild. Make sure all nested modules are up to
date by running `make fix-modules` locally.
juan-fernandez pushed a commit that referenced this pull request Jul 10, 2026
* ci(benchmarks): support EXTERNAL_S3_URL override and _READY marker

Add optional EXTERNAL_S3_URL to redirect uploads to an orchestrator-controlled
prefix, with a prefix validation guard (must stay within relenv-benchmarking-data).
Write a _READY marker object after each upload so downstream pollers know the
sample is complete. Default behavior is unchanged when EXTERNAL_S3_URL is unset.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* ci(benchmarks): trim EXTERNAL_S3_URL override to minimal form

Collapse the override to ${EXTERNAL_S3_URL:-default} with a single prefix
guard and the _READY marker, so the per-repo diff stays small when this is
replicated across dd-trace-* repos.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* ci(benchmarks): drop _READY marker, keep EXTERNAL_S3_URL only

Completion is signalled by the bench pipeline reaching success, polled by the
orchestrator, so a per-sample S3 marker is unnecessary. Leaves the override and
its prefix guard as the only change.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* ci(benchmarks): rename override var to BP_EXTERNAL_S3_URL

Namespace the orchestrator-supplied override with the BP_ prefix, matching the
other bp-tools contract variables.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

---------

Co-authored-by: Claude Opus 4.8 <[email protected]>
juan-fernandez pushed a commit that referenced this pull request Jul 10, 2026
* ci(benchmarks): support EXTERNAL_S3_URL override and _READY marker

Add optional EXTERNAL_S3_URL to redirect uploads to an orchestrator-controlled
prefix, with a prefix validation guard (must stay within relenv-benchmarking-data).
Write a _READY marker object after each upload so downstream pollers know the
sample is complete. Default behavior is unchanged when EXTERNAL_S3_URL is unset.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* ci(benchmarks): trim EXTERNAL_S3_URL override to minimal form

Collapse the override to ${EXTERNAL_S3_URL:-default} with a single prefix
guard and the _READY marker, so the per-repo diff stays small when this is
replicated across dd-trace-* repos.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* ci(benchmarks): drop _READY marker, keep EXTERNAL_S3_URL only

Completion is signalled by the bench pipeline reaching success, polled by the
orchestrator, so a per-sample S3 marker is unnecessary. Leaves the override and
its prefix guard as the only change.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* ci(benchmarks): rename override var to BP_EXTERNAL_S3_URL

Namespace the orchestrator-supplied override with the BP_ prefix, matching the
other bp-tools contract variables.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

---------

Co-authored-by: Claude Opus 4.8 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants