DeploymentEnvironment::withCount(['targets', 'pipelines', 'releases'])->latest()->get(), 'releases' => DeploymentRelease::with('environment')->latest()->limit(10)->get(), 'checks' => DeploymentHealthCheck::with('environment')->latest('checked_at')->limit(10)->get(), ]); } public function storeEnvironment(Request $request): RedirectResponse { $data = $request->validate(['name'=>'required|string|max:120','slug'=>'required|alpha_dash|max:120|unique:deployment_environments,slug','type'=>'required|in:development,staging,production']); DeploymentEnvironment::create($data); return back()->with('status', 'Environment created.'); } public function deploy(Request $request, DeploymentEnvironment $environment, DeploymentManager $manager): RedirectResponse { $data = $request->validate(['pipeline_id'=>'required|integer','version'=>'nullable|string|max:120','commit_hash'=>'nullable|string|max:120']); $pipeline = DeploymentPipeline::where('environment_id', $environment->id)->findOrFail($data['pipeline_id']); $manager->createRelease($environment, $pipeline, $data + ['requested_by' => $request->user()?->id]); return back()->with('status', 'Release created.'); } public function runCheck(DeploymentHealthCheck $check, HealthCheckRunner $runner): RedirectResponse { $runner->run($check); return back()->with('status', 'Health check completed.'); } }