Repository navigation
[Feat] Applications - #1276
Open
saeedvaziry wants to merge 30 commits into
Open
[Feat] Applications#1276saeedvaziry wants to merge 30 commits into
saeedvaziry wants to merge 30 commits into
Conversation
Contributor
|
Important Review skippedToo many files! This PR contains 539 files, which is 239 over the limit of 300. To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch. Usage-priced reviews support at most 300 files.
|
- Rollback links the environment's current shared paths into the restored release - Topology: cards grow with content (no clipped capability pills); app rows sit below load balancers and domains align with their target so edges no longer hide under nodes - Heading badges slot; Beta/status badges sit beside titles; padded settings cards - Deploy errors shown as a toast instead of shifting header buttons - Deployments/Domains tables fit: run #id, short commit (full SHA kept as data), merged Target - Attach database: charset Select, searchable collation, utf8mb4 preferred, kind-specific warning, Attach disabled until complete - Component overview shows capability settings with their form labels; Managed Yes/No; "Running" stage label; no Roll back on the live run; clearer variable key error - Server logs: messages on their own line, streamed output kept as received, locked append - Git clone: keep hyphenated self-hosted hosts, validate host, idempotent quiet keyscan with a clear failure - MySQL install refuses a mismatched apt candidate (e.g. arm64) before touching an existing installation Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
saeedvaziry
marked this pull request as ready for review
October 20, 2026 19:43
Provision component-local Composer 2 and PHP CLI links while preserving shared user tooling. Block repository and source control changes during component installation or synchronization. Add regression tests and update runtime documentation.
Add application and environment switching plus component, resource, and deployment side panels. Consolidate settings and forms, remove superseded pages and tables, and update lazy data loading, project isolation, and feature tests.
…sheets Replace the standalone variables, settings and deployments pages with sheets on the environment canvas, and update the application switcher, header, controllers and feature tests accordingly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- SQLite transactions start IMMEDIATE so read-then-write transactions wait for the write lock instead of failing with "database is locked" when a request overlaps a queued job - Laravel preset warnings honour shared SESSION_DRIVER and FILESYSTEM_DISK environment variables instead of always showing with multiple web components - Topology reads the component/attachment server directly; the relation is a restrict-on-delete foreign key and never null - Policy test no longer expects the removed component viewAny ability Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sheets - Sheet panels close locally so the slide-out animation plays before the route changes - Sheet links, deploy and rollback carry the selected component/resource, so its side panel stays open - Deployment components show the server name inline, only when it differs from the component name Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…vice logs - Worker logs move to root-owned /var/log/vito/workers/<user>/ (root:<user> 750) so isolated users can no longer plant symlinks that root touch/chown and supervisord follow; the log directory is prepared on every config write - Worker deletion removes the new log files with the glob expanded as root - User-owned service logs (PHP FPM php_errors.log) are read, searched, downloaded and cleared as their owner instead of root - Root-mode clear restores the file's own owner (stat -L) and log paths are shell-escaped Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Backend vhosts survive reboots: allow non-local binds so nginx/Caddy can listen on WireGuard addresses before the interface is up - Component load balancers fail over in 5s instead of hanging 60s on a dead backend (proxy_connect_timeout) - Rollbacks run the post-release stage so caches are rebuilt from the live environment instead of the release's stale config cache - Only app components are marked for redeploy; load balancers no longer stay flagged forever - Network member resyncs (active/updating flips) no longer bump the environment's variables version or resync resources - Deleting a component keeps its deployment history with a name/server snapshot; partial and rolled-back runs explain their outcome Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Persist and backfill log paths, migrate unsafe legacy logs, and safely read and remove worker logs. Continue site deletion when deploy-key cleanup fails and warn web users. Add regression tests and document API cleanup behavior.
- Tolerate source control API and commit lookup failures during deployment. - Limit cron transactions to component jobs to avoid database locks during SSH. - Ignore stale legacy aliases when checking domain availability. - Expand home paths in scripts and support networking on older Redis versions. - Add regression coverage for deployment, domain, script and networking fixes.
- Restore the Site-based tooling and source control plugin contracts; Applications support is opt-in via TargetToolingInterface and SupportsApplications. - Tolerate missing runtime plugins: preserve their cron lines, return 422 on domain changes and let applications and components be deleted. - Keep explicit firewall allow rules on attached resource ports above the resource guard so existing Sites and clients keep access. - Preserve executable bits when cloning releases. - Keep worker log history when editing a worker. - Open the deployment panel after confirming a deploy and keep route-synced dialogs open across navigation. - Skip composer install in the PHP preset when there is no composer.json. - Promote the next app component to primary after the primary's server is deleted. - Validate project deletion against component cleanup and verify dual-stack Redis networking. - Add regression coverage for each fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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
Introduces Applications (Beta): a runtime-agnostic way to deploy one repository across multiple servers, built around Application → Environment → Component. Staging and production can have independent branches, variables, runtime versions and infrastructure.
Applications live alongside Sites—this does not replace Sites or automatically convert existing deployments.
What we're delivering
High-level picture
An example environment; web, worker and scheduler capabilities can also share a component. Load balancing is optional.
flowchart LR Domain["Domains + SSL"] --> LB subgraph Environment["One environment across multiple servers"] LB["Load balancer<br/>Server A"] --> Web1["Web component<br/>Server B"] LB --> Web2["Web component<br/>Server C"] Jobs["Worker + scheduler<br/>Server D"] Web1 --> Resources["Attached databases / Redis"] Web2 --> Resources Jobs --> Resources end Domain -. "or direct" .-> Web1Deployment flow
Every stage waits for its participants. App components run the code stages; load balancers participate only in release.
flowchart LR Pin["Pin commit SHA"] --> Clone["Clone"] --> Build["Build"] Build --> Command["Release command<br/>primary only"] Command --> Release["Activate code + env<br/>restart processes / reload LB"] Release --> Post["Post-release"] Release -. "release failure" .-> Recover["Recover previous<br/>code + env"]Validation and Beta boundaries
See Applications documentation for the workflows and detailed boundaries.