From 2947a9ff1d42ecd4d600b5e8885a8260410747f8 Mon Sep 17 00:00:00 2001 From: Karan Vijayakumar Date: Fri, 28 Mar 2025 01:16:29 +0900 Subject: [PATCH 1/6] feat(deploy): add pull request ID parameter to deploy endpoint --- app/Http/Controllers/Api/DeployController.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Api/DeployController.php b/app/Http/Controllers/Api/DeployController.php index 73b452f86..6cdba8262 100644 --- a/app/Http/Controllers/Api/DeployController.php +++ b/app/Http/Controllers/Api/DeployController.php @@ -142,6 +142,7 @@ class DeployController extends Controller new OA\Parameter(name: 'tag', in: 'query', description: 'Tag name(s). Comma separated list is also accepted.', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'uuid', in: 'query', description: 'Resource UUID(s). Comma separated list is also accepted.', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'force', in: 'query', description: 'Force rebuild (without cache)', schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'pr', in: 'query', description: 'Pull Request Id', schema: new OA\Schema(type: 'integer')), ], responses: [ @@ -187,6 +188,8 @@ class DeployController extends Controller $uuids = $request->query->get('uuid'); $tags = $request->query->get('tag'); $force = $request->query->get('force') ?? false; + $pr = $request->query->get('pr'); + if ($uuids && $tags) { return response()->json(['message' => 'You can only use uuid or tag, not both.'], 400); @@ -194,16 +197,19 @@ class DeployController extends Controller if (is_null($teamId)) { return invalidTokenResponse(); } + if ($tags && $pr) { + return response()->json(['message' => 'You can only use tag or pr, not both.'], 400); + } if ($tags) { return $this->by_tags($tags, $teamId, $force); } elseif ($uuids) { - return $this->by_uuids($uuids, $teamId, $force); + return $this->by_uuids($uuids, $teamId, $force, $pr); } return response()->json(['message' => 'You must provide uuid or tag.'], 400); } - private function by_uuids(string $uuid, int $teamId, bool $force = false) + private function by_uuids(string $uuid, int $teamId, bool $force = false, int $pr = 0) { $uuids = explode(',', $uuid); $uuids = collect(array_filter($uuids)); @@ -216,7 +222,7 @@ class DeployController extends Controller foreach ($uuids as $uuid) { $resource = getResourceByUuid($uuid, $teamId); if ($resource) { - ['message' => $return_message, 'deployment_uuid' => $deployment_uuid] = $this->deploy_resource($resource, $force); + ['message' => $return_message, 'deployment_uuid' => $deployment_uuid] = $this->deploy_resource($resource, $force, $pr); if ($deployment_uuid) { $deployments->push(['message' => $return_message, 'resource_uuid' => $uuid, 'deployment_uuid' => $deployment_uuid->toString()]); } else { @@ -281,7 +287,7 @@ class DeployController extends Controller return response()->json(['message' => 'No resources found with this tag.'], 404); } - public function deploy_resource($resource, bool $force = false): array + public function deploy_resource($resource, bool $force = false, int $pr = 0): array { $message = null; $deployment_uuid = null; @@ -295,6 +301,7 @@ class DeployController extends Controller application: $resource, deployment_uuid: $deployment_uuid, force_rebuild: $force, + pull_request_id: $pr, ); $message = "Application {$resource->name} deployment queued."; break; From 045b6341c025941db1671f4732928d433082d872 Mon Sep 17 00:00:00 2001 From: Karan Vijayakumar Date: Fri, 28 Mar 2025 01:27:14 +0900 Subject: [PATCH 2/6] feat(api): add pull request ID parameter to applications endpoint --- openapi.json | 8 ++++++++ openapi.yaml | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/openapi.json b/openapi.json index 819f229cc..1d7d69fe7 100644 --- a/openapi.json +++ b/openapi.json @@ -4477,6 +4477,14 @@ "schema": { "type": "boolean" } + }, + { + "name": "pr", + "in": "query", + "description": "Pull request ID", + "schema": { + "type": "integer" + } } ], "responses": { diff --git a/openapi.yaml b/openapi.yaml index c965e9fe2..7cddb7b55 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3152,6 +3152,12 @@ paths: description: 'Force rebuild (without cache)' schema: type: boolean + - + name: pr + in: query + description: 'Pull request id' + schema: + type: integer responses: '200': description: "Get deployment(s) UUID's" From f0a1abc55d38c8faadfd7e02baee7f3da6f608d6 Mon Sep 17 00:00:00 2001 From: Karan Vijayakumar Date: Fri, 28 Mar 2025 01:50:21 +0900 Subject: [PATCH 3/6] fix(DeployController): cast 'pr' query parameter to integer Ensure the 'pr' query parameter is consistently treated as an integer to avoid type-related issues in subsequent logic --- app/Http/Controllers/Api/DeployController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/DeployController.php b/app/Http/Controllers/Api/DeployController.php index 6cdba8262..9396995ed 100644 --- a/app/Http/Controllers/Api/DeployController.php +++ b/app/Http/Controllers/Api/DeployController.php @@ -188,7 +188,7 @@ class DeployController extends Controller $uuids = $request->query->get('uuid'); $tags = $request->query->get('tag'); $force = $request->query->get('force') ?? false; - $pr = $request->query->get('pr'); + $pr = $request->query->get('pr') ? (int) $request->query->get('pr') : 0; if ($uuids && $tags) { From 99dd516d6b33713629abe2130bf8a29d06c1b828 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:22:40 +0200 Subject: [PATCH 4/6] Update app/Http/Controllers/Api/DeployController.php Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- app/Http/Controllers/Api/DeployController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/DeployController.php b/app/Http/Controllers/Api/DeployController.php index 9396995ed..a3adcbb6b 100644 --- a/app/Http/Controllers/Api/DeployController.php +++ b/app/Http/Controllers/Api/DeployController.php @@ -142,7 +142,7 @@ class DeployController extends Controller new OA\Parameter(name: 'tag', in: 'query', description: 'Tag name(s). Comma separated list is also accepted.', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'uuid', in: 'query', description: 'Resource UUID(s). Comma separated list is also accepted.', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'force', in: 'query', description: 'Force rebuild (without cache)', schema: new OA\Schema(type: 'boolean')), - new OA\Parameter(name: 'pr', in: 'query', description: 'Pull Request Id', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'pr', in: 'query', description: 'Pull Request Id for deploying specific PR builds. Cannot be used with tag parameter.', schema: new OA\Schema(type: 'integer')), ], responses: [ From d8248ba15362829a583faf8725d0a987131dde2d Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:23:58 +0200 Subject: [PATCH 5/6] Update app/Http/Controllers/Api/DeployController.php Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- app/Http/Controllers/Api/DeployController.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/DeployController.php b/app/Http/Controllers/Api/DeployController.php index a3adcbb6b..2da517256 100644 --- a/app/Http/Controllers/Api/DeployController.php +++ b/app/Http/Controllers/Api/DeployController.php @@ -188,8 +188,7 @@ class DeployController extends Controller $uuids = $request->query->get('uuid'); $tags = $request->query->get('tag'); $force = $request->query->get('force') ?? false; - $pr = $request->query->get('pr') ? (int) $request->query->get('pr') : 0; - + $pr = $request->query->get('pr') ? max((int) $request->query->get('pr'), 0) : 0; if ($uuids && $tags) { return response()->json(['message' => 'You can only use uuid or tag, not both.'], 400); From ee5c0f0413a78843603de1e2db2cb3a00aabfe27 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:33:01 +0200 Subject: [PATCH 6/6] fix(deploy): validate team ID before deployment --- app/Http/Controllers/Api/DeployController.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Api/DeployController.php b/app/Http/Controllers/Api/DeployController.php index 2da517256..7772f15e2 100644 --- a/app/Http/Controllers/Api/DeployController.php +++ b/app/Http/Controllers/Api/DeployController.php @@ -185,6 +185,11 @@ class DeployController extends Controller public function deploy(Request $request) { $teamId = getTeamIdFromToken(); + + if (is_null($teamId)) { + return invalidTokenResponse(); + } + $uuids = $request->query->get('uuid'); $tags = $request->query->get('tag'); $force = $request->query->get('force') ?? false; @@ -193,9 +198,6 @@ class DeployController extends Controller if ($uuids && $tags) { return response()->json(['message' => 'You can only use uuid or tag, not both.'], 400); } - if (is_null($teamId)) { - return invalidTokenResponse(); - } if ($tags && $pr) { return response()->json(['message' => 'You can only use tag or pr, not both.'], 400); }