Add managed registry provisioning, pruning, and readiness tracking
This commit is contained in:
@@ -7,11 +7,16 @@ use App\Jobs\Environments\DeployEnvironment;
|
||||
use App\Models\Application;
|
||||
use App\Models\Environment;
|
||||
use App\Models\Organisation;
|
||||
use App\Services\Registries\RegistryResolver;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class EnvironmentDeploymentController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private readonly RegistryResolver $registryResolver,
|
||||
) {}
|
||||
|
||||
public function store(StoreEnvironmentDeploymentRequest $request, Organisation $organisation, Application $application, Environment $environment): RedirectResponse
|
||||
{
|
||||
abort_unless(
|
||||
@@ -22,7 +27,7 @@ class EnvironmentDeploymentController extends Controller
|
||||
|
||||
$environment->loadMissing('services.replicas');
|
||||
|
||||
if ($organisation->registries()->doesntExist() && $this->serverIdsFor($environment)->count() > 1) {
|
||||
if (! $this->registryResolver->buildRegistryFor($organisation) && $this->serverIdsFor($environment)->count() > 1) {
|
||||
return back()->with('error', 'Configure a registry before deploying this environment to multiple servers.');
|
||||
}
|
||||
|
||||
|
||||
@@ -122,6 +122,7 @@ class OperationController extends Controller
|
||||
'status' => OperationStatus::CANCELLED,
|
||||
'finished_at' => now(),
|
||||
]);
|
||||
$this->clearOperationSecrets($operation);
|
||||
|
||||
return redirect()
|
||||
->route('operations.show', [
|
||||
@@ -168,4 +169,13 @@ class OperationController extends Controller
|
||||
default => false,
|
||||
};
|
||||
}
|
||||
|
||||
private function clearOperationSecrets(Operation $operation): void
|
||||
{
|
||||
$operation->steps()->update(['secrets' => null]);
|
||||
|
||||
$operation->children()->get()->each(function (Operation $child): void {
|
||||
$this->clearOperationSecrets($child);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ class RegistryController extends Controller
|
||||
Organisation::findOrFail($request->route('organisation'));
|
||||
|
||||
return inertia('registries/Create', [
|
||||
'registryTypes' => array_values(RegistryType::toArray()),
|
||||
'registryTypes' => $this->userConfigurableRegistryTypes(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ class RegistryController extends Controller
|
||||
|
||||
return inertia('registries/Edit', [
|
||||
'registry' => $registry,
|
||||
'registryTypes' => array_values(RegistryType::toArray()),
|
||||
'registryTypes' => $this->userConfigurableRegistryTypes(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -91,6 +91,8 @@ class RegistryController extends Controller
|
||||
/** @var Registry $registry */
|
||||
$registry = $organisation->registries()->findOrFail($request->route('registry'));
|
||||
|
||||
abort_if($registry->type === RegistryType::MANAGED, 403);
|
||||
|
||||
$credentials = $registry->credentials ?? [];
|
||||
$username = $request->string('username')->toString();
|
||||
|
||||
@@ -117,10 +119,23 @@ class RegistryController extends Controller
|
||||
$organisation = Organisation::findOrFail($request->route('organisation'));
|
||||
$registry = $organisation->registries()->findOrFail($request->route('registry'));
|
||||
|
||||
abort_if($registry->type === RegistryType::MANAGED, 403);
|
||||
|
||||
$registry->delete();
|
||||
|
||||
return redirect()
|
||||
->route('organisations.show', ['organisation' => $organisation->id])
|
||||
->with('success', 'Registry deleted.');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<int, string>
|
||||
*/
|
||||
private function userConfigurableRegistryTypes(): array
|
||||
{
|
||||
return collect(RegistryType::toArray())
|
||||
->reject(fn (string $type) => $type === RegistryType::MANAGED->value)
|
||||
->values()
|
||||
->all();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user