51 lines
2.1 KiB
PHP
51 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace Modules\CloudDevOps\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\View\View;
|
|
use Modules\CloudDevOps\Models\DeploymentEnvironment;
|
|
use Modules\CloudDevOps\Models\DeploymentHealthCheck;
|
|
use Modules\CloudDevOps\Models\DeploymentPipeline;
|
|
use Modules\CloudDevOps\Models\DeploymentRelease;
|
|
use Modules\CloudDevOps\Services\DeploymentManager;
|
|
use Modules\CloudDevOps\Services\HealthCheckRunner;
|
|
|
|
final class CloudDevOpsController extends Controller
|
|
{
|
|
public function index(): View
|
|
{
|
|
return view('clouddevops::index', [
|
|
'environments' => 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.');
|
|
}
|
|
}
|