diff --git a/config/config.php b/config/config.php index e029bf6..7175745 100644 --- a/config/config.php +++ b/config/config.php @@ -29,6 +29,12 @@ ], \BeyondCode\SelfDiagnosis\Checks\EnvFileExists::class, \BeyondCode\SelfDiagnosis\Checks\ExampleEnvironmentVariablesAreSet::class, + \BeyondCode\SelfDiagnosis\Checks\UsedEnvironmentVariablesAreDefined::class => [ + 'directories' => [ + config_path(), + app_path(), + ], + ], \BeyondCode\SelfDiagnosis\Checks\LocalesAreInstalled::class => [ 'required_locales' => [ 'en_US', @@ -65,6 +71,7 @@ \BeyondCode\SelfDiagnosis\Checks\ConfigurationIsNotCached::class, \BeyondCode\SelfDiagnosis\Checks\RoutesAreNotCached::class, \BeyondCode\SelfDiagnosis\Checks\ExampleEnvironmentVariablesAreUpToDate::class, + \BeyondCode\SelfDiagnosis\Checks\UsedEnvironmentVariablesAreDefined::class, ], 'production' => [ \BeyondCode\SelfDiagnosis\Checks\ComposerWithoutDevDependenciesIsUpToDate::class, diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 6e179a7..55b72ff 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -26,4 +26,10 @@ + + + + + + diff --git a/src/Checks/UsedEnvironmentVariablesAreDefined.php b/src/Checks/UsedEnvironmentVariablesAreDefined.php new file mode 100644 index 0000000..14fb226 --- /dev/null +++ b/src/Checks/UsedEnvironmentVariablesAreDefined.php @@ -0,0 +1,167 @@ + $this->amount, + 'undefined' => implode(PHP_EOL, $this->undefined), + ]); + } + + /** + * Perform the actual verification of this check. + * + * @param array $config + * @return bool + * @throws \Exception + */ + public function check(array $config): bool + { + $paths = Collection::make(Arr::get($config, 'directories', [])); + + foreach ($paths as $path) { + $files = $this->recursiveDirSearch($path, '/.*?.php/'); + + foreach ($files as $file) { + preg_match_all( + '# env\((.*?)\)| getenv\((.*?)\)#', + str_replace(["\n", "\r"], '', file_get_contents($file)), + $values + ); + + $values = array_filter( + array_merge($values[1], $values[2]) + ); + + foreach ($values as $value) { + $result = $this->getResult( + explode(',', str_replace(["'", '"', ' '], '', $value)) + ); + + if (!$result) { + continue; + } + + $this->storeResult($result); + } + } + } + + return $this->amount === 0; + } + + /** + * Get result based on comma separated env() or getenv() parameters + * + * @param array $values + * @return object|bool + */ + private function getResult(array $values) + { + $envVar = $values[0]; + + if (in_array($envVar, $this->processed, true)) { + return false; + } + + $this->processed[] = $envVar; + + return (object)[ + 'envVar' => $envVar, + 'hasValue' => env($envVar) !== null, + 'hasDefault' => isset($values[1]), + ]; + } + + /** + * Store result based on getResult's return value + * + * @param $result + */ + private function storeResult($result) + { + if (!$result->hasValue && !$result->hasDefault) { + $this->undefined[] = $result->envVar; + $this->amount++; + } + } + + /** + * Recursively search folder(s) for files matching pattern + * + * @param string $folder + * @param string $pattern + * @return array + */ + private function recursiveDirSearch(string $folder, string $pattern): array + { + if (!file_exists($folder)) { + return []; + } + + $files = new RegexIterator( + new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($folder) + ), + $pattern, RegexIterator::GET_MATCH + ); + + $list = [[]]; + + foreach ($files as $file) { + $list[] = $file; + } + + $list = array_merge(...$list); + + return $list; + } +} diff --git a/tests/UsedEnvironmentVariablesAreDefinedTest.php b/tests/UsedEnvironmentVariablesAreDefinedTest.php new file mode 100644 index 0000000..b1fbac1 --- /dev/null +++ b/tests/UsedEnvironmentVariablesAreDefinedTest.php @@ -0,0 +1,55 @@ + [ + __DIR__ + ], + ]; + + $check = new UsedEnvironmentVariablesAreDefined(); + + $this->assertFalse($check->check($config)); + $this->assertSame($check->amount, 2); + $this->assertContains('UNDEFINED', $check->undefined); + $this->assertContains('GET_UNDEFINED', $check->undefined); + $this->assertSame( + "2 used environmental variables are undefined: \nUNDEFINED\nGET_UNDEFINED", + $check->message($config) + ); + } +} diff --git a/translations/de/checks.php b/translations/de/checks.php index 4b6be7e..44e48c4 100644 --- a/translations/de/checks.php +++ b/translations/de/checks.php @@ -1,109 +1,113 @@ - [ - 'message' => 'Der Anwendungsschlüssel ist nicht gesetzt. Nutze "php artisan key:generate", um einen zu erstellen und zu setzen.', - 'name' => 'Anwendungsschlüssel ist gesetzt', - ], - 'composer_with_dev_dependencies_is_up_to_date' => [ - 'message' => 'Die Composer Abhängigkeiten sind nicht aktuell. Nutze "composer install", um diese zu aktualisieren. :more', - 'name' => 'Composer Abhängigkeiten (inkl. dev) sind aktuell', - ], - 'composer_without_dev_dependencies_is_up_to_date' => [ - 'message' => 'Die Composer Abhängigkeiten sind nicht aktuell. Nutze "composer install", um diese zu aktualisieren. :more', - 'name' => 'Composer Abhängigkeiten (ohne dev) sind aktuell', - ], - 'configuration_is_cached' => [ - 'message' => 'Die Konfiguration sollte für bessere Performance gecached sein im Produktivbetrieb. Nutze "php artisan config:cache", um den Konfigurations-Cache zu erstellen.', - 'name' => 'Konfiguration ist gecached', - ], - 'configuration_is_not_cached' => [ - 'message' => 'Die Konfiguration sollte während der Entwicklung nicht gecached sein. Nutze "php artisan config:clear", um den Konfigurations-Cache zu leeren.', - 'name' => 'Konfiguration ist nicht gecached', - ], - 'correct_php_version_is_installed' => [ - 'message' => 'Die benötigte PHP Version ist nicht installiert.' . PHP_EOL . 'Benötigt: :required' . PHP_EOL . 'In Verwendung: :used', - 'name' => 'Die richtige PHP Version ist installiert', - ], - 'database_can_be_accessed' => [ - 'message' => 'Auf die Datenbank kann nicht zugegriffen werden: :error', - 'name' => 'Die Datenbank ist erreichbar', - ], - 'debug_mode_is_not_enabled' => [ - 'message' => 'Der Debugging-Modus sollte im Produktivbetrieb nicht genutzt werden. Setze "APP_DEBUG" in der .env Datei auf "false".', - 'name' => 'Der Debugging-Modus ist deaktiviert', - ], - 'directories_have_correct_permissions' => [ - 'message' => 'Folgende Verzeichnisse sind nicht beschreibbar:' . PHP_EOL .':directories', - 'name' => 'Alle Verzeichnisse haben die richtigen Berechtigungen', - ], - 'env_file_exists' => [ - 'message' => 'Die .env Datei existiert nicht. Bitte kopiere die Datei .env.example zu .env und passe diese entsprechend an.', - 'name' => 'Die Umgebungsvariablendatei existiert', - ], - 'example_environment_variables_are_set' => [ - 'message' => 'Folgende Umgebungsvariablen fehlen im .env Umgebungsfile, sind aber in .env.example definiert:' . PHP_EOL . ':variables', - 'name' => 'Die Beispiel-Umgebungsvariablen sind gesetzt', - ], - 'locales_are_installed' => [ - 'message' => [ - 'cannot_run_on_windows' => 'Dieser Check kann unter Windows nicht ausgeführt werden..', - 'locale_command_not_available' => 'Der Befehl "locale -a" ist auf dem aktuellen System nicht verfügbar.', - 'missing_locales' => 'Folgende Sprachumgebungen (locales) fehlen:' . PHP_EOL . ':locales', - 'shell_exec_not_available' => 'Die Funktion "shell_exec" ist entweder nicht definiert oder deaktiviert, daher können die Sprachumgebungen nicht abgefragt werden.', - ], - 'name' => 'Benötigte Sprachumgebungen sind installiert', - ], - 'maintenance_mode_not_enabled' => [ - 'message' => 'Der Wartungsmodus ist noch aktiv. Deaktiviere ihn mit "php artisan up".', - 'name' => 'Wartungsmodus ist nicht aktiv', - ], - 'migrations_are_up_to_date' => [ - 'message' => [ - 'need_to_migrate' => 'Die Datenbank muss aktualisiert werden. Nutze "php artisan migrate", um die Migrationen einzuspielen.', - 'unable_to_check' => 'Die Migrationen konnten nicht geprüft werden: :reason', - ], - 'name' => 'Die Migrationen sind aktuell', - ], - 'php_extensions_are_disabled' => [ - 'message' => 'Die folgenden Erweiterungen sind noch immer aktiviert:' . PHP_EOL . ':extensions', - 'name' => 'Unerwünschte PHP Erweiterungen sind deaktiviert', - ], - 'php_extensions_are_installed' => [ - 'message' => 'Die folgenden Erweiterungen fehlen:' . PHP_EOL . ':extensions', - 'name' => 'Die benötigten PHP Erweiterungen sind installiert', - ], - 'redis_can_be_accessed' => [ - 'message' => [ - 'not_accessible' => 'Auf den Redis Cache kann nicht zugegriffen werden: :error', - 'default_cache' => 'Der Standard-Cache ist nicht erreichbar.', - 'named_cache' => 'Der Cache :name ist nicht erreichbar.', - ], - 'name' => 'Der Redis Cache ist erreichbar', - ], - 'routes_are_cached' => [ - 'message' => 'Die Routen sollten für bessere Performance gecached sein im Produktivbetrieb. Nutze "php artisan route:cache", um den Routen-Cache zu erstellen.', - 'name' => 'Routen sind gecached', - ], - 'routes_are_not_cached' => [ - 'message' => 'Die Routen sollten während der Entwicklung nicht gecached sein. Nutze "php artisan route:clear", um den Routen-Cache zu leeren.', - 'name' => 'Routen sind nicht gecached', - ], - 'servers_are_pingable' => [ - 'message' => "Der Server ':host' (Port: :port) ist nicht erreichbar (Timeout nach :timeout Sekunden).", - 'name' => 'Benötigte Server sind pingbar', - ], - 'storage_directory_is_linked' => [ - 'message' => 'Das Speicherverzeichnis ist nicht verlinkt. Nutze "php artisan storage:link", um eine symbolische Verknüpfung zu erstellen.', - 'name' => 'Das Speicherverzeichnis ist verlinkt', - ], - 'supervisor_programs_are_running' => [ - 'message' => [ - 'cannot_run_on_windows' => 'Dieser Check kann unter Windows nicht ausgeführt werden..', - 'not_running_programs' => 'Die folgenden Programme laufen nicht oder benötigen einen Neustart:' . PHP_EOL . ':programs', - 'shell_exec_not_available' => 'Die Funktion "shell_exec" ist entweder nicht definiert oder deaktiviert, daher können die laufenden Programme nicht abgefragt werden.', - 'supervisor_command_not_available' => 'Der Befehl "supervisorctl" ist auf dem aktuellen System nicht verfügbar.', - ], - 'name' => 'Alle supervisor Programme sind in Betrieb', - ], -]; + [ + 'message' => 'Der Anwendungsschlüssel ist nicht gesetzt. Nutze "php artisan key:generate", um einen zu erstellen und zu setzen.', + 'name' => 'Anwendungsschlüssel ist gesetzt', + ], + 'composer_with_dev_dependencies_is_up_to_date' => [ + 'message' => 'Die Composer Abhängigkeiten sind nicht aktuell. Nutze "composer install", um diese zu aktualisieren. :more', + 'name' => 'Composer Abhängigkeiten (inkl. dev) sind aktuell', + ], + 'composer_without_dev_dependencies_is_up_to_date' => [ + 'message' => 'Die Composer Abhängigkeiten sind nicht aktuell. Nutze "composer install", um diese zu aktualisieren. :more', + 'name' => 'Composer Abhängigkeiten (ohne dev) sind aktuell', + ], + 'configuration_is_cached' => [ + 'message' => 'Die Konfiguration sollte für bessere Performance gecached sein im Produktivbetrieb. Nutze "php artisan config:cache", um den Konfigurations-Cache zu erstellen.', + 'name' => 'Konfiguration ist gecached', + ], + 'configuration_is_not_cached' => [ + 'message' => 'Die Konfiguration sollte während der Entwicklung nicht gecached sein. Nutze "php artisan config:clear", um den Konfigurations-Cache zu leeren.', + 'name' => 'Konfiguration ist nicht gecached', + ], + 'correct_php_version_is_installed' => [ + 'message' => 'Die benötigte PHP Version ist nicht installiert.' . PHP_EOL . 'Benötigt: :required' . PHP_EOL . 'In Verwendung: :used', + 'name' => 'Die richtige PHP Version ist installiert', + ], + 'database_can_be_accessed' => [ + 'message' => 'Auf die Datenbank kann nicht zugegriffen werden: :error', + 'name' => 'Die Datenbank ist erreichbar', + ], + 'debug_mode_is_not_enabled' => [ + 'message' => 'Der Debugging-Modus sollte im Produktivbetrieb nicht genutzt werden. Setze "APP_DEBUG" in der .env Datei auf "false".', + 'name' => 'Der Debugging-Modus ist deaktiviert', + ], + 'directories_have_correct_permissions' => [ + 'message' => 'Folgende Verzeichnisse sind nicht beschreibbar:' . PHP_EOL .':directories', + 'name' => 'Alle Verzeichnisse haben die richtigen Berechtigungen', + ], + 'env_file_exists' => [ + 'message' => 'Die .env Datei existiert nicht. Bitte kopiere die Datei .env.example zu .env und passe diese entsprechend an.', + 'name' => 'Die Umgebungsvariablendatei existiert', + ], + 'example_environment_variables_are_set' => [ + 'message' => 'Folgende Umgebungsvariablen fehlen im .env Umgebungsfile, sind aber in .env.example definiert:' . PHP_EOL . ':variables', + 'name' => 'Die Beispiel-Umgebungsvariablen sind gesetzt', + ], + 'locales_are_installed' => [ + 'message' => [ + 'cannot_run_on_windows' => 'Dieser Check kann unter Windows nicht ausgeführt werden..', + 'locale_command_not_available' => 'Der Befehl "locale -a" ist auf dem aktuellen System nicht verfügbar.', + 'missing_locales' => 'Folgende Sprachumgebungen (locales) fehlen:' . PHP_EOL . ':locales', + 'shell_exec_not_available' => 'Die Funktion "shell_exec" ist entweder nicht definiert oder deaktiviert, daher können die Sprachumgebungen nicht abgefragt werden.', + ], + 'name' => 'Benötigte Sprachumgebungen sind installiert', + ], + 'maintenance_mode_not_enabled' => [ + 'message' => 'Der Wartungsmodus ist noch aktiv. Deaktiviere ihn mit "php artisan up".', + 'name' => 'Wartungsmodus ist nicht aktiv', + ], + 'migrations_are_up_to_date' => [ + 'message' => [ + 'need_to_migrate' => 'Die Datenbank muss aktualisiert werden. Nutze "php artisan migrate", um die Migrationen einzuspielen.', + 'unable_to_check' => 'Die Migrationen konnten nicht geprüft werden: :reason', + ], + 'name' => 'Die Migrationen sind aktuell', + ], + 'php_extensions_are_disabled' => [ + 'message' => 'Die folgenden Erweiterungen sind noch immer aktiviert:' . PHP_EOL . ':extensions', + 'name' => 'Unerwünschte PHP Erweiterungen sind deaktiviert', + ], + 'php_extensions_are_installed' => [ + 'message' => 'Die folgenden Erweiterungen fehlen:' . PHP_EOL . ':extensions', + 'name' => 'Die benötigten PHP Erweiterungen sind installiert', + ], + 'redis_can_be_accessed' => [ + 'message' => [ + 'not_accessible' => 'Auf den Redis Cache kann nicht zugegriffen werden: :error', + 'default_cache' => 'Der Standard-Cache ist nicht erreichbar.', + 'named_cache' => 'Der Cache :name ist nicht erreichbar.', + ], + 'name' => 'Der Redis Cache ist erreichbar', + ], + 'routes_are_cached' => [ + 'message' => 'Die Routen sollten für bessere Performance gecached sein im Produktivbetrieb. Nutze "php artisan route:cache", um den Routen-Cache zu erstellen.', + 'name' => 'Routen sind gecached', + ], + 'routes_are_not_cached' => [ + 'message' => 'Die Routen sollten während der Entwicklung nicht gecached sein. Nutze "php artisan route:clear", um den Routen-Cache zu leeren.', + 'name' => 'Routen sind nicht gecached', + ], + 'servers_are_pingable' => [ + 'message' => "Der Server ':host' (Port: :port) ist nicht erreichbar (Timeout nach :timeout Sekunden).", + 'name' => 'Benötigte Server sind pingbar', + ], + 'storage_directory_is_linked' => [ + 'message' => 'Das Speicherverzeichnis ist nicht verlinkt. Nutze "php artisan storage:link", um eine symbolische Verknüpfung zu erstellen.', + 'name' => 'Das Speicherverzeichnis ist verlinkt', + ], + 'supervisor_programs_are_running' => [ + 'message' => [ + 'cannot_run_on_windows' => 'Dieser Check kann unter Windows nicht ausgeführt werden..', + 'not_running_programs' => 'Die folgenden Programme laufen nicht oder benötigen einen Neustart:' . PHP_EOL . ':programs', + 'shell_exec_not_available' => 'Die Funktion "shell_exec" ist entweder nicht definiert oder deaktiviert, daher können die laufenden Programme nicht abgefragt werden.', + 'supervisor_command_not_available' => 'Der Befehl "supervisorctl" ist auf dem aktuellen System nicht verfügbar.', + ], + 'name' => 'Alle supervisor Programme sind in Betrieb', + ], + 'used_env_variables_are_defined' => [ + 'message' => ':amount verwendete Umgebungsvariablen sind undefiniert:'.PHP_EOL.':undefined', + 'name' => 'Alle verwendete Umgebungsvariablen sind definiert.', + ], +]; diff --git a/translations/en/checks.php b/translations/en/checks.php index 2915a13..7f92e7d 100644 --- a/translations/en/checks.php +++ b/translations/en/checks.php @@ -1,113 +1,117 @@ - [ - 'message' => 'The application key is not set. Call "php artisan key:generate" to create and set one.', - 'name' => 'App key is set', - ], - 'composer_with_dev_dependencies_is_up_to_date' => [ - 'message' => 'Your composer dependencies are not up to date. Call "composer install" to update them. :more', - 'name' => 'Composer dependencies (including dev) are up to date', - ], - 'composer_without_dev_dependencies_is_up_to_date' => [ - 'message' => 'Your composer dependencies are not up to date. Call "composer install" to update them. :more', - 'name' => 'Composer dependencies (without dev) are up to date', - ], - 'configuration_is_cached' => [ - 'message' => 'Your configuration should be cached in production for better performance. Call "php artisan config:cache" to create the configuration cache.', - 'name' => 'Configuration is cached', - ], - 'configuration_is_not_cached' => [ - 'message' => 'Your configuration files should not be cached during development. Call "php artisan config:clear" to clear the configuration cache.', - 'name' => 'Configuration is not cached', - ], - 'correct_php_version_is_installed' => [ - 'message' => 'You do not have the required PHP version installed.' . PHP_EOL . 'Required: :required' . PHP_EOL . 'Used: :used', - 'name' => 'The correct PHP version is installed', - ], - 'database_can_be_accessed' => [ - 'message' => 'The database can not be accessed: :error', - 'name' => 'The database can be accessed', - ], - 'debug_mode_is_not_enabled' => [ - 'message' => 'You should not use debug mode in production. Set "APP_DEBUG" in the .env file to "false".', - 'name' => 'Debug mode is not enabled', - ], - 'directories_have_correct_permissions' => [ - 'message' => 'The following directories are not writable:' . PHP_EOL .':directories', - 'name' => 'All directories have the correct permissions', - ], - 'env_file_exists' => [ - 'message' => 'The .env file does not exist. Please copy your .env.example file as .env and adjust accordingly.', - 'name' => 'The environment file exists', - ], - 'example_environment_variables_are_set' => [ - 'message' => 'These environment variables are missing in your .env file, but are defined in your .env.example:' . PHP_EOL . ':variables', - 'name' => 'The example environment variables are set', - ], - 'example_environment_variables_are_up_to_date' => [ - 'message' => 'These environment variables are defined in your .env file, but are missing in your .env.example:' . PHP_EOL . ':variables', - 'name' => 'The example environment variables are up-to-date', - ], - 'locales_are_installed' => [ - 'message' => [ - 'cannot_run_on_windows' => 'This check cannot be run on Windows.', - 'locale_command_not_available' => 'The "locale -a" command is not available on the current OS.', - 'missing_locales' => 'The following locales are missing:' . PHP_EOL . ':locales', - 'shell_exec_not_available' => 'The function "shell_exec" is not defined or disabled, so we cannot check the locales.', - ], - 'name' => 'Required locales are installed', - ], - 'maintenance_mode_not_enabled' => [ - 'message' => 'Maintenance mode is still enabled. Disable it with "php artisan up".', - 'name' => 'Maintenance mode is not enabled', - ], - 'migrations_are_up_to_date' => [ - 'message' => [ - 'need_to_migrate' => 'You need to update your database. Call "php artisan migrate" to run migrations.', - 'unable_to_check' => 'Unable to check for migrations: :reason', - ], - 'name' => 'The migrations are up to date', - ], - 'php_extensions_are_disabled' => [ - 'message' => 'The following extensions are still enabled:' . PHP_EOL . ':extensions', - 'name' => 'Unwanted PHP extensions are disabled', - ], - 'php_extensions_are_installed' => [ - 'message' => 'The following extensions are missing:' . PHP_EOL . ':extensions', - 'name' => 'The required PHP extensions are installed', - ], - 'redis_can_be_accessed' => [ - 'message' => [ - 'not_accessible' => 'The Redis cache can not be accessed: :error', - 'default_cache' => 'The default cache is not reachable.', - 'named_cache' => 'The named cache :name is not reachable.', - ], - 'name' => 'The Redis cache can be accessed', - ], - 'routes_are_cached' => [ - 'message' => 'Your routes should be cached in production for better performance. Call "php artisan route:cache" to create the route cache.', - 'name' => 'Routes are cached', - ], - 'routes_are_not_cached' => [ - 'message' => 'Your routes should not be cached during development. Call "php artisan route:clear" to clear the route cache.', - 'name' => 'Routes are not cached', - ], - 'servers_are_pingable' => [ - 'message' => "The server ':host' (port: :port) is not reachable (timeout after :timeout seconds).", - 'name' => 'Required servers are pingable', - ], - 'storage_directory_is_linked' => [ - 'message' => 'The storage directory is not linked. Use "php artisan storage:link" to create a symbolic link.', - 'name' => 'The storage directory is linked', - ], - 'supervisor_programs_are_running' => [ - 'message' => [ - 'cannot_run_on_windows' => 'This check cannot be run on Windows.', - 'not_running_programs' => 'The following programs are not running or require a restart:' . PHP_EOL . ':programs', - 'shell_exec_not_available' => 'The function "shell_exec" is not defined or disabled, so we cannot check the running programs.', - 'supervisor_command_not_available' => 'The "supervisorctl" command is not available on the current OS.', - ], - 'name' => 'All supervisor programs are running', - ], -]; + [ + 'message' => 'The application key is not set. Call "php artisan key:generate" to create and set one.', + 'name' => 'App key is set', + ], + 'composer_with_dev_dependencies_is_up_to_date' => [ + 'message' => 'Your composer dependencies are not up to date. Call "composer install" to update them. :more', + 'name' => 'Composer dependencies (including dev) are up to date', + ], + 'composer_without_dev_dependencies_is_up_to_date' => [ + 'message' => 'Your composer dependencies are not up to date. Call "composer install" to update them. :more', + 'name' => 'Composer dependencies (without dev) are up to date', + ], + 'configuration_is_cached' => [ + 'message' => 'Your configuration should be cached in production for better performance. Call "php artisan config:cache" to create the configuration cache.', + 'name' => 'Configuration is cached', + ], + 'configuration_is_not_cached' => [ + 'message' => 'Your configuration files should not be cached during development. Call "php artisan config:clear" to clear the configuration cache.', + 'name' => 'Configuration is not cached', + ], + 'correct_php_version_is_installed' => [ + 'message' => 'You do not have the required PHP version installed.' . PHP_EOL . 'Required: :required' . PHP_EOL . 'Used: :used', + 'name' => 'The correct PHP version is installed', + ], + 'database_can_be_accessed' => [ + 'message' => 'The database can not be accessed: :error', + 'name' => 'The database can be accessed', + ], + 'debug_mode_is_not_enabled' => [ + 'message' => 'You should not use debug mode in production. Set "APP_DEBUG" in the .env file to "false".', + 'name' => 'Debug mode is not enabled', + ], + 'directories_have_correct_permissions' => [ + 'message' => 'The following directories are not writable:' . PHP_EOL .':directories', + 'name' => 'All directories have the correct permissions', + ], + 'env_file_exists' => [ + 'message' => 'The .env file does not exist. Please copy your .env.example file as .env and adjust accordingly.', + 'name' => 'The environment file exists', + ], + 'example_environment_variables_are_set' => [ + 'message' => 'These environment variables are missing in your .env file, but are defined in your .env.example:' . PHP_EOL . ':variables', + 'name' => 'The example environment variables are set', + ], + 'example_environment_variables_are_up_to_date' => [ + 'message' => 'These environment variables are defined in your .env file, but are missing in your .env.example:' . PHP_EOL . ':variables', + 'name' => 'The example environment variables are up-to-date', + ], + 'locales_are_installed' => [ + 'message' => [ + 'cannot_run_on_windows' => 'This check cannot be run on Windows.', + 'locale_command_not_available' => 'The "locale -a" command is not available on the current OS.', + 'missing_locales' => 'The following locales are missing:' . PHP_EOL . ':locales', + 'shell_exec_not_available' => 'The function "shell_exec" is not defined or disabled, so we cannot check the locales.', + ], + 'name' => 'Required locales are installed', + ], + 'maintenance_mode_not_enabled' => [ + 'message' => 'Maintenance mode is still enabled. Disable it with "php artisan up".', + 'name' => 'Maintenance mode is not enabled', + ], + 'migrations_are_up_to_date' => [ + 'message' => [ + 'need_to_migrate' => 'You need to update your database. Call "php artisan migrate" to run migrations.', + 'unable_to_check' => 'Unable to check for migrations: :reason', + ], + 'name' => 'The migrations are up to date', + ], + 'php_extensions_are_disabled' => [ + 'message' => 'The following extensions are still enabled:' . PHP_EOL . ':extensions', + 'name' => 'Unwanted PHP extensions are disabled', + ], + 'php_extensions_are_installed' => [ + 'message' => 'The following extensions are missing:' . PHP_EOL . ':extensions', + 'name' => 'The required PHP extensions are installed', + ], + 'redis_can_be_accessed' => [ + 'message' => [ + 'not_accessible' => 'The Redis cache can not be accessed: :error', + 'default_cache' => 'The default cache is not reachable.', + 'named_cache' => 'The named cache :name is not reachable.', + ], + 'name' => 'The Redis cache can be accessed', + ], + 'routes_are_cached' => [ + 'message' => 'Your routes should be cached in production for better performance. Call "php artisan route:cache" to create the route cache.', + 'name' => 'Routes are cached', + ], + 'routes_are_not_cached' => [ + 'message' => 'Your routes should not be cached during development. Call "php artisan route:clear" to clear the route cache.', + 'name' => 'Routes are not cached', + ], + 'servers_are_pingable' => [ + 'message' => "The server ':host' (port: :port) is not reachable (timeout after :timeout seconds).", + 'name' => 'Required servers are pingable', + ], + 'storage_directory_is_linked' => [ + 'message' => 'The storage directory is not linked. Use "php artisan storage:link" to create a symbolic link.', + 'name' => 'The storage directory is linked', + ], + 'supervisor_programs_are_running' => [ + 'message' => [ + 'cannot_run_on_windows' => 'This check cannot be run on Windows.', + 'not_running_programs' => 'The following programs are not running or require a restart:' . PHP_EOL . ':programs', + 'shell_exec_not_available' => 'The function "shell_exec" is not defined or disabled, so we cannot check the running programs.', + 'supervisor_command_not_available' => 'The "supervisorctl" command is not available on the current OS.', + ], + 'name' => 'All supervisor programs are running', + ], + 'used_env_variables_are_defined' => [ + 'message' => ':amount used environmental variables are undefined: ' . PHP_EOL . ':undefined', + 'name' => 'All used environmental variables are defined', + ], +];