feat(rde): add Remote Development Environment management commands#637
Merged
Conversation
Add the `qovery rde` command group for managing Remote Development Environments (RDE). This enables platform teams to provision isolated, pre-configured dev environments from blueprint templates. Commands added: - Blueprint management: create, list, delete, status, deploy, stop - RDE lifecycle: create, list, status, start, stop, delete - Bulk operations: stop-all, start-all, delete-all - Advanced: upgrade (image/reclone strategies), urls, logs, info Blueprint identification uses environment variables: - Project-level: BLUEPRINT_PROJECT_ID (marks a project as a blueprint) - Environment-level: BLUEPRINT_KEY (links environments to their blueprint) RDE provisioning includes optional RBAC role creation, member invitation, TTL job handling, and automatic deployment.
- S1039: remove unnecessary fmt.Sprintf with no format args - S1017: use unconditional strings.TrimPrefix instead of HasPrefix+TrimPrefix - QF1002: use tagged switch on status variable - QF1003: replace if/else chain with switch statement
Rename 'qovery rde blueprint create' to 'qovery rde blueprint register' and 'qovery rde blueprint delete' to 'qovery rde blueprint unregister' since these commands mark/unmark existing projects as blueprints rather than creating or deleting them.
- Use pterm.DefaultTable for key-value displays in status/info commands (consistent with PrintContext pattern) - Use utils.PrintTable for services listing in status commands (consistent with service list command) - Use pterm.FgBlue.Sprintf for resource names in action messages (consistent with deploy/stop/delete commands across the CLI) - Use 'Request to X has been queued..' phrasing for action confirmations (consistent with application/container/helm action commands) - Add rdePrintKeyValueTable helper for reusable key-value rendering
When creating an RDE, fetch the blueprint environment's cluster ID and use it as the default for the clone request. The --cluster flag still works to override this default. Also error out if --cluster specifies a cluster name that doesn't exist.
Store RDE_OWNER_EMAIL as an environment-level variable when creating an RDE with --email. Display it in 'rde list' (Owner column) and 'rde status' (Owner row). No additional API calls needed since the owner email is read from the same ListEnvironmentVariables response used for BLUEPRINT_KEY discovery.
Guimove
approved these changes
May 9, 2026
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.
Summary
qovery rdecommand group for managing Remote Development Environments (RDE), enabling platform teams to provision isolated, pre-configured dev environments from blueprint templatesBLUEPRINT_PROJECT_IDat project level,BLUEPRINT_KEYat environment level) for blueprint identification -- no naming convention requiredArchitecture
Identification Model
Discovery logic:
BLUEPRINT_KEY == own project ID→ blueprint masterBLUEPRINT_KEY != own project ID→ child of that blueprintCommand Tree
RDE Provisioning (
rde create) Stepsrde-<name>with descriptionRDE-<name>with scoped permissions (optional)API Methods Used
Uses the
qovery-client-gotyped client throughout (no raw HTTP calls):ProjectsAPIfor project CRUDEnvironmentActionsAPIfor clone, deploy, stopEnvironmentMainCallsAPIfor delete, statusOrganizationCustomRoleAPIfor RBAC role managementMembersAPIfor member invitationVariableMainCallsAPIfor blueprint identification via env varsApplicationMainCallsAPIfor workspace URL resolutionJobsAPI/JobMainCallsAPIfor TTL job handlingOrganizationApiTokenAPIfor cleanupTesting
go buildcmdpackage tests pass:go test -tags testing ./cmd/...utils/context_test.go(unrelated undefined symbols) -- not introduced by this PR