Skip to content

Reorganize the command tree and introduce config#3

Open
adamwg wants to merge 4 commits intocrossplane:mainfrom
adamwg:awg/reorg
Open

Reorganize the command tree and introduce config#3
adamwg wants to merge 4 commits intocrossplane:mainfrom
adamwg:awg/reorg

Conversation

@adamwg
Copy link
Copy Markdown
Member

@adamwg adamwg commented May 6, 2026

Description of your changes

Per the DevEx design doc, reorganize the command tree to be noun-centric. As part of this, also remove the alpha and beta command trees and start indicating command maturity using kong tags. Hide alpha and beta commands by default and indicate their maturity level in help when they're visible. Don't prevent users from running the commands if they're "disabled"; just hide them.

To allow enabling alpha and beta features, introduce a config file and a crossplane config command to manage it. The file is simple yaml, and for now enabling alpha and beta features are the only options. Show how to do this in the help text.

To avoid breaking users, leave crossplane render as a hidden alias for crossplane composition render. All the other commands that have moved were alpha or beta, so allow their old invocations to break.

Fixes crossplane/crossplane#7309

I have:

adamwg added 4 commits May 6, 2026 15:17
Historically, we've introduced new commands in the `crossplane alpha` or
`crossplane beta` trees and moved them as they matured. This makes it awkward to
introduce new commands in existing trees, since the tree gets split across
maturity levels, and also breaks users when commands mature since their
invocation changes.

Move all the existing alpha and beta commands to the top level (or into the
right tree, in the case of `crossplane render op`). Start indicating maturity
using kong tags. Alpha and beta features are hidden from help by default but can
be enabled by configuration and have a maturity indicator added to their help
automatically.

Make `crossplane render xr` the default subcommand for `crossplane render` so
that existing render users are not broken by this change.

Fixes crossplane/crossplane#7309

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Now that we have a config file, we need commands to manage it. Add basic
`crossplane config view` and `crossplane config set` commands so we can view and
update the config.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
As proposed in the DevEx design doc, reorganize our command tree so that it's
noun-centric. Leave `crossplane render` as an alias for `crossplane xr render`
since that command is GA and we don't want to break any users/scripts. Allow
alpha and beta commands to move without aliases.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Show only the top-level nouns in the help. The user can use the `--help` flag on
any of these commands to see the subcommands. This will help keep our help tidy
and readable as we expand functionality.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
@adamwg adamwg requested review from a team, jcogilvie and tampakrap as code owners May 6, 2026 23:13
@adamwg adamwg requested review from phisco and removed request for a team May 6, 2026 23:13
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 6, 2026

Warning

Rate limit exceeded

@adamwg has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 20 minutes and 28 seconds before requesting another review.

To continue reviewing without waiting, purchase usage credits in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 0e43abb5-bcb8-4dc2-ba57-c6a4239a088c

📥 Commits

Reviewing files that changed from the base of the PR and between d7a5edf and 3ea7744.

⛔ Files ignored due to path filters (24)
  • cmd/crossplane/render/op/testdata/cmd/functions.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/op/testdata/cmd/operation-not-op.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/op/testdata/cmd/operation.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/op/testdata/cmd/output/include-full-operation.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/op/testdata/cmd/output/include-function-results.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/op/testdata/cmd/output/success.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/op/testdata/cmd/watched-multi.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/composition-label-mismatch.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/composition-not-pipeline.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/composition.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/functions.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/output/include-full-xr.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/output/include-function-results.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/output/success.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/xr-extra-spec.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/xr-with-selector.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/xr-wrong-apiversion.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/xr-wrong-kind.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/render/xr/testdata/cmd/xr.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/validate/testdata/cache/xpkg.crossplane.io/crossplane-contrib/provider-nop@v0.2.0/package.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/validate/testdata/crds/xpkg.crossplane.io/provider-dummy@v1.0.0/crd.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/validate/testdata/folder/nested-folder/resource-a.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/validate/testdata/folder/resource-b.yaml is excluded by !**/testdata/** and included by **/*.yaml
  • cmd/crossplane/validate/testdata/resources.yaml is excluded by !**/testdata/** and included by **/*.yaml
📒 Files selected for processing (55)
  • cmd/crossplane/alpha/alpha.go
  • cmd/crossplane/alpha/render/cmd.go
  • cmd/crossplane/alpha/render/xr/cmd.go
  • cmd/crossplane/beta/beta.go
  • cmd/crossplane/cluster/cluster.go
  • cmd/crossplane/composition/composition.go
  • cmd/crossplane/config/config.go
  • cmd/crossplane/config/set.go
  • cmd/crossplane/config/set_test.go
  • cmd/crossplane/config/view.go
  • cmd/crossplane/config/view_test.go
  • cmd/crossplane/convert/compositionenvironment/cmd.go
  • cmd/crossplane/convert/compositionenvironment/converter.go
  • cmd/crossplane/convert/compositionenvironment/converter_test.go
  • cmd/crossplane/convert/convert.go
  • cmd/crossplane/convert/io/io.go
  • cmd/crossplane/main.go
  • cmd/crossplane/operation/operation.go
  • cmd/crossplane/render/op/cmd.go
  • cmd/crossplane/render/op/cmd_test.go
  • cmd/crossplane/render/op/load.go
  • cmd/crossplane/render/op/load_test.go
  • cmd/crossplane/render/render.go
  • cmd/crossplane/render/xr/cmd.go
  • cmd/crossplane/render/xr/cmd_test.go
  • cmd/crossplane/resource/resource.go
  • cmd/crossplane/top/top.go
  • cmd/crossplane/top/top_test.go
  • cmd/crossplane/trace/internal/printer/default.go
  • cmd/crossplane/trace/internal/printer/default_test.go
  • cmd/crossplane/trace/internal/printer/dot.go
  • cmd/crossplane/trace/internal/printer/dot_test.go
  • cmd/crossplane/trace/internal/printer/json.go
  • cmd/crossplane/trace/internal/printer/json_test.go
  • cmd/crossplane/trace/internal/printer/printer.go
  • cmd/crossplane/trace/internal/printer/printer_test.go
  • cmd/crossplane/trace/internal/printer/yaml.go
  • cmd/crossplane/trace/internal/printer/yaml_test.go
  • cmd/crossplane/trace/trace.go
  • cmd/crossplane/trace/trace_test.go
  • cmd/crossplane/trace/watch.go
  • cmd/crossplane/validate/cache.go
  • cmd/crossplane/validate/cache_test.go
  • cmd/crossplane/validate/cmd.go
  • cmd/crossplane/validate/image.go
  • cmd/crossplane/validate/image_test.go
  • cmd/crossplane/validate/manager.go
  • cmd/crossplane/validate/manager_test.go
  • cmd/crossplane/validate/unknown_fields.go
  • cmd/crossplane/validate/validate.go
  • cmd/crossplane/validate/validate_test.go
  • internal/config/config.go
  • internal/config/config_test.go
  • internal/maturity/maturity.go
  • internal/maturity/maturity_test.go

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@adamwg
Copy link
Copy Markdown
Member Author

adamwg commented May 6, 2026

Checklist intentionally incomplete since we do need a docs issue for the breaking changes.

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.

Proposal: Stop using prefixes to differentiate CLI command maturity

1 participant