feat: able to deploy multiple resources with webhook

This commit is contained in:
Andras Bacsai
2024-01-24 11:49:40 +01:00
parent 4120fba9a8
commit ff752e2411

View File

@@ -34,13 +34,17 @@ Route::group([
$token = auth()->user()->currentAccessToken(); $token = auth()->user()->currentAccessToken();
$teamId = data_get($token, 'team_id'); $teamId = data_get($token, 'team_id');
$uuid = $request->query->get('uuid'); $uuid = $request->query->get('uuid');
$uuids = explode(',', $uuid);
$uuids = collect(array_filter($uuids));
$force = $request->query->get('force') ?? false; $force = $request->query->get('force') ?? false;
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.'], 400); return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400);
} }
if (!$uuid) { if (count($uuids) === 0) {
return response()->json(['error' => 'No UUID provided.'], 400); return response()->json(['error' => 'No UUIDs provided.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400);
} }
$message = collect([]);
foreach ($uuids as $uuid) {
$resource = getResourceByUuid($uuid, $teamId); $resource = getResourceByUuid($uuid, $teamId);
if ($resource) { if ($resource) {
$type = $resource->getMorphClass(); $type = $resource->getMorphClass();
@@ -50,58 +54,62 @@ Route::group([
deployment_uuid: new Cuid2(7), deployment_uuid: new Cuid2(7),
force_rebuild: $force, force_rebuild: $force,
); );
return response()->json(['message' => 'Deployment queued.'], 200); $message->push("Application {$resource->name} deployment queued.");
} else if ($type === 'App\Models\StandalonePostgresql') { } else if ($type === 'App\Models\StandalonePostgresql') {
if (str($resource->status)->startsWith('running')) { if (str($resource->status)->startsWith('running')) {
return response()->json(['message' => 'Database already running.'], 200); $message->push("Database {$resource->name} already running.");
} }
StartPostgresql::run($resource); StartPostgresql::run($resource);
$resource->update([ $resource->update([
'started_at' => now(), 'started_at' => now(),
]); ]);
return response()->json(['message' => 'Database started.'], 200); $message->push("Database {$resource->name} started.");
} else if ($type === 'App\Models\StandaloneRedis') { } else if ($type === 'App\Models\StandaloneRedis') {
if (str($resource->status)->startsWith('running')) { if (str($resource->status)->startsWith('running')) {
return response()->json(['message' => 'Database already running.'], 200); $message->push("Database {$resource->name} already running.");
} }
StartRedis::run($resource); StartRedis::run($resource);
$resource->update([ $resource->update([
'started_at' => now(), 'started_at' => now(),
]); ]);
return response()->json(['message' => 'Database started.'], 200); $message->push("Database {$resource->name} started.");
} else if ($type === 'App\Models\StandaloneMongodb') { } else if ($type === 'App\Models\StandaloneMongodb') {
if (str($resource->status)->startsWith('running')) { if (str($resource->status)->startsWith('running')) {
return response()->json(['message' => 'Database already running.'], 200); $message->push("Database {$resource->name} already running.");
} }
StartMongodb::run($resource); StartMongodb::run($resource);
$resource->update([ $resource->update([
'started_at' => now(), 'started_at' => now(),
]); ]);
return response()->json(['message' => 'Database started.'], 200); $message->push("Database {$resource->name} started.");
} else if ($type === 'App\Models\StandaloneMysql') { } else if ($type === 'App\Models\StandaloneMysql') {
if (str($resource->status)->startsWith('running')) { if (str($resource->status)->startsWith('running')) {
return response()->json(['message' => 'Database already running.'], 200); $message->push("Database {$resource->name} already running.");
} }
StartMysql::run($resource); StartMysql::run($resource);
$resource->update([ $resource->update([
'started_at' => now(), 'started_at' => now(),
]); ]);
return response()->json(['message' => 'Database started.'], 200); $message->push("Database {$resource->name} started.");
} else if ($type === 'App\Models\StandaloneMariadb') { } else if ($type === 'App\Models\StandaloneMariadb') {
if (str($resource->status)->startsWith('running')) { if (str($resource->status)->startsWith('running')) {
return response()->json(['message' => 'Database already running.'], 200); $message->push("Database {$resource->name} already running.");
} }
StartMariadb::run($resource); StartMariadb::run($resource);
$resource->update([ $resource->update([
'started_at' => now(), 'started_at' => now(),
]); ]);
return response()->json(['message' => 'Database started.'], 200); $message->push("Database {$resource->name} started.");
} else if ($type === 'App\Models\Service') { } else if ($type === 'App\Models\Service') {
StartService::run($resource); StartService::run($resource);
return response()->json(['message' => 'Service started. It could take a while, be patient.'], 200); $message->push("Service {$resource->name} started. It could take a while, be patient.");
} }
} }
return response()->json(['error' => "No resource found with {$uuid}."], 404); }
if ($message->count() > 0) {
return response()->json(['message' => $message->toArray()], 200);
}
return response()->json(['error' => "No resources found.", 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 404);
}); });
}); });