$service) { $imageName = str($service['image'] ?? '')->before(':')->before('@')->value(); if (in_array($imageName, $removedImages, true)) { $offenders[] = basename($templatePath).": {$serviceName} uses {$service['image']}"; } } } expect($offenders)->toBe([]); }); it('treats MinIO-compatible images as MinIO services', function (string $image) { $service = new Service; $service->setRelation('server', new Server); $service->setRelation('environment_variables', collect([ (new EnvironmentVariable)->forceFill(['key' => 'MINIO_BROWSER_REDIRECT_URL', 'value' => 'https://console.example.com']), (new EnvironmentVariable)->forceFill(['key' => 'MINIO_SERVER_URL', 'value' => 'https://s3.example.com']), ])); $application = (new ServiceApplication)->setRawAttributes(['image' => $image], sync: true); $application->setRelation('service', $service); expect($application->serviceType())->not->toBeNull() ->and(generateServiceSpecificFqdns($application)->all())->toBe([ 'https://console.example.com:9001', 'https://s3.example.com:9000', ]); })->with([ 'pgsty/silo:RELEASE.2026-10-15T00-00-00Z', 'docker.io/pgsty/silo:RELEASE.2026-10-15T00-00-00Z', 'ghcr.io/coollabsio/minio:RELEASE.2025-10-15T17-29-55Z', ]);