98 lines
3.0 KiB
PHP
98 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Carbon;
|
|
use OpenApi\Attributes as OA;
|
|
|
|
#[OA\Schema(
|
|
description: 'Project model',
|
|
type: 'object',
|
|
properties: [
|
|
'id' => ['type' => 'integer'],
|
|
'application_id' => ['type' => 'string'],
|
|
'deployment_uuid' => ['type' => 'string'],
|
|
'pull_request_id' => ['type' => 'integer'],
|
|
'force_rebuild' => ['type' => 'boolean'],
|
|
'commit' => ['type' => 'string'],
|
|
'status' => ['type' => 'string'],
|
|
'is_webhook' => ['type' => 'boolean'],
|
|
'is_api' => ['type' => 'boolean'],
|
|
'created_at' => ['type' => 'string'],
|
|
'updated_at' => ['type' => 'string'],
|
|
'logs' => ['type' => 'string'],
|
|
'current_process_id' => ['type' => 'string'],
|
|
'restart_only' => ['type' => 'boolean'],
|
|
'git_type' => ['type' => 'string'],
|
|
'server_id' => ['type' => 'integer'],
|
|
'application_name' => ['type' => 'string'],
|
|
'server_name' => ['type' => 'string'],
|
|
'deployment_url' => ['type' => 'string'],
|
|
'destination_id' => ['type' => 'string'],
|
|
'only_this_server' => ['type' => 'boolean'],
|
|
'rollback' => ['type' => 'boolean'],
|
|
'commit_message' => ['type' => 'string'],
|
|
],
|
|
)]
|
|
class ApplicationDeploymentQueue extends Model
|
|
{
|
|
protected $guarded = [];
|
|
|
|
public function setStatus(string $status)
|
|
{
|
|
$this->update([
|
|
'status' => $status,
|
|
]);
|
|
}
|
|
|
|
public function getOutput($name)
|
|
{
|
|
if (! $this->logs) {
|
|
return null;
|
|
}
|
|
|
|
return collect(json_decode($this->logs))->where('name', $name)->first()?->output ?? null;
|
|
}
|
|
|
|
public function commitMessage()
|
|
{
|
|
if (empty($this->commit_message) || is_null($this->commit_message)) {
|
|
return null;
|
|
}
|
|
|
|
return str($this->commit_message)->trim()->limit(50)->value();
|
|
}
|
|
|
|
public function addLogEntry(string $message, string $type = 'stdout', bool $hidden = false)
|
|
{
|
|
if ($type === 'error') {
|
|
$type = 'stderr';
|
|
}
|
|
$message = str($message)->trim();
|
|
if ($message->startsWith('╔')) {
|
|
$message = "\n".$message;
|
|
}
|
|
$newLogEntry = [
|
|
'command' => null,
|
|
'output' => remove_iip($message),
|
|
'type' => $type,
|
|
'timestamp' => Carbon::now('UTC'),
|
|
'hidden' => $hidden,
|
|
'batch' => 1,
|
|
];
|
|
if ($this->logs) {
|
|
$previousLogs = json_decode($this->logs, associative: true, flags: JSON_THROW_ON_ERROR);
|
|
$newLogEntry['order'] = count($previousLogs) + 1;
|
|
$previousLogs[] = $newLogEntry;
|
|
$this->update([
|
|
'logs' => json_encode($previousLogs, flags: JSON_THROW_ON_ERROR),
|
|
]);
|
|
} else {
|
|
$this->update([
|
|
'logs' => json_encode([$newLogEntry], flags: JSON_THROW_ON_ERROR),
|
|
]);
|
|
}
|
|
}
|
|
}
|