Add endpoint for triggering site deployment (#563)

* feat(api): Add endpoint for triggering site deployment

- Add POST /api/projects/{project}/servers/{server}/sites/{site}/deploy endpoint
- Add feature tests

* fix merge issue and generate api docs

* fix merge

---------

Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
This commit is contained in:
Dimitar Yanakiev
2025-04-05 20:41:52 +03:00
committed by GitHub
parent f483f7fdca
commit 2a670146d8
33 changed files with 1941 additions and 1450 deletions

View File

@ -3,11 +3,13 @@
namespace App\Http\Controllers\API;
use App\Actions\Site\CreateSite;
use App\Actions\Site\Deploy;
use App\Actions\Site\UpdateAliases;
use App\Actions\Site\UpdateDeploymentScript;
use App\Actions\Site\UpdateLoadBalancer;
use App\Enums\LoadBalancerMethod;
use App\Enums\SiteType;
use App\Exceptions\DeploymentScriptIsEmptyException;
use App\Http\Controllers\Controller;
use App\Http\Resources\SiteResource;
use App\Models\Project;
@ -133,6 +135,24 @@ public function updateAliases(Request $request, Project $project, Server $server
return new SiteResource($site);
}
#[Post('{site}/deploy', name: 'api.projects.servers.sites.deploy', middleware: 'ability:write')]
#[Endpoint(title: 'deploy', description: 'Run site deployment script')]
#[Response(status: 200)]
public function deploy(Request $request, Project $project, Server $server, Site $site): SiteResource
{
$this->authorize('update', [$site, $server]);
$this->validateRoute($project, $server, $site);
try {
app(Deploy::class)->run($site);
return new SiteResource($site);
} catch (DeploymentScriptIsEmptyException) {
abort(422, 'Deployment script is empty');
}
}
#[Put('{site}/deployment-script', name: 'api.projects.servers.sites.deployment-script', middleware: 'ability:write')]
#[Endpoint(title: 'deployment-script', description: 'Update site deployment script')]
#[BodyParam(name: 'script', type: 'string', description: 'Content of the deployment script')]