successful())->toBeTrue(); })->with([ ['worker,flux', 'worker'], ['worker,flux', 'flux'], ['web, all', 'flux'], ['flux,all,worker', 'worker'], ['horizon,scheduler,nightwatch,flux', 'horizon'], ['horizon,scheduler,nightwatch,flux', 'scheduler'], ['horizon,scheduler,nightwatch,flux', 'nightwatch'], ]); it('rejects services missing from the comma separated container roles', function () { $result = runContainerRoleHelper('web,flux', 'worker'); expect($result->failed())->toBeTrue(); }); it('falls back to the container role from the local env file', function () { $directory = sys_get_temp_dir().'/coolify-container-role-'.bin2hex(random_bytes(4)); mkdir($directory); file_put_contents($directory.'/.env', 'COOLIFY_CONTAINER_ROLE=worker,flux'.PHP_EOL); $result = runContainerRoleHelper('', 'flux', $directory); expect($result->successful())->toBeTrue(); }); it('keeps production and development role helpers in sync', function () { expect(file_get_contents(base_path('docker/production/etc/s6-overlay/scripts/container-role'))) ->toBe(file_get_contents(base_path('docker/development/etc/s6-overlay/scripts/container-role'))); }); function runContainerRoleHelper(string $roles, string $serviceRole, ?string $workingDirectory = null): ProcessResult { $script = base_path('docker/development/etc/s6-overlay/scripts/container-role'); $command = sprintf( '. %s && coolify_container_has_role %s', escapeshellarg($script), escapeshellarg($serviceRole), ); return Process::path($workingDirectory ?? base_path()) ->env(['COOLIFY_CONTAINER_ROLE' => $roles]) ->run($command); } it('does not register a separate v5 flux status listener service', function () { foreach (['development', 'production'] as $environment) { $base = base_path("docker/{$environment}/etc/s6-overlay/s6-rc.d"); expect(file_exists("{$base}/v5-flux-status-listener"))->toBeFalse() ->and(file_exists("{$base}/user/contents.d/v5-flux-status-listener"))->toBeFalse(); } }); it('configures flux to publish v5 resource statuses to laravel over local http by default', function () { foreach (['development', 'production'] as $environment) { $runScript = file_get_contents(base_path("docker/{$environment}/etc/s6-overlay/s6-rc.d/flux/run")); expect($runScript) ->toContain('COOLIFY_FLUX_LARAVEL_API_URL') ->toContain('http://127.0.0.1:8080') ->toContain('COOLIFY_FLUX_LARAVEL_API_TOKEN') ->not->toContain('APP_KEY') ->not->toContain("grep -E '^APP_KEY=' .env") ->not->toContain('COOLIFY_FLUX_REDIS_URL') ->not->toContain('COOLIFY_FLUX_RESOURCE_STATUS_CHANNEL'); } });