Skip to content

ci: speed up and simplify Racer CI - #972

Open
Jordan Olshevski (jveski) wants to merge 43 commits into
mainfrom
racer-ci-speedup
Open

Jordan Olshevski (jveski) wants to merge 43 commits into
mainfrom
racer-ci-speedup

Conversation

@jveski

@jveski Jordan Olshevski (jveski) commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

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 preflight now 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. Leftover timeout wrappers are removed from the Racer Makefile targets, workflows, scripts, and docs.

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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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

Comment thread .github/workflows/ci.yaml Outdated
Comment thread cmd/racer-loadgen/performance/run.sh Outdated
Comment thread .github/workflows/racer.yaml Outdated
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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The renamed Racer checks and conditional job routing need validation against branch-protection settings and live workflow runs.

1 open issue

Review effort: Balanced

@jveski
Jordan Olshevski (jveski) marked this pull request as ready for review October 22, 2026 13:13
@jveski
Jordan Olshevski (jveski) requested a review from a team October 22, 2026 13:13

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants