Repository navigation
Releases: DataDog/rules_test_optimization
Release list
v1.4.0
v1.4.0
Added
- Release bundles with SHA256 checksums, archive-based installation snippets
for core/companions/Go forks, and notes generated from this changelog. Tag
workflows prepare a draft only after all release validations pass; manual
branch runs produce a downloadable preview without publishing.
Changed
- Recommend release archives for installation. Go Bzlmod bootstrap now infers
and preserves checksum-pinned archive overrides and mirrors without requiring
a Git override for the Orchestrion-enabled fork. - Use Bazel
8.8.2for repository and example validation.
Fixed
- Exclude development-only Bazel configuration from the generated
workspace_runtimeandbzlmod_runtimeGo patch profiles.
Install v1.4.0
Source commit: 87b52ec1dd0e0577a8d210bbfca5422e48864b6e.
Use the same archive and checksum for core, companions, and the Go fork.
These snippets install dependencies; follow the README for runtime/toolchain setup.
For Bzlmod, add the core block and only the companions you use.
For Go, also add one of the rules_go blocks below before running the bootstrap.
WORKSPACE users should use the public language repository helpers after installing core.
Bzlmod
datadog-rules-test-optimization
bazel_dep(name = "datadog-rules-test-optimization", version = "1.4.0")
archive_override(
module_name = "datadog-rules-test-optimization",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0",
)datadog-rules-test-optimization-go
bazel_dep(name = "datadog-rules-test-optimization-go", version = "1.4.0")
archive_override(
module_name = "datadog-rules-test-optimization-go",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/go",
)datadog-rules-test-optimization-python
bazel_dep(name = "datadog-rules-test-optimization-python", version = "1.4.0")
archive_override(
module_name = "datadog-rules-test-optimization-python",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/python",
)datadog-rules-test-optimization-java
bazel_dep(name = "datadog-rules-test-optimization-java", version = "1.4.0")
archive_override(
module_name = "datadog-rules-test-optimization-java",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/java",
)datadog-rules-test-optimization-nodejs
bazel_dep(name = "datadog-rules-test-optimization-nodejs", version = "1.4.0")
archive_override(
module_name = "datadog-rules-test-optimization-nodejs",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/nodejs",
)datadog-rules-test-optimization-dotnet
bazel_dep(name = "datadog-rules-test-optimization-dotnet", version = "1.4.0")
archive_override(
module_name = "datadog-rules-test-optimization-dotnet",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/dotnet",
)datadog-rules-test-optimization-ruby
bazel_dep(name = "datadog-rules-test-optimization-ruby", version = "1.4.0")
archive_override(
module_name = "datadog-rules-test-optimization-ruby",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/ruby",
)Go fork (choose one supported upstream)
v0_60_0
bazel_dep(name = "rules_go", version = "0.60.0")
archive_override(
module_name = "rules_go",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/third_party/rgo/v0_60_0/base",
)v0_61_1
bazel_dep(name = "rules_go", version = "0.61.1")
archive_override(
module_name = "rules_go",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/third_party/rgo/v0_61_1/base",
)v0_62_0
bazel_dep(name = "rules_go", version = "0.62.0")
archive_override(
module_name = "rules_go",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/third_party/rgo/v0_62_0/base",
)v0_63_0
bazel_dep(name = "rules_go", version = "0.63.0")
archive_override(
module_name = "rules_go",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/third_party/rgo/v0_63_0/base",
)WORKSPACE
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")datadog-rules-test-optimization
http_archive(
name = "datadog-rules-test-optimization",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0",
)datadog-rules-test-optimization-go
http_archive(
name = "datadog-rules-test-optimization-go",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/go",
repo_mapping = {"@rules_go": "@io_bazel_rules_go"},
)datadog-rules-test-optimization-python
http_archive(
name = "datadog-rules-test-optimization-python",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/python",
)datadog-rules-test-optimization-java
http_archive(
name = "datadog-rules-test-optimization-java",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/java",
)datadog-rules-test-optimization-nodejs
http_archive(
name = "datadog-rules-test-optimization-nodejs",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/nodejs",
)datadog-rules-test-optimization-dotnet
http_archive(
name = "datadog-rules-test-optimization-dotnet",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/dotnet",
)datadog-rules-test-optimization-ruby
http_archive(
name = "datadog-rules-test-optimization-ruby",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/modules/ruby",
)Go fork (choose one supported upstream)
v0_60_0
http_archive(
name = "io_bazel_rules_go",
urls = ["https://github.com/DataDog/rules_test_optimization/releases/download/v1.4.0/rules_test_optimization-1.4.0.tar.gz"],
sha256 = "68d4a30731a5b04ca1bece9bc69d149f2f4205d71b980965736088b36e36705a",
strip_prefix = "rules_test_optimization-1.4.0/third_party/rgo/v0_60_0/base",
)v0_61_1
http_archive(
name = "io_bazel_rules_go",
urls = ["https://github.com/DataDog/...v1.3.0
v1.3.0 adds manifest-driven onboarding for Go and Python monorepos, updates the Go instrumentation stack, and makes the Python uploader the default on all supported platforms. It also improves Bazel cache reuse and reduces routine CI log output.
Upgrade notes
- Uploader: Python 3.10+ is now required. Install it on the machine running
dd_upload_payloads. If it is not available aspython3orpythononPATH, setDD_TEST_OPTIMIZATION_PYTHONorPYTHON. For a temporary rollback to the former Bash/curl or PowerShell uploader, setuse_python_uploader = Falseon yourdd_payload_uploadertarget. - Go: Orchestrion v1.12.0 requires Go 1.25.0+. The maintained integration uses
dd-trace-go/v2v2.9.1. The supportedrules_goprofiles are v0.60.0, v0.61.1, v0.62.0, and v0.63.0. - Rerun
dd_topt_go_bootstrapwith--write-bazelrcwhen upgrading a Go consumer from v1.2.0. The idempotent update enables metadata sync and Orchestrion together through--config=test-optimization. Omitting the config disables both. Consumers that intentionally setenabled_by_env = Falsemust also keep the Orchestrion build setting enabled.
Changelog
Added
- Manifest-driven onboarding for consumer-managed Go/Python target sets through
test_optimization_manifest_syncandtest_optimization_manifest_sync_extension. The generated repository provides target/context mappings, narrow module payloads, bundled contexts, and an exact-target file without requiring a checked-in service registry. - Dynamic exact-target input support in the doctor and convenience target macro, with coverage for disabled execution, deterministic manifests, no-host-Go execution, multi-context enrichment, and metadata cache isolation.
- Reusable Go WORKSPACE helpers for config-gated metadata sync and fixed-name Orchestrion repository declarations, matching the public Bzlmod onboarding contract.
- Maintained Orchestrion forks and public consumer patch profiles for
rules_gov0.62.0 and v0.63.0. DD_TEST_OPTIMIZATION_LOG_LEVELfor sync, doctor, and uploader diagnostics:ERROR,WARN,INFO, orDEBUG. The default isINFO; per-output cached-payload skip messages now appear only atDEBUG.
Changed
- The shared Python uploader is now the default on Linux, macOS, and Windows. See the upgrade notes for interpreter selection and the explicit legacy rollback.
- Ordinary host-side Orchestrion bootstrap commands reuse Go's configured or default build and module caches when writable. Read-only environments and unsupported cache queries fall back to repository-local caches. The Datadog cache stores final patched bootstrap artifacts, and disabled configuration leaves it untouched.
- Go payload selection uses the module identifiers emitted by the runtime, including escaped fallback names and external
_testpackages. A package shard carries internal and external test metadata when they share a test binary. - The Go integration now uses Orchestrion v1.12.0 and
dd-trace-go/v2v2.9.1, preserving upstream test-variant resolution and the Bazel resolver compatibility layer. - The public Go Bzlmod extension defaults to
enabled_by_env = True. Disabled Go/Python macros preserve the consumer's ordinary public test target without Test Optimization runtime activity. - Python payload selection derives module identifiers from runtime and Bazel package metadata. Explicit identifiers and overrides must match available module groups; inferred misses and metadata without groups keep the full-bundle fallback.
- Go WORKSPACE bootstrap generates one central config-gated
dd_go_testwrapper. The former optimized wrapper name remains an alias to the same function.
Fixed
- Static Go descriptors select payloads using each test package's effective
importpathand the synchronized module catalog. This restores per-package cache invalidation without eagerly resolving unselected service repositories. - Generated Go payload/metadata helpers are manual and inherit target compatibility. Wildcard
build,test, andcquerywork with Test Optimization disabled; unconfiguredquerycan still list the targets. - Go analysis reports migration guidance if metadata is enabled while the global Orchestrion setting is disabled, instead of silently dropping instrumentation during a partial upgrade.
- Disabled Go analysis resolves empty Orchestrion repository targets before host-Go discovery or source fetching, so declaring the integration does not make ordinary targets require a host Go installation.
- Generated Bzlmod runtime patches retain the Orchestrion module-extension wiring, including the disabled repository interface.
- Determinism checks cover
GoStdlib,GoSyntheticTestmainHelpers, syntheticGoCompilePkg, andGoLinkacross all maintainedrules_goversions. The builder normalizes temporary paths, CGO seeds, source trim paths, and copied helper build IDs while preserving relative CGO inputs. Ordinary Go actions cannot consume the instrumented stdlib cache. - Release validation rejects a tag that does not match the core module version and checks version alignment across all companions.
Source modules
Core and all six companions declare version 1.3.0 in the same source archive.
| Module | Source directory |
|---|---|
datadog-rules-test-optimization |
Repository root |
datadog-rules-test-optimization-go |
modules/go |
datadog-rules-test-optimization-python |
modules/python |
datadog-rules-test-optimization-java |
modules/java |
datadog-rules-test-optimization-nodejs |
modules/nodejs |
datadog-rules-test-optimization-dotnet |
modules/dotnet |
datadog-rules-test-optimization-ruby |
modules/ruby |
This GitHub release provides source archives. Bazel Central Registry publication is a separate step.
Validation
The Release validation workflow passed all 20 jobs on commit 0c8b9ac9634a2a283230efda77d64e00f8586a16. Consumer E2E validation also passed on Linux, macOS, and Windows, including the Go WORKSPACE/Bzlmod fixture matrix.
v1.2.0
What's Changed
- [python] use latest ddtrace by @gnufede in #157
- go: add standard testing Orchestrion optimization mode by @tonyredondo in #156
- feat: version 1.2.0 by @tonyredondo in #158
Full Changelog: v1.1.0...v1.2.0
v1.1.0
What's Changed
- core: preserve raw executable basename in unix wrapper symlink by @daniel-mohedano in #146
- java: fix testonly selector by @daniel-mohedano in #152
- feat: java onboarding skill by @daniel-mohedano in #151
- java: onboarding skill updates by @daniel-mohedano in #154
- feat: version 1.1.0 by @daniel-mohedano in #153
Full Changelog: v1.0.0...v1.1.0
v1.0.0
What's Changed
- Add sts rule by @tonyredondo in #1
- Rename github.rules_test_optimization_tests.sts.yml to github.rules_test_optimization_tests.sts.yaml by @tonyredondo in #2
- Kill switches implementation by @tonyredondo in #3
- initial windows support by @tonyredondo in #4
- Improvements (upload rule, filter by backend module) by @tonyredondo in #5
- Multi service mode and documentation by @tonyredondo in #6
- RFC updates by @tonyredondo in #7
- Update the topt_go_test macro to use a real macro + aspect to infer the go importpath by @tonyredondo in #8
- General updates by @tonyredondo in #9
- Implement workspace-level payload uploader using TEST_UNDECLARED_OUTPUTS_DIR by @tonyredondo in #10
- uploader: normalize metadata and add schema checks by @tonyredondo in #12
- uploader: fix PowerShell interpolation before colons by @tonyredondo in #13
- uploader: handle repo-prefixed runfile manifest keys by @tonyredondo in #14
- go: default rundir and keep fixture data explicit by @tonyredondo in #15
- uploader: add runfiles diagnostics and direct-path fallback by @tonyredondo in #16
- uploader: enrich test events with CODEOWNERS metadata by @tonyredondo in #17
- sync: harden validation and refresh docs by @tonyredondo in #18
- stability: harden sync/uploader paths and add regression tests by @tonyredondo in #19
- stability: harden sync/uploader security and extension validation by @tonyredondo in #20
- repo: add CODEOWNERS for ci-app-libraries by @tonyredondo in #21
- sync: align DD_TEST_OPTIMIZATION env and cache/http layout by @tonyredondo in #22
- refactor: split orchestration into core and go packages by @tonyredondo in #23
- stability: harden sync validation and align split workflows by @tonyredondo in #24
- docs: refactor first-release onboarding and split references by @tonyredondo in #25
- stability: harden docs/examples and uploader coverage by @tonyredondo in #26
- docs: align language layout with companion modules by @tonyredondo in #27
- stability: remediate validated findings across core, go, and docs by @tonyredondo in #28
- stability: harden sync/uploader reliability and CI guardrails by @tonyredondo in #29
- stability: close validated audit findings remediation by @tonyredondo in #34
- stability: complete audit findings remediation and closure ledger by @tonyredondo in #35
- stability: implement full findings remediation matrix by @tonyredondo in #36
- stability: remediate validated findings backlog end-to-end by @tonyredondo in #37
- stability: implement audit findings remediation plan by @tonyredondo in #38
- Add Python and Java companion modules with selector macros by @tonyredondo in #39
- stability: add companion module parity for five runtimes by @tonyredondo in #42
- stability: remediate validated audit findings end-to-end by @tonyredondo in #43
- fix: harden sync retry budget and powershell uploader by @tonyredondo in #44
- fix: harden selector/sync/uploader stability paths by @tonyredondo in #45
- fix: redact API base credentials in sync logs by @tonyredondo in #47
- deps(actions): bump actions/checkout from 4.2.2 to 6.0.2 by @dependabot[bot] in #30
- chore: sync MODULE.bazel.lock with example stub service keys by @tonyredondo in #48
- deps(actions): bump actions/dependency-review-action from 4.7.2 to 4.8.3 by @dependabot[bot] in #40
- deps(actions): bump github/codeql-action from 4c50b6f6fd9dc6fe03111c2d045c8be2a724cce1 to 6bb031afdd8eb862ea3fc1848194185e076637e5 by @dependabot[bot] in #31
- refactor: unify endpoint overrides to agentless/agent URLs by @tonyredondo in #49
- Codex/go orchestrion reset seam by @tonyredondo in #53
- chore: disable automated dependency updater config [incident-51602] by @moezein0 in #58
- go: support configurable dd-trace-go version selection by @tonyredondo in #54
- uploader: reuse saved context at runtime by @tonyredondo in #70
- companion: default DD_SERVICE from sync metadata by @tonyredondo in #72
- uploader: add telemetry payload support by @tonyredondo in #73
- go: bump default dd-trace-go bootstrap version by @tonyredondo in #74
- [codex] Rebase rules_go orchestrion fork onto v0.60.0 by @tonyredondo in #75
- Add WORKSPACE Go companion support by @tonyredondo in #76
- Port internal rules_go patch series into vendored Orchestrion fork by @tonyredondo in #78
- uploader: match contexts per payload by @tonyredondo in #80
- go: add opt-in source staging for AST lookup by @tonyredondo in #83
- feat(python): reduce onboarding boilerplate in companion macro by @gnufede in #82
- go: split rules_go optional patch bundle by @tonyredondo in #84
- go: make Orchestrion module resolution hermetic by @tonyredondo in #85
- fix: repair rules_go patch series base metadata by @tonyredondo in #86
- rules_go: publish squash-safe lazy CC patch contract by @tonyredondo in #91
- go: fix Orchestrion stdlib transition for pilot by @tonyredondo in #92
- Preserve rules_go stdlib cache outputs by @tonyredondo in #93
- go: simplify Orchestrion onboarding by @tonyredondo in #94
- rules_go: normalize Orchestrion module compiler paths by @tonyredondo in #95
- rules_go: reset Orchestrion for Go tools by @tonyredondo in #96
- Fix Orchestrion helper archive fingerprints by @tonyredondo in #97
- go: publish orchestrion rules_go variants by @tonyredondo in #98
- rules_go: stabilize synthetic testmain helpers by @tonyredondo in #100
- Restore Go Bazel JSON payload contract by @tonyredondo in #101
- go: add workspace onboarding helpers by @tonyredondo in #102
- Fix doctor runfiles resolution for WORKSPACE consumers by @tonyredondo in #103
- Improve Go onboarding doctor bootstrap flow by @tonyredondo in #104
- bootstrap: avoid broad Go module sync by @tonyredondo in #105
- bootstrap: generate workspace onboarding files by @tonyredondo in #106
- go: add validation script generator by @tonyredondo in https://github.com/DataDog/rules_test_optimi...