Implement Keystone environment deployments
This commit is contained in:
@@ -2,26 +2,65 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Actions\Applications\CreateLaravelEnvironment;
|
||||
use App\Actions\Applications\GenerateDeployKey;
|
||||
use App\Actions\Applications\VerifyRepositoryAccess;
|
||||
use App\Enums\RepositoryType;
|
||||
use App\Enums\ServerStatus;
|
||||
use App\Http\Requests\StoreApplicationRequest;
|
||||
use App\Models\Application;
|
||||
use App\Models\Organisation;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Inertia\Response;
|
||||
|
||||
class ApplicationController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
public function index(Request $request): Response
|
||||
{
|
||||
$organisation = Organisation::with('applications.instances.server')->findOrFail($request->route('organisation'));
|
||||
$organisation = Organisation::with('applications.environments.services')->findOrFail($request->route('organisation'));
|
||||
|
||||
return inertia('applications/Index', [
|
||||
'applications' => $organisation->applications,
|
||||
]);
|
||||
}
|
||||
|
||||
public function show(Request $request)
|
||||
public function create(Request $request): Response
|
||||
{
|
||||
Organisation::findOrFail($request->route('organisation'));
|
||||
|
||||
return inertia('applications/Create');
|
||||
}
|
||||
|
||||
public function store(StoreApplicationRequest $request): RedirectResponse
|
||||
{
|
||||
$organisation = Organisation::findOrFail($request->route('organisation'));
|
||||
|
||||
$application = $organisation->applications()->create([
|
||||
'name' => $request->string('name')->toString(),
|
||||
'repository_url' => $request->string('repository_url')->toString(),
|
||||
'repository_type' => RepositoryType::GIT,
|
||||
'default_branch' => $request->string('default_branch')->toString(),
|
||||
]);
|
||||
|
||||
app(GenerateDeployKey::class)->execute($application);
|
||||
app(CreateLaravelEnvironment::class)->execute($application->refresh(), $request->string('environment_name')->toString());
|
||||
|
||||
return redirect()
|
||||
->route('applications.show', ['organisation' => $organisation->id, 'application' => $application->id])
|
||||
->with('success', 'Application created. Add the deploy key to your repository before verifying access.');
|
||||
}
|
||||
|
||||
public function show(Request $request): Response
|
||||
{
|
||||
$id = $request->route('application');
|
||||
$application = Application::with(['instances.server', 'organisation'])->findOrFail($id);
|
||||
$organisation = Organisation::findOrFail($request->route('organisation'));
|
||||
$application = Application::with([
|
||||
'environments.services.slices',
|
||||
'environments.attachments.service',
|
||||
'environments.variables',
|
||||
'organisation',
|
||||
])->whereBelongsTo($organisation)->findOrFail($id);
|
||||
|
||||
return inertia('applications/Show', [
|
||||
'application' => $application,
|
||||
@@ -35,4 +74,16 @@ class ApplicationController extends Controller
|
||||
}),
|
||||
]);
|
||||
}
|
||||
|
||||
public function verifyRepository(Request $request): RedirectResponse
|
||||
{
|
||||
$organisation = Organisation::findOrFail($request->route('organisation'));
|
||||
$application = $organisation->applications()->findOrFail($request->route('application'));
|
||||
|
||||
if (! app(VerifyRepositoryAccess::class)->execute($application)) {
|
||||
return back()->with('error', 'Repository access could not be verified.');
|
||||
}
|
||||
|
||||
return back()->with('success', 'Repository access verified.');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user