['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), ]); } } }