$messages */ public static function shouldSkipDeploy(array $messages): bool { $messages = array_values(array_filter($messages, fn ($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. * * @param array $messages */ public static function shouldSkipDeployAny(array $messages): bool { foreach ($messages as $message) { if (! filled($message)) { continue; } $lower = strtolower((string) $message); if (str_contains($lower, '[skip cd]') || str_contains($lower, '[skip ci]')) { return true; } } return false; } }