Skip to content

feat(cloud): refactor deploy server API to manifests/deployments#142

Open
Dav-14 wants to merge 5 commits into
mainfrom
feat/deploy-server-api-refactor
Open

feat(cloud): refactor deploy server API to manifests/deployments#142
Dav-14 wants to merge 5 commits into
mainfrom
feat/deploy-server-api-refactor

Conversation

@Dav-14
Copy link
Copy Markdown
Contributor

@Dav-14 Dav-14 commented Apr 20, 2026

Summary

  • Adopt updated OpenAPI spec from terraform-hcp-proxy feat/app-stack-assignment branch
  • Replace runs and versions subcommands with first-class deployments and manifests resources
  • Apps now use name + optional stackId instead of organizationId
  • Move deploy action under deployments create
  • Regenerate Speakeasy SDK client

Breaking changes

  • apps runs command removed (replaced by apps deployments)
  • apps versions command removed (replaced by apps manifests)
  • apps deploy command removed (replaced by apps deployments create)
  • apps create now requires --name flag
  • apps show no longer shows run status

New command tree

apps
├── list / create / show / delete
├── deployments (list, show, logs, create)
├── manifests (list, show, create, delete, update)
│   └── versions (list, show, push)
└── variables (list, create, delete)

Test plan

  • Verify apps list works with new API
  • Verify apps create --name test creates an app
  • Verify apps deployments create --app-id <id> --path manifest.yaml triggers a deployment
  • Verify apps manifests create --name test --path manifest.yaml creates a manifest
  • Verify apps manifests versions push --manifest-id <id> --path manifest.yaml pushes a version
  • Verify polling/wait logic in deployments create works end-to-end

🤖 Generated with Claude Code

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 20, 2026

Important

Review skipped

Too many files!

This PR contains 232 files, which is 82 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 876dbc10-246b-4a09-bbf1-e622f4769b6d

📥 Commits

Reviewing files that changed from the base of the PR and between 01fe120 and d1118ac.

⛔ Files ignored due to path filters (6)
  • go.mod is excluded by !**/*.mod
  • internal/deployserverclient/.speakeasy/gen.lock is excluded by !**/*.lock, !**/*.lock
  • internal/deployserverclient/.speakeasy/gen.yaml is excluded by !**/*.yaml
  • internal/deployserverclient/.speakeasy/workflow.lock is excluded by !**/*.lock, !**/*.lock
  • openapi/deployserver.yaml is excluded by !**/*.yaml
  • openapi/schemas/application.json is excluded by !**/*.json
📒 Files selected for processing (232)
  • cmd/cloud/apps/bind_manifest.go
  • cmd/cloud/apps/bind_manifest_test.go
  • cmd/cloud/apps/create.go
  • cmd/cloud/apps/delete.go
  • cmd/cloud/apps/deploy.go
  • cmd/cloud/apps/deployments/create.go
  • cmd/cloud/apps/deployments/create_test.go
  • cmd/cloud/apps/deployments/download.go
  • cmd/cloud/apps/deployments/list.go
  • cmd/cloud/apps/deployments/logs.go
  • cmd/cloud/apps/deployments/root.go
  • cmd/cloud/apps/deployments/show.go
  • cmd/cloud/apps/list.go
  • cmd/cloud/apps/manifests/create.go
  • cmd/cloud/apps/manifests/create_test.go
  • cmd/cloud/apps/manifests/delete.go
  • cmd/cloud/apps/manifests/delete_test.go
  • cmd/cloud/apps/manifests/download.go
  • cmd/cloud/apps/manifests/list.go
  • cmd/cloud/apps/manifests/root.go
  • cmd/cloud/apps/manifests/show.go
  • cmd/cloud/apps/manifests/update.go
  • cmd/cloud/apps/manifests/versions/list.go
  • cmd/cloud/apps/manifests/versions/push.go
  • cmd/cloud/apps/manifests/versions/push_test.go
  • cmd/cloud/apps/manifests/versions/root.go
  • cmd/cloud/apps/manifests/versions/show.go
  • cmd/cloud/apps/root.go
  • cmd/cloud/apps/show.go
  • cmd/cloud/apps/show_test.go
  • cmd/cloud/apps/unbind_manifest.go
  • cmd/cloud/apps/variables/create.go
  • cmd/cloud/apps/variables/list.go
  • cmd/cloud/apps/versions/archive.go
  • cmd/cloud/apps/versions/manifest.go
  • cmd/cloud/apps/versions/show.go
  • internal/deployserverclient/README.md
  • internal/deployserverclient/USAGE.md
  • internal/deployserverclient/deployserver.go
  • internal/deployserverclient/docs/models/apierrors/error.md
  • internal/deployserverclient/docs/models/components/app.md
  • internal/deployserverclient/docs/models/components/appcurrentmanifest.md
  • internal/deployserverclient/docs/models/components/application.md
  • internal/deployserverclient/docs/models/components/appmanifestdivergence.md
  • internal/deployserverclient/docs/models/components/appversionresponse.md
  • internal/deployserverclient/docs/models/components/attachmanifestrequest.md
  • internal/deployserverclient/docs/models/components/configurationversion.md
  • internal/deployserverclient/docs/models/components/connector.md
  • internal/deployserverclient/docs/models/components/createapprequest.md
  • internal/deployserverclient/docs/models/components/createdeploymentrequest.md
  • internal/deployserverclient/docs/models/components/createmanifestresponse.md
  • internal/deployserverclient/docs/models/components/data.md
  • internal/deployserverclient/docs/models/components/deleteappresponse.md
  • internal/deployserverclient/docs/models/components/deploymentresource.md
  • internal/deployserverclient/docs/models/components/deploymentresponse.md
  • internal/deployserverclient/docs/models/components/kind.md
  • internal/deployserverclient/docs/models/components/ledger.md
  • internal/deployserverclient/docs/models/components/listappsresponse.md
  • internal/deployserverclient/docs/models/components/listappsresponsecursor.md
  • internal/deployserverclient/docs/models/components/listappsresponsedata.md
  • internal/deployserverclient/docs/models/components/listdeploymentsresponse.md
  • internal/deployserverclient/docs/models/components/listdeploymentsresponsecursor.md
  • internal/deployserverclient/docs/models/components/listmanifestsresponse.md
  • internal/deployserverclient/docs/models/components/listmanifestsresponsecursor.md
  • internal/deployserverclient/docs/models/components/listmanifestversionsresponse.md
  • internal/deployserverclient/docs/models/components/listmanifestversionsresponsecursor.md
  • internal/deployserverclient/docs/models/components/listrunsresponse.md
  • internal/deployserverclient/docs/models/components/listrunsresponsedata.md
  • internal/deployserverclient/docs/models/components/listversionsresponse.md
  • internal/deployserverclient/docs/models/components/listversionsresponsedata.md
  • internal/deployserverclient/docs/models/components/manifest.md
  • internal/deployserverclient/docs/models/components/manifestresponse.md
  • internal/deployserverclient/docs/models/components/manifestversion.md
  • internal/deployserverclient/docs/models/components/manifestversionresponse.md
  • internal/deployserverclient/docs/models/components/payments.md
  • internal/deployserverclient/docs/models/components/readstateresponse.md
  • internal/deployserverclient/docs/models/components/readvariablesresponse.md
  • internal/deployserverclient/docs/models/components/readvariablesresponsecursor.md
  • internal/deployserverclient/docs/models/components/readvariablesresponsedata.md
  • internal/deployserverclient/docs/models/components/reconciliationledger.md
  • internal/deployserverclient/docs/models/components/reconciliationpolicy.md
  • internal/deployserverclient/docs/models/components/regionselector.md
  • internal/deployserverclient/docs/models/components/run.md
  • internal/deployserverclient/docs/models/components/runresponse.md
  • internal/deployserverclient/docs/models/components/security.md
  • internal/deployserverclient/docs/models/components/stack.md
  • internal/deployserverclient/docs/models/components/state.md
  • internal/deployserverclient/docs/models/components/status.md
  • internal/deployserverclient/docs/models/components/updateapprequest.md
  • internal/deployserverclient/docs/models/components/updatemanifestrequest.md
  • internal/deployserverclient/docs/models/components/v2chartsegment.md
  • internal/deployserverclient/docs/models/components/v2schemadata.md
  • internal/deployserverclient/docs/models/components/v2transactiontemplate.md
  • internal/deployserverclient/docs/models/components/variable.md
  • internal/deployserverclient/docs/models/components/variabledata.md
  • internal/deployserverclient/docs/models/components/webhook.md
  • internal/deployserverclient/docs/models/operations/attachappmanifestrequest.md
  • internal/deployserverclient/docs/models/operations/attachappmanifestresponse.md
  • internal/deployserverclient/docs/models/operations/createdeploymentresponse.md
  • internal/deployserverclient/docs/models/operations/createmanifestrawrequest.md
  • internal/deployserverclient/docs/models/operations/createmanifestrawresponse.md
  • internal/deployserverclient/docs/models/operations/createmanifestrequest.md
  • internal/deployserverclient/docs/models/operations/createmanifestrequestbody.md
  • internal/deployserverclient/docs/models/operations/createmanifestresponse.md
  • internal/deployserverclient/docs/models/operations/deleteapprequest.md
  • internal/deployserverclient/docs/models/operations/deleteappresponse.md
  • internal/deployserverclient/docs/models/operations/deletemanifestrequest.md
  • internal/deployserverclient/docs/models/operations/deletemanifestresponse.md
  • internal/deployserverclient/docs/models/operations/deployappconfigurationrawresponse.md
  • internal/deployserverclient/docs/models/operations/deployappconfigurationrequest.md
  • internal/deployserverclient/docs/models/operations/detachappmanifestrequest.md
  • internal/deployserverclient/docs/models/operations/detachappmanifestresponse.md
  • internal/deployserverclient/docs/models/operations/from.md
  • internal/deployserverclient/docs/models/operations/listappsrequest.md
  • internal/deployserverclient/docs/models/operations/listdeploymentsrequest.md
  • internal/deployserverclient/docs/models/operations/listdeploymentsresponse.md
  • internal/deployserverclient/docs/models/operations/listmanifestsrequest.md
  • internal/deployserverclient/docs/models/operations/listmanifestsresponse.md
  • internal/deployserverclient/docs/models/operations/listmanifestversionsrequest.md
  • internal/deployserverclient/docs/models/operations/listmanifestversionsresponse.md
  • internal/deployserverclient/docs/models/operations/option.md
  • internal/deployserverclient/docs/models/operations/pushmanifestversionrawrequest.md
  • internal/deployserverclient/docs/models/operations/pushmanifestversionrawresponse.md
  • internal/deployserverclient/docs/models/operations/pushmanifestversionrequest.md
  • internal/deployserverclient/docs/models/operations/pushmanifestversionrequestbody.md
  • internal/deployserverclient/docs/models/operations/pushmanifestversionresponse.md
  • internal/deployserverclient/docs/models/operations/readappcurrentstateversionrequest.md
  • internal/deployserverclient/docs/models/operations/readappcurrentstateversionresponse.md
  • internal/deployserverclient/docs/models/operations/readappinclude.md
  • internal/deployserverclient/docs/models/operations/readapprequest.md
  • internal/deployserverclient/docs/models/operations/readapprunsrequest.md
  • internal/deployserverclient/docs/models/operations/readappvariablesrequest.md
  • internal/deployserverclient/docs/models/operations/readappversionsrequest.md
  • internal/deployserverclient/docs/models/operations/readappversionsresponse.md
  • internal/deployserverclient/docs/models/operations/readcurrentappversionrequest.md
  • internal/deployserverclient/docs/models/operations/readcurrentrunlogsrequest.md
  • internal/deployserverclient/docs/models/operations/readdeploymentinclude.md
  • internal/deployserverclient/docs/models/operations/readdeploymentlogsrequest.md
  • internal/deployserverclient/docs/models/operations/readdeploymentlogsresponse.md
  • internal/deployserverclient/docs/models/operations/readdeploymentrequest.md
  • internal/deployserverclient/docs/models/operations/readdeploymentresponse.md
  • internal/deployserverclient/docs/models/operations/readmanifestrequest.md
  • internal/deployserverclient/docs/models/operations/readmanifestresponse.md
  • internal/deployserverclient/docs/models/operations/readmanifestversionrequest.md
  • internal/deployserverclient/docs/models/operations/readmanifestversionresponse.md
  • internal/deployserverclient/docs/models/operations/readversionrequest.md
  • internal/deployserverclient/docs/models/operations/updatemanifestrequest.md
  • internal/deployserverclient/docs/models/operations/updatemanifestresponse.md
  • internal/deployserverclient/docs/sdks/deployserver/README.md
  • internal/deployserverclient/internal/config/sdkconfiguration.go
  • internal/deployserverclient/models/apierrors/error.go
  • internal/deployserverclient/models/components/app.go
  • internal/deployserverclient/models/components/appcurrentmanifest.go
  • internal/deployserverclient/models/components/application.go
  • internal/deployserverclient/models/components/appmanifestdivergence.go
  • internal/deployserverclient/models/components/appversionresponse.go
  • internal/deployserverclient/models/components/attachmanifestrequest.go
  • internal/deployserverclient/models/components/configurationversion.go
  • internal/deployserverclient/models/components/createapprequest.go
  • internal/deployserverclient/models/components/createdeploymentrequest.go
  • internal/deployserverclient/models/components/createmanifestresponse.go
  • internal/deployserverclient/models/components/deleteappresponse.go
  • internal/deployserverclient/models/components/deploymentresource.go
  • internal/deployserverclient/models/components/deploymentresponse.go
  • internal/deployserverclient/models/components/dotself.go
  • internal/deployserverclient/models/components/ledger.go
  • internal/deployserverclient/models/components/listappsresponse.go
  • internal/deployserverclient/models/components/listdeploymentsresponse.go
  • internal/deployserverclient/models/components/listmanifestsresponse.go
  • internal/deployserverclient/models/components/listmanifestversionsresponse.go
  • internal/deployserverclient/models/components/listrunsresponse.go
  • internal/deployserverclient/models/components/listversionsresponse.go
  • internal/deployserverclient/models/components/manifest.go
  • internal/deployserverclient/models/components/manifestresponse.go
  • internal/deployserverclient/models/components/manifestversion.go
  • internal/deployserverclient/models/components/manifestversionresponse.go
  • internal/deployserverclient/models/components/payments.go
  • internal/deployserverclient/models/components/pool.go
  • internal/deployserverclient/models/components/readstateresponse.go
  • internal/deployserverclient/models/components/readvariablesresponse.go
  • internal/deployserverclient/models/components/reconciliation.go
  • internal/deployserverclient/models/components/reconciliationledger.go
  • internal/deployserverclient/models/components/reconciliationpolicy.go
  • internal/deployserverclient/models/components/regionselector.go
  • internal/deployserverclient/models/components/run.go
  • internal/deployserverclient/models/components/runresponse.go
  • internal/deployserverclient/models/components/security.go
  • internal/deployserverclient/models/components/stack.go
  • internal/deployserverclient/models/components/state.go
  • internal/deployserverclient/models/components/updateapprequest.go
  • internal/deployserverclient/models/components/updatemanifestrequest.go
  • internal/deployserverclient/models/components/v2chartaccountmetadata.go
  • internal/deployserverclient/models/components/v2chartaccountrules.go
  • internal/deployserverclient/models/components/v2chartsegment.go
  • internal/deployserverclient/models/components/v2schemadata.go
  • internal/deployserverclient/models/components/v2transactiontemplate.go
  • internal/deployserverclient/models/components/variable.go
  • internal/deployserverclient/models/components/variabledata.go
  • internal/deployserverclient/models/components/webhook.go
  • internal/deployserverclient/models/operations/attachappmanifest.go
  • internal/deployserverclient/models/operations/createdeployment.go
  • internal/deployserverclient/models/operations/createmanifest.go
  • internal/deployserverclient/models/operations/createmanifestraw.go
  • internal/deployserverclient/models/operations/deleteapp.go
  • internal/deployserverclient/models/operations/deletemanifest.go
  • internal/deployserverclient/models/operations/deployappconfiguration.go
  • internal/deployserverclient/models/operations/deployappconfigurationraw.go
  • internal/deployserverclient/models/operations/detachappmanifest.go
  • internal/deployserverclient/models/operations/listapps.go
  • internal/deployserverclient/models/operations/listdeployments.go
  • internal/deployserverclient/models/operations/listmanifests.go
  • internal/deployserverclient/models/operations/listmanifestversions.go
  • internal/deployserverclient/models/operations/options.go
  • internal/deployserverclient/models/operations/pushmanifestversion.go
  • internal/deployserverclient/models/operations/pushmanifestversionraw.go
  • internal/deployserverclient/models/operations/readapp.go
  • internal/deployserverclient/models/operations/readappcurrentstateversion.go
  • internal/deployserverclient/models/operations/readappruns.go
  • internal/deployserverclient/models/operations/readappvariables.go
  • internal/deployserverclient/models/operations/readappversions.go
  • internal/deployserverclient/models/operations/readcurrentappversion.go
  • internal/deployserverclient/models/operations/readcurrentrun.go
  • internal/deployserverclient/models/operations/readdeployment.go
  • internal/deployserverclient/models/operations/readdeploymentlogs.go
  • internal/deployserverclient/models/operations/readmanifest.go
  • internal/deployserverclient/models/operations/readmanifestversion.go
  • internal/deployserverclient/models/operations/readrun.go
  • internal/deployserverclient/models/operations/readrunlogs.go
  • internal/deployserverclient/models/operations/readversion.go
  • internal/deployserverclient/models/operations/updatemanifest.go
  • pkg/clients.go
  • pkg/flags.go

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/deploy-server-api-refactor

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.

@Dav-14 Dav-14 marked this pull request as ready for review May 7, 2026 11:29
@Dav-14 Dav-14 requested a review from a team as a code owner May 7, 2026 11:29
Dav-14 and others added 4 commits June 1, 2026 16:32
Adopt the new OpenAPI spec from terraform-hcp-proxy feat/app-stack-assignment
branch which replaces runs/versions with first-class manifests and deployments.

- Replace `runs` subcommand with `deployments` (list, show, logs, create)
- Replace `versions` subcommand with `manifests` (list, show, create, delete, update, versions)
- Update `apps create` to use name + optional stack-id instead of organization-id
- Update `apps show` to use ReadApp with include=state
- Move deploy command under deployments as `create`
- Regenerate Speakeasy SDK client from updated OpenAPI spec

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…state, soft-delete via develop SDK

- Add `fctl cloud app deployments download --id <dpl-...> [--format yaml|gzip] [--out file]`
  (yaml streams to stdout by default; gzip requires --out)
- Add `fctl cloud app manifests download --id <mnf-...> --out file` for the tar.gz archive
- Render `state.stack.*` in `deployments show` when --include-state is passed
- Refresh deploy-server OpenAPI spec from terraform-hcp-proxy develop and regenerate SDK
- Wire new soft-delete flow on `apps delete`: surface destroyDeploymentId, add --wait

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…n deployment wait

- Drop app-id scoping on manifests; add bind-manifest/unbind-manifest commands on apps
- Show app's current manifest with divergence (undeployed/synced/behind/rebound) on `apps show`
- Require manifest-version on `deployments create` and add --wait-timeout with exponential backoff polling
- Regenerate deploy server SDK from updated OpenAPI (attach/detach manifest, App.currentManifest)
- Add unit tests for new bind/unbind/show/create/delete/push paths

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…d variables

Regenerate the deploy-server SDK against the current terraform-hcp-proxy
spec. List endpoints (apps, manifests, manifest-versions, deployments,
variables) now return cursor-paginated envelopes (pageSize + opaque
next/previous tokens) instead of the legacy page/items model, and
Variable drops the per-row sensitive flag in favor of unconditional
server-side redaction.

Update the affected list commands to embed *ResponseCursor, swap
--page (int) for --cursor (string), and walk .Data instead of .Items.
Drop the dead --sensitive and --category flags from `apps variables
create`.

Without this, fctl silently deserialized empty list responses (the
zero-value Data field), making name lookups always miss and triggering
unique-constraint errors on subsequent creates.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Dav-14 Dav-14 force-pushed the feat/deploy-server-api-refactor branch from e443eb6 to 4253d2a Compare June 1, 2026 14:46
Spec dropped application/gzip from readDeployment and removed the binary
variant from readManifest. Update download commands accordingly:
- deployments download now requests YAML via the single ResponseStream
- manifests download switches to readManifestVersion (defaults to "latest")
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