Skip to content

ate-setup: port microvm-deps installation from shell to Go - #2092

Open
noahlwest wants to merge 10 commits into
agent-substrate:mainfrom
noahlwest:microvm-deps-go
Open

noahlwest wants to merge 10 commits into
agent-substrate:mainfrom
noahlwest:microvm-deps-go

Conversation

@noahlwest

@noahlwest noahlwest commented Oct 1, 2026 •

Copy link
Copy Markdown

Stacked on #1838.

Summary

Ports the microVM dependency setup (hack/install-microvm-deps.sh and hack/microvm-assets/) to Go, and folds microVM asset assembly, staging, and SandboxConfig management directly into deploy ate-system, deploy sandboxconfig, and delete ate-system.

Changes

  • Fold microVM setup into control-plane deploy/delete (cmd/ate-setup/internal/steps/deploy.go, delete.go, benchmarks.go):
    • Calls DeployMicroVMDeps inside DeployAteSystem (after applying the system bundle so Kind's in-cluster rustfs Deployment and rustfs-bucket-init Job exist before asset staging) and inside DeploySandboxConfig.
    • Adds --skip-microvm-deps to ate-setup deploy ate-system (and forwards it through hack/install-ate.sh) to opt out of staging microVM assets and applying SandboxConfig/microvm.
    • Calls DeleteMicroVMDeps inside DeleteAteSystem before CRD teardown.
    • Updates DeployBenchmarks / DeleteBenchmarks since deploy ate-system now installs both gvisor-default and microvm SandboxConfigs up front.
  • Remove hack/install-microvm-deps.sh and hack/microvm-assets/:
    • Deletes hack/install-microvm-deps.sh and the entire hack/microvm-assets/ directory (assemble.sh, stage-to-gcs.sh, stage-to-rustfs.sh, and README.md).
    • Updates hack/run-microvm-demo.sh, benchmarking/automation/orchestrator.py, and .github/workflows/pr-workflow.yaml to rely on deploy ate-system.
  • Native Go multi-arch microVM asset assembly and staging (cmd/ate-setup/internal/steps/microvm.go):
    • Streams and extracts the Kata .tar.zst archive (vmlinux.container, kata-containers-ubuntu.img as rootfs.img, virtiofsd) and Cloud Hypervisor binary in Go for both amd64 and arm64 into bin/microvm-assets/{amd64,arm64}/.
    • Verifies the bundled virtiofsd version and checks the SHA-256 digests of all four assets (cloud-hypervisor, virtiofsd, vmlinux, rootfs.img) against the digests pinned in manifests/microvm/sandboxconfig-microvm.yaml.tmpl (both after assembly and when reusing a cached .asset-stamp directory).
    • Stages both architectures under kata-assets/<arch>/<file> in Kind's rustfs bucket or GKE's GCS bucket, then renders and applies manifests/microvm/sandboxconfig-microvm.yaml.tmpl.
  • Docs, manifests & unit tests:
    • Updates manifests/microvm/sandboxconfig-microvm.yaml.tmpl to use per-arch kata-assets/<arch>/<file> URLs and removes stale version-number comments.
    • Folds the remaining asset-set and snapshot-location notes from hack/microvm-assets/README.md into docs/dev/microvm-local.md and updates docs/api-guide.md, cmd/ate-setup/commands.md, cmd/ate-setup/differences.md, and demos/counter/README.md.
    • Adds unit tests in cmd/ate-setup/internal/steps/microvm_test.go, cmd/ate-setup/internal/cmd/deploy_test.go, and cmd/ate-setup/shim_test.go.

Testing

  • Run go test -race ./cmd/ate-setup/... ./internal/e2e/... and hack/verify-all.sh.
  • Local Kind cluster verification (hack/install-ate-kind.sh):
    • Verified --deploy-ate-system --skip-microvm-deps deploys the control plane and installs only SandboxConfig/gvisor-default.
    • Verified --deploy-ate-system assembles the microVM guest assets, stages them into the in-cluster rustfs bucket, and applies SandboxConfig/microvm alongside SandboxConfig/gvisor-default (reusing cached assets via .asset-stamp on subsequent runs).
    • Verified --delete-all removes SandboxConfig/microvm during control-plane teardown before deleting CRDs.
    • Deployed --deploy-demo-counter and ran ./hack/run-e2e-kind.sh ./internal/e2e/suites/demo.

@noahlwest
noahlwest marked this pull request as ready for review October 5, 2026 17:58
@wiz-alphabet

wiz-alphabet Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Wiz Scan Summary

Scanner Findings
Vulnerability Finding Vulnerabilities -
Data Finding Sensitive Data -
Secret Finding Secrets -
IaC Misconfiguration IaC Misconfigurations -
SAST Finding SAST Findings 6 Medium
Software Management Finding Software Management Findings -
Total 6 Medium

View scan details in Wiz

To detect these findings earlier in the dev lifecycle, try the Wiz Code extension for VS Code, JetBrains, or Visual Studio.

@hdp617 Huy Pham (hdp617) 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.

Instead of having deploy/delete microvm-deps, how about doing these steps as part of deploy ate-system?

I like it because we want microVM SandboxClass installed by default. Also, the staging steps are needed at the moment because we don't have the microVM assets publicly available yet. Once they are, we can adjust deploy ate-system without any user facing changes.

Comment thread cmd/ate-setup/commands.md Outdated
Comment on lines +105 to +106
from, and applies the cluster-wide `microvm` SandboxConfig. `deploy ate-system`
installs only `gvisor-default`, so this is needed before any micro-VM demo or

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.

I think we want to install microvm SandboxConfig by default om deploy ate-system.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

I think this is a good change, I've updated the code to match. I also added the opt-out flag like you mentioned in the PR this is stacked upon. It also simplifies the changes to make substrate-gke match, so that's a nice plus.

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.

Thanks! FYI Haven Xia (@HavenXia).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM from the upgrade side: step 4d now picks up the microvm SandboxConfig through deploy sandboxconfig.

deploy ate-system runs at upgrade step 4e so it will redeploy the microvm sandboxConfig again, which is no-op but is also ok. (I am thinking about merging upgrade 4d and 4e though).

Also cc Zoe Zhao (@zoez7) as SandboxConfig will carry different name per release soon.

@cheftako

Copy link
Copy Markdown
Contributor

/assign

Comment thread demos/counter/README.md
Comment thread demos/counter/README.md
go install ./cmd/kubectl-ate

# Create the actor from the counter template.
kubectl ate create actor my-counter-1 -a ate-demo-counter --template counter

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.

Again I believe this is slightly wrong for the microvm case. kubectl ate create actor my-counter-microvm-1 -a ate-demo-counter-microvm --template counter-microvm

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

(same as other README.md comment - this is for the gvisor demo, adjusted the doc to make it more clear)

Comment thread demos/counter/README.md
Comment thread cmd/ate-setup/internal/steps/microvm.go Outdated
Comment thread cmd/ate-setup/internal/steps/microvm.go
Comment thread cmd/ate-setup/internal/steps/microvm.go Outdated
defaultCloudHypervisorVersion = "v53.0"
// virtiofsdVersion is the version bundled inside kata-static for
// defaultKataVersion (not env-overridable; verified before stamping).
virtiofsdVersion = "1.14.0"

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.

Ditto

hack/microvm-assets/assemble.sh:30:# to and including 4.0.0; kata 4.1.0 bundles v1.14.0, the first release carrying the
hack/microvm-assets/assemble.sh:56:VIRTIOFSD_VER="1.14.0"
bin/microvm-assets/amd64/.asset-versions:4:virtiofsd=1.14.0

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

same here, .../steps/microvm.go becomes the single source of truth for the virtiofsd version from this PR. assemble.sh gets deleted and .asset-versions is a local gitignored file from build time.

@HavenXia

Copy link
Copy Markdown
Member

need rebase

Comment thread cmd/ate-setup/internal/steps/microvm.go Outdated
Comment thread cmd/ate-setup/internal/cmd/deploy.go
Comment thread cmd/ate-setup/internal/steps/microvm.go Outdated
Comment thread cmd/ate-setup/internal/steps/microvm.go Outdated
Comment thread cmd/ate-setup/internal/steps/microvm.go Outdated
Comment thread hack/microvm-assets/README.md Outdated

@cheftako Walter Fender (cheftako) 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.

The port from shell to Go in cmd/ate-setup/internal/steps/microvm.go is well-implemented and maintains backwards compatibility through the flag-translation shim.

Two minor discrepancies between the PR description and implementation should be noted:

  • The PR description claims Cloud Hypervisor SHA-256 verification and staging to rustfs via docker cp + an in-cluster Job, whereas the implementation mirrors the original scripts (logging the calculated asset hashes for manifest authoring and streaming stdin directly to the amazon/aws-cli container).

Comment thread demos/counter/README.md

@cheftako Walter Fender (cheftako) 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.

Looks good.

@noahlwest
noahlwest force-pushed the microvm-deps-go branch 3 times, most recently from e685e2d to ae44cc0 Compare October 16, 2026 07:43

@hdp617 Huy Pham (hdp617) 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.

LGTM. Thank you!

Comment thread .github/workflows/pr-workflow.yaml Outdated
Comment thread cmd/ate-setup/internal/steps/microvm.go Outdated
Comment thread manifests/ate-install/sandboxconfig-microvm.yaml.tmpl
@bowei Bowei Du (bowei) added area/dev-infra area/microVM kind/cleanup Small fixes that are not bugs, for example a typo in a code comment labels Oct 19, 2026
@HavenXia

Copy link
Copy Markdown
Member

need rebase

@HavenXia

Copy link
Copy Markdown
Member

Need rebase

@HavenXia

Copy link
Copy Markdown
Member

LGTM from upgrade side

@hdp617

Copy link
Copy Markdown
Contributor

PR #3037 moves microVM assets into its own bucket. Sorry noahlwest, I think we need to make another adjustment in this PR. Also, would you mind resolving review comments if they are addressed? It makes it easier to review.

@hdp617 Huy Pham (hdp617) 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.

Thanks! Just a few agent comments.

Comment thread cmd/ate-setup/internal/steps/microvm.go Outdated
Comment thread hack/run-microvm-demo.sh Outdated
Comment thread cmd/ate-setup/internal/steps/microvm.go Outdated
jiayimeow and others added 10 commits October 27, 2026 15:02
The micro-VM prerequisites -- the guest assets and the cluster-wide
`microvm` SandboxConfig -- were reachable only as a side effect of
`deploy benchmarks --sandbox-class=microvm`, which also brings up the
whole locust stack. Everything else that needs them, the three micro-VM
demos and any WorkerPool of your own, was told to run
hack/install-microvm-deps.sh by hand.

Make the cluster capable of running micro-VM workers a step of its own.
The script is still invoked rather than reimplemented, for the reason
recorded in differences.md: it drives asset assembly and object-store
staging that are out of scope for the installer. What changes is that
nothing outside the steps package has to name it.

The benchmark paths now go through the same steps, so the two callers
cannot drift apart.

Fixes agent-substrate#1826

Signed-off-by: Noah West <westnoah@google.com>
Replace the shell implementation of hack/install-microvm-deps.sh and the helper scripts under hack/microvm-assets/ (assemble.sh, stage-to-gcs.sh, stage-to-rustfs.sh) with native Go in cmd/ate-setup/internal/steps/microvm.go.

DeployMicroVMDeps now resolves the target architecture and asset version stamp in Go, streams and extracts the kata-static .tar.zst archive and Cloud Hypervisor binary, verifies the bundled virtiofsd version when runnable on the host, stages the assets to the Kind rustfs bucket or GKE GCS bucket, and renders and server-side-applies the cluster-wide microvm SandboxConfig. DeleteMicroVMDeps removes the SandboxConfig by name while leaving bucket assets intact.

Keep hack/install-microvm-deps.sh as a flag-translation shim calling ate-setup deploy/delete microvm-deps and remove the obsolete scripts under hack/microvm-assets/.

Signed-off-by: Noah West <westnoah@google.com>
Stage the micro-VM guest assets and apply the microvm SandboxConfig as part of deploy ate-system (and deploy sandboxconfig), with a --skip-microvm-deps opt-out flag, and remove the microvm SandboxConfig during delete ate-system. Drop the standalone deploy/delete microvm-deps subcommands and the hack/install-microvm-deps.sh shim.

Signed-off-by: Noah West <westnoah@google.com>
Stage both amd64 and arm64 guest runtime assets under kata-assets/<arch>/ in the object store and update manifests/microvm/sandboxconfig-microvm.yaml.tmpl to reference the per-arch URLs so mixed-architecture clusters and cross-architecture workstations do not collide on a single prefix.

Verify the SHA-256 digest of each assembled or cached asset against the digests pinned in sandboxconfig-microvm.yaml.tmpl before staging, drop un-registered raw environment overrides from steps/microvm.go, and fold the remaining notes from hack/microvm-assets/README.md into docs/dev/microvm-local.md.

Signed-off-by: Noah West <westnoah@google.com>
… stamping

Cache the full bin/microvm-assets directory (both amd64 and arm64) in
the PR workflow instead of only bin/microvm-assets/amd64.

Verify SHA-256 digests inside assembleMicroVMAssets before writing
.asset-versions so a corrupt download is never stamped, and drop the
redundant virtiofsd --version subprocess check.

Move sandboxconfig-microvm.yaml.tmpl from the single-file
manifests/microvm directory into manifests/ate-install alongside the
other ate-setup manifests.

Signed-off-by: Noah West <westnoah@google.com>
Stage assembled micro-VM guest assets under microvm-assets/v1/<arch>/ in
the object store and bin/microvm-assets/v1/<arch>/ locally instead of
unversioned kata-assets/<arch>/. Versioned paths prevent future
SandboxConfig bumps from overwriting assets needed to restore suspended
actors.

Signed-off-by: Noah West <westnoah@google.com>
DeleteMicroVMDeps still targeted ate.dev/v1alpha1 after CRDs moved to
ate.dev/v1, which kube.Client.DeleteOne ignored as a no-match error. Use
atev1.GroupVersion.WithKind("SandboxConfig") instead.

Reject BUCKET_NAME values whose <BUCKET_NAME>-assets bucket exceeds GCS's
63-character limit, matching setup-gcp's checkAssetBucketName.

Pass --skip-microvm-deps from orchestrator.substrate_args when
sandboxClass is not microvm so gVisor benchmark runs do not need write
access to <BUCKET_NAME>-assets.

Signed-off-by: Noah West <westnoah@google.com>
AGENTS.md now standardizes prose on microVM without a hyphen. Update the
docs, comments, and help text introduced by this branch to match.

Signed-off-by: Noah West <westnoah@google.com>
Carry over the Kata 4.3.1 v2 digests and amazon/aws-cli 2.38.5 image
digest from the removed microvm-assets shell scripts.

Signed-off-by: Noah West <westnoah@google.com>
…taging

kube.Client.WaitJobComplete now polls through poll so transient apiserver errors retry while waiting for rustfs-bucket-init.

pr-workflow.yaml runs deploy demo counter-microvm directly because deploy ate-system already deploys the control plane and stages microVM assets.

assembleMicroVMAssets stages cloud-hypervisor in workDir before renaming into outDir so aborted downloads leave no partial binary behind.

checkMicroVMDeps validates the asset bucket and staging CLI before DeployAteSystem, DeploySandboxConfig, or DeployMicroVMDeps mutates the cluster or downloads archives.

stageMicroVMAssetsToRustfs creates custom buckets on Kind when BucketName differs from ate-snapshots, and TestDeploySkipMicroVMDepsFlag resets Cobra flags for shuffled test runs.

Signed-off-by: Noah West <westnoah@google.com>
Comment on lines +159 to +163
// After the bundle on Kind, which creates the rustfs Deployment and
// bucket-init Job that DeployMicroVMDeps stages guest assets into.
if err := e.DeploySandboxConfig(ctx, opts.SkipMicroVMDeps); err != nil {
return err
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This moves the gVisor SandboxConfig and the whole microVM download / upload to after the bundle apply, ahead of the Cloud SQL sidecar, egress CA, credential provider and atenet-egress. If the download or upload fails (GitHub rate limit, no write access to <BUCKET_NAME>-assets, a digest mismatch), deploy exits with ate-api-server on the sidecar-free base template and no credential provider or egress gateway until a rerun succeeds.

Assembling doesn't touch the cluster, can we do it up front next to checkMicroVMDeps (the GCS upload too), and only stage into rustfs + apply the config at the end?

Comment on lines +93 to +97
if !opts.SkipMicroVMDeps {
if _, err := e.checkMicroVMDeps(); err != nil {
return err
}
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

With this on by default, every non-kind deploy ate-system now needs BUCKET_NAME, gcloud, write access to <BUCKET_NAME>-assets and access to github.com. The install command in the release notes (hack/release/draft-release.sh) and commands.md#installing-pre-built-images set none of those, so that install now fails here.

Installing microVM by default is fine, but we should update those in this PR to say what's needed (or pass --skip-microvm-deps).

Comment on lines +524 to +535
node, err := e.kindNodeName(ctx)
if err != nil {
return err
}
svc, err := e.Kube.Typed.CoreV1().Services(ns).Get(ctx, "rustfs", metav1.GetOptions{})
if err != nil {
return fmt.Errorf("while getting service %s/rustfs: %w", ns, err)
}
if svc.Spec.ClusterIP == "" || svc.Spec.ClusterIP == corev1.ClusterIPNone {
return fmt.Errorf("service %s/rustfs has no ClusterIP", ns)
}
endpoint := fmt.Sprintf("http://%s:9000", svc.Spec.ClusterIP)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Now that this runs on every kind install, including gVisor-only ones, two bugs from stage-to-rustfs.sh with open fixes move onto the default path:

Comment on lines +121 to +125
} else {
log.Infof("Assets already present in %s; skipping assemble.", outDir)
if err := verifyMicroVMAssetDigests(outDir, arch); err != nil {
return err
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

If the stamp matches but a file doesn't match its pinned digest (a corrupted cache, or digests that changed without a kata / CH version change), every deploy fails here until someone deletes bin/microvm-assets by hand. Can we treat a mismatch as stale and re-assemble?

Comment on lines +343 to +350
if err := verifyMicroVMAssetDigests(outDir, arch); err != nil {
return err
}
if err := os.WriteFile(stampPath, []byte(microvmAssetStamp(arch, kataVer, chVer)), 0o644); err != nil {
return fmt.Errorf("while writing %s: %w", stampPath, err)
}

log.Infof(">> sha256 (paste all four into the %s block in %s):", arch, microvmSandboxConfigTemplate)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

On a kata or CH bump the verify above fails on the first changed file, so this paste message is never reached when it's needed, and each run only tells you one digest (re-downloading the tarball every time). We should report got / want for every file on a mismatch and drop the paste message?

// and bucket-init Job on Kind.
MicroVMStageTimeout = 300 * time.Second

defaultMicroVMAssetVersion = "v2"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Nothing forces bumping v2 when the assets change. If a kata bump updates the digests and misses this (and the template URLs), staging overwrites the objects the previous release's SandboxConfig pins, and with #3254 rolling back to that config then fails atelet's sha256 check.

What if the paths were keyed by digest instead, e.g. microvm-assets/<arch>/<sha256>? Then there's no version to bump, and staging can skip objects that already exist instead of re-uploading all 8 files on every deploy.

cc Zoe Zhao (@zoez7) who is also touching this.

Comment on lines +77 to +90
microvmAssetDigests = map[string]map[string]string{
"arm64": {
"cloud-hypervisor": "f192b510eea1c710cbc439d716bb0573c223fc463dbe3e6523788a2b7ef62850",
"virtiofsd": "4b43f4f6de6500203b01214a790314eea4182f5f110594ddb28ae2805622f06f",
"vmlinux": "dece388830720fe8bddb41552fff5f486240aeece5acc0aebc1812761e3e3f66",
"rootfs.img": "69f9a76e5a2563b7c74d1f271f3a904240f50ef405465f832021525894519f97",
},
"amd64": {
"cloud-hypervisor": "448af3d4e59b22c2987f7df94c213ad40fb53a10d437e42b5ee6c4fce7c29ecc",
"virtiofsd": "15b2e72a78cc08a9bd8a6943e89fb69c88cb3cbeb63069efceade835342ac7d4",
"vmlinux": "f87d8359035cb7557b16a319e6431ea09b183e62268aef436bf8dc6530d786b6",
"rootfs.img": "6770db2cca5710593f27c9ac5e1d9d7aab836422695a5e5c4807496a92a0f24d",
},
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

These duplicate the digests in the template, and TestMicroVMSandboxConfigTemplate only checks that each digest appears somewhere in the rendered output, so swapping the amd64 / arm64 values in the template still passes. We already render and decode the template, can we read the expected digests from it so there's one copy?

return err
}

for _, arch := range microvmArches {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

kind nodes are always the host arch (the kind profile already sets ko.defaultPlatforms to linux/<GOARCH>), so staging both arches there doubles the download on a fresh install and what we put in rustfs, for every kind user including gVisor-only. We should probably only do both arches on non-kind? (and save a lot of time ...)

Comment on lines +68 to +70
if err := e.DeleteMicroVMDeps(ctx); err != nil {
return err
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

nit: I think we can drop this, deleting the CRDs plus releaseSandboxConfigs below already removes every SandboxConfig (that's how gvisor-default goes on kind). On kind it also logs that the bucket assets are left in place right after rustfs was deleted.

Usage: "Also install CSI driver (nfs, hostpath, both, none; default: none)",
},
config.Setting{
Key: "skipMicroVMDeps", Env: "ATE_INSTALL_SKIP_MICROVM_DEPS", Flag: "skip-microvm-deps",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

non-blocking: "deps" is the old script's name, and this flag will outlive the staging once the assets are published. Did we consider something like --sandbox-classes=gvisor,microvm (default all)? Then the benchmark orchestrator can pass the test's class instead of appending a skip.

Sairaj Pokale (sairajp-rewind) pushed a commit to sairajp-rewind/substrate that referenced this pull request Oct 28, 2026
…ate#3354)

Since agent-substrate#2718, both scripts only forward to `go run ./cmd/ate-setup`.

This PR deletes them, and every caller, CI step and doc now runs
`ate-setup` directly. CI passes `--kind` in place of
`install-ate-kind.sh`. The kind Quickstart sets the same option once
with `export ATE_INSTALL_KIND=true`, so the demo READMEs no longer
mention kind or GKE.

Fix agent-substrate#1503

### Breaking Change
There are some behavior changes:
- `ate-setup` exits 1 on an unknown subcommand such as `deploy demo
demo-counter`, instead of printing help and exiting 0, this fixes agent-substrate#3209
- `--setup-csi` no longer accepts the old shell spellings `true`,
`false` or an empty value because they are returned `unknown CSI
driver`, the previous params are left for compatiblity with shell
script.
- `hack/setup-csi-hostpath-kind.sh` is replaced by `ate-setup --kind
setup csi hostpath`.

### Testing
Ran every demo README as written on fresh kind and GKE clusters. Every
`ate-setup` step works on both. claude-code-multiplex, parking and the
counter microVM script still fail, as they did before this PR (agent-substrate#2487,
agent-substrate#3287; agent-substrate#2092 rewrites the microVM script).


Claude help review the list and do the replacement, I reviewed.


- [x] Tests pass
- [x] Docs updated

---------

Signed-off-by: Haven Xia <haoyuxia@google.com>
@HavenXia Haven Xia (HavenXia) added this to the M3 milestone Oct 28, 2026

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

area/dev-infra area/microVM kind/cleanup Small fixes that are not bugs, for example a typo in a code comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants