From 9f4a7384b262f35adbcfa735fd2fd506e098c00d Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 31 Mar 2023 18:26:38 +0200 Subject: [PATCH] fix: only set status in case the last command block is finished --- app/Actions/RemoteProcess/RunRemoteProcess.php | 16 ++++++++++------ app/Http/Livewire/PollActivity.php | 2 +- app/Jobs/DeployApplicationJob.php | 5 +++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/Actions/RemoteProcess/RunRemoteProcess.php b/app/Actions/RemoteProcess/RunRemoteProcess.php index 6627c1bd7..835317557 100644 --- a/app/Actions/RemoteProcess/RunRemoteProcess.php +++ b/app/Actions/RemoteProcess/RunRemoteProcess.php @@ -16,6 +16,8 @@ class RunRemoteProcess public bool $hideFromOutput; + public bool $setStatus; + protected $timeStart; protected $currentTime; @@ -31,7 +33,7 @@ class RunRemoteProcess /** * Create a new job instance. */ - public function __construct(Activity $activity, bool $hideFromOutput) + public function __construct(Activity $activity, bool $hideFromOutput, bool $setStatus) { if ($activity->getExtraProperty('type') !== ActivityTypes::REMOTE_PROCESS->value && $activity->getExtraProperty('type') !== ActivityTypes::DEPLOYMENT->value) { @@ -40,6 +42,7 @@ public function __construct(Activity $activity, bool $hideFromOutput) $this->activity = $activity; $this->hideFromOutput = $hideFromOutput; + $this->setStatus = $setStatus; } public function __invoke(): ProcessResult @@ -51,17 +54,18 @@ public function __invoke(): ProcessResult $processResult = Process::run($this->getCommand(), $this->handleOutput(...)); - $status = match ($processResult->exitCode()) { - 0 => ProcessStatus::FINISHED, - default => ProcessStatus::ERROR, - }; + $status = $processResult->exitCode() != 0 ? ProcessStatus::ERROR : ($this->setStatus ? ProcessStatus::FINISHED : null); $this->activity->properties = $this->activity->properties->merge([ 'exitCode' => $processResult->exitCode(), 'stdout' => $this->hideFromOutput || $processResult->output(), 'stderr' => $processResult->errorOutput(), - 'status' => $status, ]); + if (isset($status)) { + $this->activity->properties = $this->activity->properties->merge([ + 'status' => $status->value, + ]); + } $this->activity->save(); diff --git a/app/Http/Livewire/PollActivity.php b/app/Http/Livewire/PollActivity.php index 8092f57a5..ae3be1324 100644 --- a/app/Http/Livewire/PollActivity.php +++ b/app/Http/Livewire/PollActivity.php @@ -20,7 +20,7 @@ public function polling() $this->activity?->refresh(); } - if (data_get($this->activity, 'properties.exitCode') !== null) { + if (data_get($this->activity, 'properties.status') == 'finished' || data_get($this->activity, 'properties.status') == 'failed' ) { $this->isKeepAliveOn = false; } } diff --git a/app/Jobs/DeployApplicationJob.php b/app/Jobs/DeployApplicationJob.php index 647fb1ff1..ce8dd7bd9 100644 --- a/app/Jobs/DeployApplicationJob.php +++ b/app/Jobs/DeployApplicationJob.php @@ -129,7 +129,7 @@ public function handle(): void $this->execute_in_builder("docker compose --project-directory {$this->workdir} up -d"), "echo 'Done. 🎉'", "docker stop -t 0 {$this->deployment_uuid} >/dev/null" - ]); + ], setStatus: true); } private function execute_in_builder(string $command) @@ -244,7 +244,7 @@ private function set_labels_for_applications() return $labels; } - private function executeNow(array $command, string $propertyName = null, bool $hideFromOutput = false) + private function executeNow(array $command, string $propertyName = null, bool $hideFromOutput = false, $setStatus = false) { $commandText = collect($command)->implode("\n"); @@ -256,6 +256,7 @@ private function executeNow(array $command, string $propertyName = null, bool $h $remoteProcess = resolve(RunRemoteProcess::class, [ 'activity' => $this->activity, 'hideFromOutput' => $hideFromOutput, + 'setStatus' => $setStatus, ]); if ($propertyName) {