mirror of
https://github.com/coollabsio/coolify.git
synced 2026-10-07 22:45:27 -04:00
- GitLab, GitHub, and Gitea crashed with a 500 on push payloads without a commit list, and other malformed payloads (missing repository, project, ref, Bitbucket changes, non-string values, unsupported Gitea events) also returned 500. They now get a clean response; a push with an unknown file list still deploys, and a branch deletion does not deploy. - The manual webhook lockout counts only distinct failed attempts: the same wrong GitLab token, or an identical HMAC redelivery, counts once, so a misconfigured hook no longer locks out a valid one. Every new guess still counts (30 per scope and minute). Attempts are stored only as HMAC hashes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
56 lines
1.7 KiB
PHP
56 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Webhook\Concerns;
|
|
|
|
trait DetectsSkipDeployCommits
|
|
{
|
|
/**
|
|
* Returns true if there is at least one non-empty message and every message
|
|
* contains [skip cd] or [skip ci] (case-insensitive).
|
|
*
|
|
* Accepts commit messages from a push payload. Null/empty entries and
|
|
* values that are not strings are filtered before evaluation.
|
|
*
|
|
* @param array<int, mixed> $messages
|
|
*/
|
|
public static function shouldSkipDeploy(array $messages): bool
|
|
{
|
|
$messages = array_values(array_filter($messages, fn ($m) => is_string($m) && filled($m)));
|
|
|
|
if (empty($messages)) {
|
|
return false;
|
|
}
|
|
|
|
foreach ($messages as $message) {
|
|
$lower = strtolower((string) $message);
|
|
if (! str_contains($lower, '[skip cd]') && ! str_contains($lower, '[skip ci]')) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Returns true if at least one non-empty message contains [skip cd] or
|
|
* [skip ci]. Used for PR/MR title + latest-commit signals where any one
|
|
* marker should trigger the skip. Values that are not strings are ignored.
|
|
*
|
|
* @param array<int, mixed> $messages
|
|
*/
|
|
public static function shouldSkipDeployAny(array $messages): bool
|
|
{
|
|
foreach ($messages as $message) {
|
|
if (! is_string($message) || ! filled($message)) {
|
|
continue;
|
|
}
|
|
$lower = strtolower((string) $message);
|
|
if (str_contains($lower, '[skip cd]') || str_contains($lower, '[skip ci]')) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|