From d0195538093905bba9f35cfb4c2d638fdc7f7caf Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Thu, 11 Dec 2025 11:02:29 +0100 Subject: [PATCH] Add Retry-After header to 429 rate limit responses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds Retry-After: 60 header to all deployment queue full responses, helping webhook clients know when to retry their requests. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- app/Http/Controllers/Api/DeployController.php | 4 ++-- app/Http/Controllers/Webhook/Bitbucket.php | 4 ++-- app/Http/Controllers/Webhook/Gitea.php | 4 ++-- app/Http/Controllers/Webhook/Github.php | 8 ++++---- app/Http/Controllers/Webhook/Gitlab.php | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/Api/DeployController.php b/app/Http/Controllers/Api/DeployController.php index 26378c3bd..136fcf557 100644 --- a/app/Http/Controllers/Api/DeployController.php +++ b/app/Http/Controllers/Api/DeployController.php @@ -390,7 +390,7 @@ private function by_uuids(string $uuid, int $teamId, bool $force = false, int $p } $result = $this->deploy_resource($resource, $force, $pr); if (isset($result['status']) && $result['status'] === 429) { - return response()->json(['message' => $result['message']], 429); + return response()->json(['message' => $result['message']], 429)->header('Retry-After', 60); } ['message' => $return_message, 'deployment_uuid' => $deployment_uuid] = $result; if ($deployment_uuid) { @@ -436,7 +436,7 @@ public function by_tags(string $tags, int $team_id, bool $force = false) foreach ($applications as $resource) { $result = $this->deploy_resource($resource, $force); if (isset($result['status']) && $result['status'] === 429) { - return response()->json(['message' => $result['message']], 429); + return response()->json(['message' => $result['message']], 429)->header('Retry-After', 60); } ['message' => $return_message, 'deployment_uuid' => $deployment_uuid] = $result; if ($deployment_uuid) { diff --git a/app/Http/Controllers/Webhook/Bitbucket.php b/app/Http/Controllers/Webhook/Bitbucket.php index 5410564c8..0efd7a537 100644 --- a/app/Http/Controllers/Webhook/Bitbucket.php +++ b/app/Http/Controllers/Webhook/Bitbucket.php @@ -108,7 +108,7 @@ public function manual(Request $request) is_webhook: true ); if ($result['status'] === 'queue_full') { - return response($result['message'], 429); + return response($result['message'], 429)->header('Retry-After', 60); } elseif ($result['status'] === 'skipped') { $return_payloads->push([ 'application' => $application->name, @@ -164,7 +164,7 @@ public function manual(Request $request) git_type: 'bitbucket' ); if ($result['status'] === 'queue_full') { - return response($result['message'], 429); + return response($result['message'], 429)->header('Retry-After', 60); } elseif ($result['status'] === 'skipped') { $return_payloads->push([ 'application' => $application->name, diff --git a/app/Http/Controllers/Webhook/Gitea.php b/app/Http/Controllers/Webhook/Gitea.php index 8f9cdba0c..f09b622bb 100644 --- a/app/Http/Controllers/Webhook/Gitea.php +++ b/app/Http/Controllers/Webhook/Gitea.php @@ -124,7 +124,7 @@ public function manual(Request $request) is_webhook: true, ); if ($result['status'] === 'queue_full') { - return response($result['message'], 429); + return response($result['message'], 429)->header('Retry-After', 60); } elseif ($result['status'] === 'skipped') { $return_payloads->push([ 'application' => $application->name, @@ -196,7 +196,7 @@ public function manual(Request $request) git_type: 'gitea' ); if ($result['status'] === 'queue_full') { - return response($result['message'], 429); + return response($result['message'], 429)->header('Retry-After', 60); } elseif ($result['status'] === 'skipped') { $return_payloads->push([ 'application' => $application->name, diff --git a/app/Http/Controllers/Webhook/Github.php b/app/Http/Controllers/Webhook/Github.php index e0ccf0850..bf8afac22 100644 --- a/app/Http/Controllers/Webhook/Github.php +++ b/app/Http/Controllers/Webhook/Github.php @@ -137,7 +137,7 @@ public function manual(Request $request) is_webhook: true, ); if ($result['status'] === 'queue_full') { - return response($result['message'], 429); + return response($result['message'], 429)->header('Retry-After', 60); } elseif ($result['status'] === 'skipped') { $return_payloads->push([ 'application' => $application->name, @@ -225,7 +225,7 @@ public function manual(Request $request) git_type: 'github' ); if ($result['status'] === 'queue_full') { - return response($result['message'], 429); + return response($result['message'], 429)->header('Retry-After', 60); } elseif ($result['status'] === 'skipped') { $return_payloads->push([ 'application' => $application->name, @@ -432,7 +432,7 @@ public function normal(Request $request) is_webhook: true, ); if ($result['status'] === 'queue_full') { - return response($result['message'], 429); + return response($result['message'], 429)->header('Retry-After', 60); } $return_payloads->push([ 'status' => $result['status'], @@ -499,7 +499,7 @@ public function normal(Request $request) git_type: 'github' ); if ($result['status'] === 'queue_full') { - return response($result['message'], 429); + return response($result['message'], 429)->header('Retry-After', 60); } elseif ($result['status'] === 'skipped') { $return_payloads->push([ 'application' => $application->name, diff --git a/app/Http/Controllers/Webhook/Gitlab.php b/app/Http/Controllers/Webhook/Gitlab.php index 004ab0e59..67d75bfdd 100644 --- a/app/Http/Controllers/Webhook/Gitlab.php +++ b/app/Http/Controllers/Webhook/Gitlab.php @@ -150,7 +150,7 @@ public function manual(Request $request) is_webhook: true, ); if ($result['status'] === 'queue_full') { - return response($result['message'], 429); + return response($result['message'], 429)->header('Retry-After', 60); } elseif ($result['status'] === 'skipped') { $return_payloads->push([ 'status' => $result['status'], @@ -223,7 +223,7 @@ public function manual(Request $request) git_type: 'gitlab' ); if ($result['status'] === 'queue_full') { - return response($result['message'], 429); + return response($result['message'], 429)->header('Retry-After', 60); } elseif ($result['status'] === 'skipped') { $return_payloads->push([ 'application' => $application->name,