feat: add deployments api

This commit is contained in:
Andras Bacsai 2024-03-07 12:27:23 +01:00
parent 515d401746
commit c7f15c42fa
8 changed files with 38 additions and 14 deletions

View File

@ -9,13 +9,32 @@
use App\Actions\Database\StartRedis; use App\Actions\Database\StartRedis;
use App\Actions\Service\StartService; use App\Actions\Service\StartService;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\ApplicationDeploymentQueue;
use App\Models\Server;
use App\Models\Tag; use App\Models\Tag;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Visus\Cuid2\Cuid2; use Visus\Cuid2\Cuid2;
class Deploy extends Controller class Deploy extends Controller
{ {
public function deployments(Request $request) {
$teamId = get_team_id_from_token();
if (is_null($teamId)) {
return invalid_token();
}
$servers = Server::whereTeamId($teamId)->get();
$deployments_per_server = ApplicationDeploymentQueue::whereIn("status", ["in_progress", "queued"])->whereIn("server_id", $servers->pluck("id"))->get([
"id",
"application_id",
"application_name",
"deployment_url",
"pull_request_id",
"server_name",
"server_id",
"status"
])->sortBy('id')->toArray();
return response()->json($deployments_per_server, 200);
}
public function deploy(Request $request) public function deploy(Request $request)
{ {
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
@ -27,7 +46,7 @@ public function deploy(Request $request)
return response()->json(['error' => 'You can only use uuid or tag, not both.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); return response()->json(['error' => 'You can only use uuid or tag, not both.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400);
} }
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
if ($tags) { if ($tags) {
return $this->by_tags($tags, $teamId, $force); return $this->by_tags($tags, $teamId, $force);

View File

@ -13,7 +13,7 @@ public function domains(Request $request)
{ {
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$projects = ModelsProject::where('team_id', $teamId)->get(); $projects = ModelsProject::where('team_id', $teamId)->get();
$domains = collect(); $domains = collect();

View File

@ -12,7 +12,7 @@ public function projects(Request $request)
{ {
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$projects = ModelsProject::whereTeamId($teamId)->select('id', 'name', 'uuid')->get(); $projects = ModelsProject::whereTeamId($teamId)->select('id', 'name', 'uuid')->get();
return response()->json($projects); return response()->json($projects);
@ -21,7 +21,7 @@ public function project_by_uuid(Request $request)
{ {
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$project = ModelsProject::whereTeamId($teamId)->whereUuid(request()->uuid)->first()->load(['environments']); $project = ModelsProject::whereTeamId($teamId)->whereUuid(request()->uuid)->first()->load(['environments']);
return response()->json($project); return response()->json($project);
@ -30,7 +30,7 @@ public function environment_details(Request $request)
{ {
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$project = ModelsProject::whereTeamId($teamId)->whereUuid(request()->uuid)->first(); $project = ModelsProject::whereTeamId($teamId)->whereUuid(request()->uuid)->first();
$environment = $project->environments()->whereName(request()->environment_name)->first()->load(['applications', 'postgresqls', 'redis', 'mongodbs', 'mysqls', 'mariadbs', 'services']); $environment = $project->environments()->whereName(request()->environment_name)->first()->load(['applications', 'postgresqls', 'redis', 'mongodbs', 'mysqls', 'mariadbs', 'services']);

View File

@ -12,7 +12,7 @@ public function resources(Request $request)
{ {
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$projects = Project::where('team_id', $teamId)->get(); $projects = Project::where('team_id', $teamId)->get();
$resources = collect(); $resources = collect();

View File

@ -12,7 +12,7 @@ public function servers(Request $request)
{ {
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$servers = ModelsServer::whereTeamId($teamId)->select('id', 'name', 'uuid', 'ip', 'user', 'port')->get()->load(['settings'])->map(function ($server) { $servers = ModelsServer::whereTeamId($teamId)->select('id', 'name', 'uuid', 'ip', 'user', 'port')->get()->load(['settings'])->map(function ($server) {
$server['is_reachable'] = $server->settings->is_reachable; $server['is_reachable'] = $server->settings->is_reachable;
@ -26,7 +26,7 @@ public function server_by_uuid(Request $request)
$with_resources = $request->query('resources'); $with_resources = $request->query('resources');
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$server = ModelsServer::whereTeamId($teamId)->whereUuid(request()->uuid)->first(); $server = ModelsServer::whereTeamId($teamId)->whereUuid(request()->uuid)->first();
if (is_null($server)) { if (is_null($server)) {

View File

@ -11,7 +11,7 @@ public function teams(Request $request)
{ {
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$teams = auth()->user()->teams; $teams = auth()->user()->teams;
return response()->json($teams); return response()->json($teams);
@ -21,7 +21,7 @@ public function team_by_id(Request $request)
$id = $request->id; $id = $request->id;
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$teams = auth()->user()->teams; $teams = auth()->user()->teams;
$team = $teams->where('id', $id)->first(); $team = $teams->where('id', $id)->first();
@ -35,7 +35,7 @@ public function members_by_id(Request $request)
$id = $request->id; $id = $request->id;
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$teams = auth()->user()->teams; $teams = auth()->user()->teams;
$team = $teams->where('id', $id)->first(); $team = $teams->where('id', $id)->first();
@ -48,7 +48,7 @@ public function current_team(Request $request)
{ {
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$team = auth()->user()->currentTeam(); $team = auth()->user()->currentTeam();
return response()->json($team); return response()->json($team);
@ -56,7 +56,7 @@ public function current_team(Request $request)
public function current_team_members(Request $request) { public function current_team_members(Request $request) {
$teamId = get_team_id_from_token(); $teamId = get_team_id_from_token();
if (is_null($teamId)) { if (is_null($teamId)) {
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); return invalid_token();
} }
$team = auth()->user()->currentTeam(); $team = auth()->user()->currentTeam();
return response()->json($team->members); return response()->json($team->members);

View File

@ -5,3 +5,7 @@ function get_team_id_from_token()
$token = auth()->user()->currentAccessToken(); $token = auth()->user()->currentAccessToken();
return data_get($token, 'team_id'); return data_get($token, 'team_id');
} }
function invalid_token()
{
return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400);
}

View File

@ -32,6 +32,7 @@
return response(config('version')); return response(config('version'));
}); });
Route::get('/deploy', [Deploy::class, 'deploy']); Route::get('/deploy', [Deploy::class, 'deploy']);
Route::get('/deployments', [Deploy::class, 'deployments']);
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']);