Skip to content

feat(cluster): add --bundle / --override to drive PlatformBundle deploys#27

Merged
hbrombeer merged 1 commit intomainfrom
feat/cluster-up-bundle
May 3, 2026
Merged

feat(cluster): add --bundle / --override to drive PlatformBundle deploys#27
hbrombeer merged 1 commit intomainfrom
feat/cluster-up-bundle

Conversation

@hbrombeer
Copy link
Copy Markdown
Member

Summary

Wires the existing forge `POST /v1/cluster/bundle` endpoint into `grounds cluster up` so engineers can drive a platform-test environment from the CLI instead of curl.

```sh
grounds cluster up --bundle 0.4.0
grounds cluster up --bundle 0.4.0 --override ./overrides/me.yaml
grounds cluster up --override ./overrides/me.yaml # bundle ref read from file
```

Why

The bundle endpoint shipped in forge weeks ago, the bundle repo and DevSpace templates exist, but there was no CLI command — Phase 5 of the platform-test rollout couldn't actually be exercised by an engineer without hand-crafting an HTTP request. This closes that gap.

Behaviour

  • `--bundle` and `--override` imply `profile=platform-bundle` (the only profile the endpoint supports). Combining either with `--profile` errors loudly.
  • `--bundle` on the command line wins over the `bundle:` field in the override file.
  • The `overrides:` map is passed through verbatim — forge owns the schema (image | gradle-local | enabled:false) and validates server-side. CLI doesn't try to mirror that union.
  • Result rendering shows the per-component breakdown so a chart-not-found on one component is visible immediately.

Test plan

🤖 Generated with Claude Code

The forge POST /v1/cluster/bundle endpoint already exists but had no
CLI hook — engineers were stuck using curl. This wires it into the
familiar `cluster up` command:

  grounds cluster up --bundle 0.4.0
  grounds cluster up --bundle 0.4.0 --override ./overrides/me.yaml
  grounds cluster up --override ./overrides/me.yaml   # bundle from file

`--bundle` and `--override` imply profile=platform-bundle (the only
profile the endpoint supports), so combining them with `--profile` is
an error rather than a silent contradiction.

The override YAML is read lazily — its `bundle:` field is the default
ref, but `--bundle` on the command line wins. The `overrides:` map is
passed through verbatim; forge owns the per-component union schema
(image | gradle-local | enabled:false) and validates server-side.

Result rendering shows the resolved/succeeded/failed component
breakdown directly so engineers see immediately which charts didn't
land:

  ✔ active — bundle 0.4.0 — vcluster-lusu
    components: 15 resolved, 14 succeeded, 1 failed
    failed:
      - paper-game: chart oci://...:0.1.0 not found

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hbrombeer hbrombeer merged commit b9b07f1 into main May 3, 2026
5 of 8 checks passed
@hbrombeer hbrombeer deleted the feat/cluster-up-bundle branch May 3, 2026 19:59
hbrombeer added a commit that referenced this pull request May 4, 2026
The self-hosted Linux runner that ci.yml + release.yml depend on has
been offline / not picking up jobs since the last #29 push. Three
release-creating push-events are queued behind it: the cluster up
--bundle, devspace generate, and bundle list/show merges (PRs #27 +
#28 + #29) → no v0.1.12 tag, no goreleaser run, no published
binaries.

Switch all self-hosted runs-on to ubuntu-latest so the queue drains
and the new CLI surface ships. Public-repo Actions minutes on
GitHub-hosted runners are free; the self-hosted setup can be
reintroduced once it's healthy.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

1 participant