diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..e03d597
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,22 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false
+
+[*.yml]
+indent_size = 2
+
+[*.yaml]
+indent_size = 2
+
+[*.json]
+indent_style = space
+indent_size = 4
diff --git a/.gitattributes b/.gitattributes
index bc4b7e4..e8daa2c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,10 +1,10 @@
* text=auto
-/.github export-ignore
-/tests export-ignore
-/.* export-ignore
-/phpunit.xml* export-ignore
-/phpstan.* export-ignore
-/psalm.* export-ignore
-/infection.* export-ignore
-/codecov.* export-ignore
+/.* export-ignore
+/config/ export-ignore
+/resources/scripts/ export-ignore
+/runtime/ export-ignore
+/tests/ export-ignore
+
+/*.xml export-ignore
+/*.xml.dist export-ignore
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 7d0c40e..0000000
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,10 +0,0 @@
-| Q | A |
-|--------------|-------------------------------------------------------------------------------------------------------------------------|
-| Bugfix? | ✔️/❌ |
-| Breaks BC? | ✔️/❌ |
-| New feature? | ✔️/❌ |
-| Issues | #... |
-| Docs PR | spiral/docs#... |
-
-
diff --git a/.github/workflows/cs-fix.yml b/.github/workflows/cs-fix.yml
new file mode 100644
index 0000000..0395b27
--- /dev/null
+++ b/.github/workflows/cs-fix.yml
@@ -0,0 +1,12 @@
+on:
+ push:
+ branches:
+ - '*'
+
+name: Fix Code Style
+
+jobs:
+ cs-fix:
+ permissions:
+ contents: write
+ uses: spiral/gh-actions/.github/workflows/cs-fix.yml@master
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
new file mode 100644
index 0000000..7bad12e
--- /dev/null
+++ b/.php-cs-fixer.dist.php
@@ -0,0 +1,11 @@
+include(__DIR__ . '/src')
+ ->include(__FILE__)
+ ->allowRisky(true)
+ ->build();
diff --git a/composer.json b/composer.json
index d9559a8..8f6fea9 100644
--- a/composer.json
+++ b/composer.json
@@ -33,7 +33,6 @@
"support": {
"docs": "https://docs.roadrunner.dev",
"issues": "https://github.com/roadrunner-server/roadrunner/issues",
- "forum": "https://forum.roadrunner.dev/",
"chat": "https://discord.gg/V6EK4he"
},
"require": {
@@ -42,17 +41,21 @@
"ext-sockets": "*",
"psr/log": "^2.0 || ^3.0",
"spiral/goridge": "^4.1.0",
- "spiral/roadrunner": "^2023.1 || ^2024.1",
+ "spiral/roadrunner": "^2023.1 || ^2024.1 || ^2025.1",
"composer-runtime-api": "^2.0"
},
"require-dev": {
+ "buggregator/trap": "^1.13",
"jetbrains/phpstorm-attributes": "^1.0",
- "phpunit/phpunit": "^10.0",
- "vimeo/psalm": "^5.9",
- "symfony/var-dumper": "^6.3 || ^7.0"
+ "phpunit/phpunit": "^10.5.45",
+ "spiral/code-style": "^2.2",
+ "vimeo/psalm": "^6.0"
},
"scripts": {
- "analyze": "psalm"
+ "cs:diff": "php-cs-fixer fix --dry-run -v --diff --show-progress dots",
+ "cs:fix": "php-cs-fixer fix -v",
+ "test": "phpunit",
+ "psalm": "psalm"
},
"autoload": {
"psr-4": {
diff --git a/phpunit.xml b/phpunit.xml
index afe153a..e1a9df2 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -1,6 +1,7 @@
-
- tests
+
+ tests/Unit
-
+
+
+
+
+
+
+
+
+
+
src
-
+
diff --git a/psalm.xml b/psalm.xml
index ce4a97e..71c6520 100644
--- a/psalm.xml
+++ b/psalm.xml
@@ -14,4 +14,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Environment.php b/src/Environment.php
index 1af6963..9c6c907 100644
--- a/src/Environment.php
+++ b/src/Environment.php
@@ -23,7 +23,14 @@ class Environment implements EnvironmentInterface
*/
public function __construct(
private array $env = [],
- ) {
+ ) {}
+
+ public static function fromGlobals(): self
+ {
+ /** @var array $env */
+ $env = [...$_ENV, ...$_SERVER];
+
+ return new self($env);
}
public function getMode(): string
@@ -57,17 +64,9 @@ private function get(string $name, string $default = ''): string
{
if (isset($this->env[$name]) || \array_key_exists($name, $this->env)) {
/** @psalm-suppress RedundantCastGivenDocblockType */
- return (string)$this->env[$name];
+ return (string) $this->env[$name];
}
return $default;
}
-
- public static function fromGlobals(): self
- {
- /** @var array $env */
- $env = [...$_ENV, ...$_SERVER];
-
- return new self($env);
- }
}
diff --git a/src/Exception/RoadRunnerException.php b/src/Exception/RoadRunnerException.php
index a07d2e5..cdfecf5 100644
--- a/src/Exception/RoadRunnerException.php
+++ b/src/Exception/RoadRunnerException.php
@@ -4,6 +4,4 @@
namespace Spiral\RoadRunner\Exception;
-final class RoadRunnerException extends \RuntimeException
-{
-}
+final class RoadRunnerException extends \RuntimeException {}
diff --git a/src/Informer/Worker.php b/src/Informer/Worker.php
index 2503ee4..7b7a115 100644
--- a/src/Informer/Worker.php
+++ b/src/Informer/Worker.php
@@ -24,6 +24,5 @@ public function __construct(
public float $cpuUsage,
public string $command,
public string $status,
- ) {
- }
+ ) {}
}
diff --git a/src/Informer/Workers.php b/src/Informer/Workers.php
index 433bf77..96e24e5 100644
--- a/src/Informer/Workers.php
+++ b/src/Informer/Workers.php
@@ -11,8 +11,7 @@ final class Workers implements \Countable
*/
public function __construct(
private readonly array $workers = [],
- ) {
- }
+ ) {}
/**
* @return array
diff --git a/src/Internal/StdoutHandler.php b/src/Internal/StdoutHandler.php
index f9fcebf..bb782c3 100644
--- a/src/Internal/StdoutHandler.php
+++ b/src/Internal/StdoutHandler.php
@@ -36,7 +36,7 @@ final class StdoutHandler
*/
public static function register(int $chunkSize = self::OB_CHUNK_SIZE): void
{
- assert($chunkSize >= 0, 'Invalid chunk size argument value');
+ \assert($chunkSize >= 0, 'Invalid chunk size argument value');
self::restreamOutputBuffer($chunkSize);
self::restreamHeaders();
@@ -50,7 +50,7 @@ public static function register(int $chunkSize = self::OB_CHUNK_SIZE): void
*/
private static function restreamHeaders(): void
{
- \header_register_callback(static function(): void {
+ \header_register_callback(static function (): void {
$headers = \headers_list();
if ($headers !== []) {
diff --git a/src/Logger.php b/src/Logger.php
index 7163e1b..dd477f1 100644
--- a/src/Logger.php
+++ b/src/Logger.php
@@ -16,10 +16,10 @@ class Logger implements LoggerInterface
*/
public function log(mixed $level, string|\Stringable $message, array $context = []): void
{
- assert(\is_scalar($level), 'Invalid log level type');
- assert(\is_string($message), 'Invalid log message type');
+ \assert(\is_scalar($level), 'Invalid log level type');
+ \assert(\is_string($message), 'Invalid log message type');
- $this->write($this->format((string)$level, $message, $context));
+ $this->write($this->format((string) $level, $message, $context));
}
protected function write(string $message): void
diff --git a/src/Message/Command/GetProcessId.php b/src/Message/Command/GetProcessId.php
index 67c4d8d..3c21d01 100644
--- a/src/Message/Command/GetProcessId.php
+++ b/src/Message/Command/GetProcessId.php
@@ -10,6 +10,4 @@
/**
* @psalm-immutable
*/
-final class GetProcessId extends Payload implements ControlMessage
-{
-}
+final class GetProcessId extends Payload implements ControlMessage {}
diff --git a/src/Message/Command/Pong.php b/src/Message/Command/Pong.php
index 1731a08..fbc3708 100644
--- a/src/Message/Command/Pong.php
+++ b/src/Message/Command/Pong.php
@@ -10,6 +10,4 @@
/**
* @psalm-immutable
*/
-final class Pong extends Payload implements SkipMessage
-{
-}
+final class Pong extends Payload implements SkipMessage {}
diff --git a/src/Message/Command/StreamStop.php b/src/Message/Command/StreamStop.php
index b526bd4..ccc0754 100644
--- a/src/Message/Command/StreamStop.php
+++ b/src/Message/Command/StreamStop.php
@@ -10,6 +10,4 @@
/**
* @psalm-immutable
*/
-final class StreamStop extends Payload implements SkipMessage
-{
-}
+final class StreamStop extends Payload implements SkipMessage {}
diff --git a/src/Message/Command/WorkerStop.php b/src/Message/Command/WorkerStop.php
index 200c33c..7614f31 100644
--- a/src/Message/Command/WorkerStop.php
+++ b/src/Message/Command/WorkerStop.php
@@ -10,6 +10,4 @@
/**
* @psalm-immutable
*/
-final class WorkerStop extends Payload implements ControlMessage
-{
-}
+final class WorkerStop extends Payload implements ControlMessage {}
diff --git a/src/Message/ControlMessage.php b/src/Message/ControlMessage.php
index 166a482..8b177aa 100644
--- a/src/Message/ControlMessage.php
+++ b/src/Message/ControlMessage.php
@@ -7,6 +7,4 @@
/**
* @internal
*/
-interface ControlMessage
-{
-}
+interface ControlMessage {}
diff --git a/src/Message/SkipMessage.php b/src/Message/SkipMessage.php
index d0462fe..9a93ee7 100644
--- a/src/Message/SkipMessage.php
+++ b/src/Message/SkipMessage.php
@@ -10,6 +10,4 @@
* after stream end because async and should be skipped in main worker loop.
* @internal
*/
-interface SkipMessage
-{
-}
+interface SkipMessage {}
diff --git a/src/PayloadFactory.php b/src/PayloadFactory.php
index 5046200..c496ba4 100644
--- a/src/PayloadFactory.php
+++ b/src/PayloadFactory.php
@@ -70,4 +70,4 @@ private static function decode(string $json): array
return $result;
}
-}
\ No newline at end of file
+}
diff --git a/src/Version.php b/src/Version.php
index 9637c8c..95be987 100644
--- a/src/Version.php
+++ b/src/Version.php
@@ -12,14 +12,13 @@ final class Version
'spiral/roadrunner',
'spiral/roadrunner-worker',
];
-
public const VERSION_FALLBACK = 'dev-master';
public static function current(): string
{
foreach (self::PACKAGE_NAMES as $name) {
if (InstalledVersions::isInstalled($name)) {
- return \ltrim((string)InstalledVersions::getPrettyVersion($name), 'v');
+ return \ltrim((string) InstalledVersions::getPrettyVersion($name), 'v');
}
}
diff --git a/src/Worker.php b/src/Worker.php
index 1fdf43d..099cffb 100644
--- a/src/Worker.php
+++ b/src/Worker.php
@@ -36,9 +36,10 @@ class Worker implements StreamWorkerInterface
/** @var array */
private array $payloads = [];
- private bool $streamMode = false;
/** @var int<0, max> Count of frames sent in stream mode */
private int $framesSent = 0;
+
+ private bool $streamMode = false;
private bool $shouldPing = false;
private bool $waitingPong = false;
@@ -52,6 +53,38 @@ public function __construct(
}
}
+ /**
+ * Create a new RoadRunner {@see Worker} using global
+ * environment ({@see Environment}) configuration.
+ */
+ public static function create(bool $interceptSideEffects = true, LoggerInterface $logger = new Logger()): self
+ {
+ return static::createFromEnvironment(
+ env: Environment::fromGlobals(),
+ interceptSideEffects: $interceptSideEffects,
+ logger: $logger,
+ );
+ }
+
+ /**
+ * Create a new RoadRunner {@see Worker} using passed environment
+ * configuration.
+ */
+ public static function createFromEnvironment(
+ EnvironmentInterface $env,
+ bool $interceptSideEffects = true,
+ LoggerInterface $logger = new Logger(),
+ ): self {
+ $address = $env->getRelayAddress();
+ \assert($address !== '', 'Relay address must be specified in environment');
+
+ return new self(
+ relay: Relay::create($address),
+ interceptSideEffects: $interceptSideEffects,
+ logger: $logger,
+ );
+ }
+
public function getLogger(): LoggerInterface
{
return $this->logger;
@@ -235,7 +268,7 @@ private function sendFrame(Frame $frame): void
} catch (GoridgeException $e) {
throw new TransportException($e->getMessage(), $e->getCode(), $e);
} catch (\Throwable $e) {
- throw new RoadRunnerException($e->getMessage(), (int)$e->getCode(), $e);
+ throw new RoadRunnerException($e->getMessage(), (int) $e->getCode(), $e);
}
}
@@ -244,38 +277,6 @@ private function encode(array $payload): string
return \json_encode($payload, self::JSON_ENCODE_FLAGS);
}
- /**
- * Create a new RoadRunner {@see Worker} using global
- * environment ({@see Environment}) configuration.
- */
- public static function create(bool $interceptSideEffects = true, LoggerInterface $logger = new Logger()): self
- {
- return static::createFromEnvironment(
- env: Environment::fromGlobals(),
- interceptSideEffects: $interceptSideEffects,
- logger: $logger,
- );
- }
-
- /**
- * Create a new RoadRunner {@see Worker} using passed environment
- * configuration.
- */
- public static function createFromEnvironment(
- EnvironmentInterface $env,
- bool $interceptSideEffects = true,
- LoggerInterface $logger = new Logger(),
- ): self {
- $address = $env->getRelayAddress();
- \assert($address !== '', 'Relay address must be specified in environment');
-
- return new self(
- relay: Relay::create($address),
- interceptSideEffects: $interceptSideEffects,
- logger: $logger
- );
- }
-
private function sendProcessId(): void
{
$frame = new Frame($this->encode(['pid' => \getmypid()]), [], Frame::CONTROL);