Skip to content

Comments

feat: app-scoped control plane for multi-app deployments#5095

Draft
Flo4604 wants to merge 4 commits intofeat/multi-app-schemafrom
feat/multi-app-control-plane
Draft

feat: app-scoped control plane for multi-app deployments#5095
Flo4604 wants to merge 4 commits intofeat/multi-app-schemafrom
feat/multi-app-control-plane

Conversation

@Flo4604
Copy link
Member

@Flo4604 Flo4604 commented Feb 19, 2026

What does this PR do?

Fixes # (issue)

If there is not an issue for this, please create one first. This is used to tracking purposes and also helps us understand why this PR exists

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • Chore (refactoring code, technical debt, workflow improvements)
  • Enhancement (small improvements)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How should this be tested?

  • Test A
  • Test B

Checklist

Required

  • Filled out the "How to test" section in this PR
  • Read Contributing Guide
  • Self-reviewed my own code
  • Commented on my code in hard-to-understand areas
  • Ran pnpm build
  • Ran pnpm fmt
  • Ran make fmt on /go directory
  • Checked for warnings, there are none
  • Removed all console.logs
  • Merged the latest changes from main onto my branch with git pull origin main
  • My changes don't cause any responsiveness issues

Appreciated

  • If a UI change was made: Added a screen recording or screenshots to this PR
  • Updated the Unkey Docs if changes were necessary

@vercel
Copy link

vercel bot commented Feb 19, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dashboard Error Error Feb 20, 2026 0:22am
engineering Ready Ready Preview, Comment Feb 20, 2026 0:22am

Request Review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 19, 2026

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

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
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/multi-app-control-plane

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

Copy link
Member Author

Flo4604 commented Feb 19, 2026

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@Flo4604 Flo4604 force-pushed the feat/multi-app-control-plane branch from 8a14ae8 to 1b51dbf Compare February 19, 2026 19:14
@Flo4604 Flo4604 force-pushed the feat/multi-app-control-plane branch from 1b51dbf to 86a3b73 Compare February 19, 2026 19:24
@Flo4604 Flo4604 force-pushed the feat/multi-app-control-plane branch from 86a3b73 to 3fd482f Compare February 20, 2026 04:46
@Flo4604 Flo4604 force-pushed the feat/multi-app-control-plane branch from 3fd482f to a8265b1 Compare February 20, 2026 04:54
@Flo4604 Flo4604 force-pushed the feat/multi-app-control-plane branch from a8265b1 to ebf6205 Compare February 20, 2026 07:39
@Flo4604 Flo4604 changed the base branch from feat/multi-app-schema to graphite-base/5095 February 20, 2026 07:48
@Flo4604 Flo4604 force-pushed the feat/multi-app-control-plane branch from ebf6205 to 7ebf639 Compare February 20, 2026 08:15
@Flo4604 Flo4604 changed the base branch from graphite-base/5095 to feat/multi-app-schema February 20, 2026 08:16
Rewrites the control plane to key everything by app_id instead of
project_id, enabling concurrent deploys across different apps in the
same project.

- New AppService (CreateApp, ListApps) with transactional app + settings creation
- Deployment service resolves app from slug, uses app-scoped settings/env vars
- Deploy worker loads app, upserts internal K8s services for inter-app DNS
- Promote/rollback handlers use app.LiveDeploymentID instead of project
- Routing and Restate workflows keyed by app_id
- Domain generation always includes app slug in prefix
- Env var template resolver (${{ shared.KEY }}, ${{ app.KEY }}) in svc/ctrl/internal/envresolve
- Proto: app_slug on CreateDeploymentRequest, app_id on Deployment, new AppService
The template resolution logic (needsShared/needsSiblings scanning,
shared var fetching, sibling var fetching) adds unnecessary complexity.
Just pass app env vars straight through as secrets.
- Proto: add app_id field (18) to ApplyDeployment message
- Ctrl: pass deployment.AppID through deploymentRowToState
- Krane: add .AppID() label to deployment pods so Vector extracts it
TRPC routes now query via app's githubRepoConnection instead of project.
selectRepository accepts appId, disconnectRepo deletes by appId.
Project list JOIN changed to apps.id = githubRepoConnections.appId.
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