feat: add deployment details to deploy endpoint

This commit is contained in:
Andras Bacsai 2024-03-07 12:22:18 +01:00
parent 2a03b452d3
commit 515d401746
2 changed files with 30 additions and 8 deletions

View File

@ -45,15 +45,24 @@ private function by_uuids(string $uuid, int $teamId, bool $force = false)
return response()->json(['error' => 'No UUIDs provided.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); return response()->json(['error' => 'No UUIDs provided.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400);
} }
$message = collect([]); $message = collect([]);
$deployments = collect();
$payload = collect();
foreach ($uuids as $uuid) { foreach ($uuids as $uuid) {
$resource = getResourceByUuid($uuid, $teamId); $resource = getResourceByUuid($uuid, $teamId);
if ($resource) { if ($resource) {
$return_message = $this->deploy_resource($resource, $force); ['message' => $return_message, 'deployment_uuid' => $deployment_uuid] = $this->deploy_resource($resource, $force);
if ($deployment_uuid) {
$deployments->push(['resource_uuid' => $uuid, 'deployment_uuid' => $deployment_uuid->toString()]);
}
$message = $message->merge($return_message); $message = $message->merge($return_message);
} }
} }
if ($message->count() > 0) { if ($message->count() > 0) {
return response()->json(['message' => $message->toArray()], 200); $payload->put('message', $message->toArray());
if ($deployments->count() > 0) {
$payload->put('details', $deployments->toArray());
}
return response()->json($payload->toArray(), 200);
} }
return response()->json(['error' => "No resources found.", 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 404); return response()->json(['error' => "No resources found.", 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 404);
} }
@ -66,6 +75,8 @@ public function by_tags(string $tags, int $team_id, bool $force = false)
return response()->json(['error' => 'No TAGs provided.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); return response()->json(['error' => 'No TAGs provided.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400);
} }
$message = collect([]); $message = collect([]);
$deployments = collect();
$payload = collect();
foreach ($tags as $tag) { foreach ($tags as $tag) {
$found_tag = Tag::where(['name' => $tag, 'team_id' => $team_id])->first(); $found_tag = Tag::where(['name' => $tag, 'team_id' => $team_id])->first();
if (!$found_tag) { if (!$found_tag) {
@ -79,21 +90,28 @@ public function by_tags(string $tags, int $team_id, bool $force = false)
continue; continue;
} }
foreach ($applications as $resource) { foreach ($applications as $resource) {
$return_message = $this->deploy_resource($resource, $force); ['message' => $return_message, 'deployment_uuid' => $deployment_uuid] = $this->deploy_resource($resource, $force);
if ($deployment_uuid) {
$deployments->push(['resource_uuid' => $resource->uuid, 'deployment_uuid' => $deployment_uuid->toString()]);
}
$message = $message->merge($return_message); $message = $message->merge($return_message);
} }
foreach ($services as $resource) { foreach ($services as $resource) {
$return_message = $this->deploy_resource($resource, $force); ['message' => $return_message] = $this->deploy_resource($resource, $force);
$message = $message->merge($return_message); $message = $message->merge($return_message);
} }
} }
if ($message->count() > 0) { if ($message->count() > 0) {
return response()->json(['message' => $message->toArray()], 200); $payload->put('message', $message->toArray());
if ($deployments->count() > 0) {
$payload->put('details', $deployments->toArray());
}
return response()->json($payload->toArray(), 200);
} }
return response()->json(['error' => "No resources found.", 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 404); return response()->json(['error' => "No resources found.", 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 404);
} }
public function deploy_resource($resource, bool $force = false): Collection public function deploy_resource($resource, bool $force = false): array
{ {
$message = collect([]); $message = collect([]);
if (gettype($resource) !== 'object') { if (gettype($resource) !== 'object') {
@ -101,9 +119,10 @@ public function deploy_resource($resource, bool $force = false): Collection
} }
$type = $resource?->getMorphClass(); $type = $resource?->getMorphClass();
if ($type === 'App\Models\Application') { if ($type === 'App\Models\Application') {
$deployment_uuid = new Cuid2(7);
queue_application_deployment( queue_application_deployment(
application: $resource, application: $resource,
deployment_uuid: new Cuid2(7), deployment_uuid: $deployment_uuid,
force_rebuild: $force, force_rebuild: $force,
); );
$message->push("Application {$resource->name} deployment queued."); $message->push("Application {$resource->name} deployment queued.");
@ -156,6 +175,6 @@ public function deploy_resource($resource, bool $force = false): Collection
StartService::run($resource); StartService::run($resource);
$message->push("Service {$resource->name} started. It could take a while, be patient."); $message->push("Service {$resource->name} started. It could take a while, be patient.");
} }
return $message; return ['message' => $message, 'deployment_uuid' => $deployment_uuid];
} }
} }

View File

@ -32,10 +32,13 @@
return response(config('version')); return response(config('version'));
}); });
Route::get('/deploy', [Deploy::class, 'deploy']); Route::get('/deploy', [Deploy::class, 'deploy']);
Route::get('/servers', [Server::class, 'servers']); Route::get('/servers', [Server::class, 'servers']);
Route::get('/server/{uuid}', [Server::class, 'server_by_uuid']); Route::get('/server/{uuid}', [Server::class, 'server_by_uuid']);
Route::get('/resources', [Resources::class, 'resources']); Route::get('/resources', [Resources::class, 'resources']);
Route::get('/domains', [Domains::class, 'domains']); Route::get('/domains', [Domains::class, 'domains']);
Route::get('/teams', [Team::class, 'teams']); Route::get('/teams', [Team::class, 'teams']);
Route::get('/team/current', [Team::class, 'current_team']); Route::get('/team/current', [Team::class, 'current_team']);
Route::get('/team/current/members', [Team::class, 'current_team_members']); Route::get('/team/current/members', [Team::class, 'current_team_members']);