diff --git a/app/Models/User.php b/app/Models/User.php index 5ba3a299d..8c47df391 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -51,17 +51,21 @@ protected static function boot() $model->uuid = (string) new Cuid2(7); }); } + public function teams() { return $this->belongsToMany(Team::class); } + public function currentTeam() { return $this->belongsTo(Team::class); } + public function otherTeams() { - $team_id = session('currentTeam')->id; + $team_id = data_get(session('currentTeam'), 'id'); + return auth()->user()->teams->filter(function ($team) use ($team_id) { return $team->id != $team_id; }); diff --git a/bootstrap/helpers.php b/bootstrap/helpers.php index 86bc7a6e0..941705cfa 100644 --- a/bootstrap/helpers.php +++ b/bootstrap/helpers.php @@ -30,19 +30,22 @@ function remoteProcess( return resolve(DispatchRemoteProcess::class, [ 'remoteProcessArgs' => new RemoteProcessArgs( - type: $deployment_uuid ? ActivityTypes::DEPLOYMENT->value : ActivityTypes::REMOTE_PROCESS->value, model: $model, server_ip: $server->ip, - deployment_uuid: $deployment_uuid, private_key_location: $private_key_location, + deployment_uuid: $deployment_uuid, command: <<port, user: $server->user, + type: $deployment_uuid ? ActivityTypes::DEPLOYMENT->value : ActivityTypes::REMOTE_PROCESS->value, ), ])(); } +} + +if (!function_exists('checkTeam')) { function checkTeam(string $team_id) { $found_team = auth()->user()->teams->pluck('id')->contains($team_id); diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index a6ecc0af2..b0fc53227 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -19,6 +19,7 @@ public function definition(): array { return [ 'name' => fake()->name(), + 'uuid' => Str::uuid(), 'email' => fake()->unique()->safeEmail(), 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php index 63301e35c..70671dd98 100644 --- a/database/seeders/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -10,13 +10,11 @@ class UserSeeder extends Seeder public function run(): void { User::factory()->create([ - 'id' => 1, 'name' => 'Root User', 'email' => 'test@example.com', 'is_root_user' => true, ]); User::factory()->create([ - 'id' => 2, 'name' => 'Normal User', 'email' => 'test2@example.com', ]); diff --git a/docker/dev/supervisord.conf b/docker/dev/supervisord.conf index a2ff48927..8664759b2 100644 --- a/docker/dev/supervisord.conf +++ b/docker/dev/supervisord.conf @@ -13,15 +13,17 @@ stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 -[program:laravel-worker] -process_name=%(program_name)s_%(process_num)02d -command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan queue:listen -user=sail -autostart=true -autorestart=true -stopasgroup=true -killasgroup=true -numprocs=8 -redirect_stderr=true -stdout_logfile=/var/www/html/storage/logs/worker.log -stopwaitsecs=3600 +# Run workers by running manually `sail artisan queue:listen` +# +#[program:laravel-worker] +#process_name=%(program_name)s_%(process_num)02d +#command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan queue:listen +#user=sail +#autostart=true +#autorestart=true +#stopasgroup=true +#killasgroup=true +#numprocs=8 +#redirect_stderr=true +#stdout_logfile=/var/www/html/storage/logs/worker.log +#stopwaitsecs=3600 diff --git a/tests/Feature/DockerCommandsTest.php b/tests/Feature/DockerCommandsTest.php index ef14fd25a..1dd6c042f 100644 --- a/tests/Feature/DockerCommandsTest.php +++ b/tests/Feature/DockerCommandsTest.php @@ -2,13 +2,28 @@ use App\Models\User; use App\Models\Server; +use Database\Seeders\DatabaseSeeder; use Tests\Support\Output; +use Illuminate\Foundation\Testing\DatabaseMigrations; +use Illuminate\Foundation\Testing\RefreshDatabase; + +uses(RefreshDatabase::class); +uses(DatabaseMigrations::class); + +beforeEach(function () { + $this->seed(DatabaseSeeder::class); +}); it('starts a docker container correctly', function () { - test()->actingAs(User::factory()->create()); + test()->actingAs(User::factory([ + 'uuid' => Str::uuid(), + 'email' => Str::uuid().'@example.com', + ])->create()); $coolifyNamePrefix = 'coolify_test_'; + + $format = '{"ID":"{{ .ID }}", "Image": "{{ .Image }}", "Names":"{{ .Names }}"}'; $areThereCoolifyTestContainers = "docker ps --filter=\"name={$coolifyNamePrefix}*\" --format '{$format}' "; @@ -16,6 +31,14 @@ $containerName = 'coolify_test_' . now()->format('Ymd_his'); $host = Server::where('name', 'testing-local-docker-container')->first(); + // Stop testing containers + $activity = remoteProcess([ + "docker stop $(docker ps --filter='name={$coolifyNamePrefix}*' -aq)", + "docker rm $(docker ps --filter='name={$coolifyNamePrefix}*' -aq)", + ], $host); + ray($activity->description); + expect($activity->getExtraProperty('exitCode'))->toBe(0); + // Assert there's no containers start with coolify_test_* $activity = remoteProcess([$areThereCoolifyTestContainers], $host); $containers = Output::containerList($activity->getExtraProperty('stdout')); @@ -31,6 +54,9 @@ expect($containers->where('Names', $containerName)->count())->toBe(1); // Stop testing containers - $activity = remoteProcess(["docker stop $(docker ps --filter='name={$coolifyNamePrefix}*' -q)"], $host); + $activity = remoteProcess([ + "docker stop $(docker ps --filter='name={$coolifyNamePrefix}*' -aq)", + "docker rm $(docker ps --filter='name={$coolifyNamePrefix}*' -aq)", + ], $host); expect($activity->getExtraProperty('exitCode'))->toBe(0); });