Repository navigation
ci: speed up and simplify Racer CI - #972
Open
Jordan Olshevski (jveski) wants to merge 43 commits into
Open
Jordan Olshevski (jveski) wants to merge 43 commits into
Jordan Olshevski (jveski) wants to merge 43 commits into
Conversation
The object identity is now {schema, bucket, key, versionId}. The origin
takes a single required --bucket and forbids requests for any other
bucket. The sidecar is bucket-agnostic and no longer accepts --namespace
or --bucket.
Replace spec.origin.buckets with a required spec.origin.bucket. CEL transition rules make bucket and azure.accountURL immutable, so a new source requires a new ClusterCache (new UID, empty cache).
The managed origin passes --bucket and no longer renders --namespace or the origin-identity annotation. The sidecar injector no longer reads the object-namespace and object-buckets annotations and rejects pods that still set them.
The dataplane sends Racer-Cache: <cache UID> on every origin request, and racersdk.OriginConfig.CacheUID makes an origin answer 503 to requests for any other UID. Origin sockets are name-based, so this stops an origin left from a deleted ClusterCache from filling a recreated one.
The Azure origin now takes the full container URL; the container it serves comes from the URL, and --bucket is only for the S3 provider.
ClusterCache now names its source with one immutable Azure Blob container URL. The BucketName type and spec.origin.bucket are removed.
Kubelet expands $(NAME) in container args from envFrom, so a containerURL like https://$(STORAGE_HOST)/models could be rewritten by the credential Secret. Render $ as $$ and add a regression test that simulates kubelet expansion.
Limit the account URL host to DNS names, IPv4, and bracketed IPv6 literals with an optional port, in both the CRD CEL rule and ParseAzureContainerURL, so values such as $(VAR) are rejected at admission.
Move the node placement copy used by Racer origin DaemonSets into internal/racer/workload so other operator components can follow the racer-dataplane placement without importing the racer component.
When ClusterCache/gantry exists and the operator reconciles a Gantry installation, enable GANTRY_RACER_ENABLED, mount the gantry cache socket directories, and follow the racer-dataplane node placement. The cache never installs Gantry on its own, and deleting it reverts the DaemonSet.
go test only calls TestMain from _test.go files, so the hook in harness_e2e.go never ran and the shared kind cluster and registry were left behind.
Racer jobs now live in racer.yaml, which also runs on pushes to main so pull requests and the merge queue restore warm Cargo caches from main. Caches are saved only on push and keyed by the dataplane sources, so each job keeps a single current entry instead of one per commit. Flatten the per-crate feature gates and the four rdma-verbs feature combinations into one job, fold verbs Clippy into the lint job, and run all Miri groups in one job. Drop the redundant workspace cargo check, which the test build covers, along with the per-combination verbs check and fmt that Clippy and the workspace fmt already cover.
The timeout prefixes came from an old local development workflow. Job timeout-minutes and go test -timeout already bound these commands.
Rebase the branch content onto origin/main so the pull request contains only the Racer CI changes.
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Documentation-dependent tests can be skipped, performance-test timeouts can leave child processes running, and source-only pushes do not refresh the envtest build cache.
3 open issues
What changed in this PR
This PR separates Racer validation from the main CI workflow, consolidates jobs, and reduces unrelated work for Racer-only changes.
Changes:
- Moves Rust, Miri, and envtest checks into a dedicated workflow with push-populated caches.
- Adds change-scope filtering for Go, frontend, integration, and image jobs.
- Removes external timeout wrappers and updates related scripts, documentation, and contract tests.
| File | Description |
|---|---|
Makefile |
Removes timeout wrappers from Racer targets. |
internal/racer/ci_test.go |
Updates the envtest contract for the new workflow. |
hack/scripts/runtime-miri.py |
Adds combined test-group execution and removes execution limits. |
deploy/racer-loadgen/direct/README.md |
Simplifies the documented validation command. |
cmd/racer-object/README.md |
Removes timeout wrappers from profiling examples. |
cmd/racer-loadgen/performance/run.sh |
Removes the performance test’s outer watchdog. |
cmd/racer-dataplane/uds-endpoint/README.md |
Simplifies documented Rust validation commands. |
cmd/racer-dataplane/crypto/src/lib.rs |
Updates validation commands in documentation comments only. |
cmd/racer-dataplane/control-wire/src/lib.rs |
Updates the test command in documentation comments only. |
.github/workflows/racer.yaml |
Adds consolidated Racer checks and dedicated caches. |
.github/workflows/dependabot-notice.yaml |
Removes timeout wrappers from NOTICE generation steps. |
.github/workflows/ci.yaml |
Adds scope filtering and moves Racer checks out. |
Review effort: Balanced
The watchdog signals the whole process group so a Go test timeout does not orphan the dataplane.
Go tests read docs/ and designs/ (for example internal/operator/override_examples_test.go), so a Racer pull request that touches them must still run the Go jobs. NOTICE stays neutral.
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
Release preflight does not account for the new workflow, and changed check names and job gating need human validation against branch protection and merge-queue behavior.
1 open issue
3 resolved since last review
Review effort: Balanced
| # Copyright (c) Microsoft Corporation. | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| name: Racer |
Racer's Rust, Miri, and envtest jobs moved to racer.yaml, so a green ci.yaml run no longer covers them. Preflight now judges the latest racer.yaml run on the branch the same way as CI and reports it as racerOk.
Jordan Olshevski (jveski)
marked this pull request as ready for review
October 22, 2026 13:13
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Moves the Racer Rust, Miri, and envtest jobs from ci.yaml into a new racer.yaml workflow, consolidated from thirteen jobs to six without dropping any test or lint configuration. The workflow also runs on pushes to main and release branches, which are the only runs that save the Cargo and race-instrumented Go caches that pull requests and merge queue runs restore, and
relctl preflightnow requires a green Racer run alongside CI. A new change-scope job in ci.yaml lets Racer-only pull requests skip unrelated frontend, BPF, orca, and net image builds, and lets Rust-only dataplane changes skip the Go jobs too. Leftovertimeoutwrappers are removed from the Racer Makefile targets, workflows, scripts, and docs.