diff --git a/app/Enums/ProcessStatus.php b/app/Enums/ProcessStatus.php
index 0031cabdd..cc9e32680 100644
--- a/app/Enums/ProcessStatus.php
+++ b/app/Enums/ProcessStatus.php
@@ -10,4 +10,5 @@ enum ProcessStatus: string
case ERROR = 'error';
case KILLED = 'killed';
case CANCELLED = 'cancelled';
+ case CLOSED = 'closed';
}
diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php
index 0de41f32a..cca9745c1 100644
--- a/app/Jobs/ApplicationDeploymentJob.php
+++ b/app/Jobs/ApplicationDeploymentJob.php
@@ -3,7 +3,7 @@
namespace App\Jobs;
use App\Enums\ApplicationDeploymentStatus;
-use App\Enums\ProxyTypes;
+use App\Enums\ProcessStatus;
use App\Events\ApplicationStatusChanged;
use App\Models\Application;
use App\Models\ApplicationDeploymentQueue;
@@ -158,6 +158,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
$this->preview->fqdn = $preview_fqdn;
$this->preview->save();
}
+ ApplicationPullRequestUpdateJob::dispatch(application: $this->application, preview: $this->preview, deployment_uuid: $this->deployment_uuid, status: ProcessStatus::IN_PROGRESS);
}
}
@@ -254,8 +255,14 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
$this->push_to_docker_registry();
}
$this->next(ApplicationDeploymentStatus::FINISHED->value);
+ if ($this->pull_request_id !== 0) {
+ ApplicationPullRequestUpdateJob::dispatch(application: $this->application, preview: $this->preview, deployment_uuid: $this->deployment_uuid, status: ProcessStatus::FINISHED);
+ }
$this->application->isConfigurationChanged(true);
} catch (Exception $e) {
+ if ($this->pull_request_id !== 0) {
+ ApplicationPullRequestUpdateJob::dispatch(application: $this->application, preview: $this->preview, deployment_uuid: $this->deployment_uuid, status: ProcessStatus::ERROR);
+ }
$this->fail($e);
throw $e;
} finally {
diff --git a/app/Jobs/ApplicationPullRequestUpdateJob.php b/app/Jobs/ApplicationPullRequestUpdateJob.php
index dbe0ff81c..85dde009d 100755
--- a/app/Jobs/ApplicationPullRequestUpdateJob.php
+++ b/app/Jobs/ApplicationPullRequestUpdateJob.php
@@ -17,38 +17,34 @@ class ApplicationPullRequestUpdateJob implements ShouldQueue, ShouldBeEncrypted
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public string $build_logs_url;
- public Application $application;
- public ApplicationPreview $preview;
public string $body;
public function __construct(
- public string $application_id,
- public int $pull_request_id,
- public string $deployment_uuid,
- public string $status
+ public Application $application,
+ public ApplicationPreview $preview,
+ public ProcessStatus $status,
+ public ?string $deployment_uuid = null
) {
}
public function handle()
{
try {
- $this->application = Application::findOrFail($this->application_id);
- $this->preview = ApplicationPreview::findPreviewByApplicationAndPullId($this->application->id, $this->pull_request_id);
-
- $this->build_logs_url = base_url() . "/project/{$this->application->environment->project->uuid}/{$this->application->environment->name}/application/{$this->application->uuid}/deployment/{$this->deployment_uuid}";
-
- if ($this->status === ProcessStatus::IN_PROGRESS->value) {
+ if ($this->status === ProcessStatus::CLOSED) {
+ $this->delete_comment();
+ return;
+ } else if ($this->status === ProcessStatus::IN_PROGRESS) {
$this->body = "The preview deployment is in progress. 🟡\n\n";
- }
- if ($this->status === ProcessStatus::FINISHED->value) {
+ } else if ($this->status === ProcessStatus::FINISHED) {
$this->body = "The preview deployment is ready. 🟢\n\n";
if ($this->preview->fqdn) {
$this->body .= "[Open Preview]({$this->preview->fqdn}) | ";
}
- }
- if ($this->status === ProcessStatus::ERROR->value) {
+ } else if ($this->status === ProcessStatus::ERROR) {
$this->body = "The preview deployment failed. 🔴\n\n";
}
+ $this->build_logs_url = base_url() . "/project/{$this->application->environment->project->uuid}/{$this->application->environment->name}/application/{$this->application->uuid}/deployment/{$this->deployment_uuid}";
+
$this->body .= "[Open Build Logs](" . $this->build_logs_url . ")\n\n\n";
$this->body .= "Last updated at: " . now()->toDateTimeString() . " CET";
@@ -77,10 +73,14 @@ class ApplicationPullRequestUpdateJob implements ShouldQueue, ShouldBeEncrypted
private function create_comment()
{
- ['data' => $data] = githubApi(source: $this->application->source, endpoint: "/repos/{$this->application->git_repository}/issues/{$this->pull_request_id}/comments", method: 'post', data: [
+ ['data' => $data] = githubApi(source: $this->application->source, endpoint: "/repos/{$this->application->git_repository}/issues/{$this->preview->pull_request_id}/comments", method: 'post', data: [
'body' => $this->body,
]);
$this->preview->pull_request_issue_comment_id = $data['id'];
$this->preview->save();
}
+ private function delete_comment()
+ {
+ githubApi(source: $this->application->source, endpoint: "/repos/{$this->application->git_repository}/issues/comments/{$this->preview->pull_request_issue_comment_id}", method: 'delete');
+ }
}
diff --git a/bootstrap/helpers/github.php b/bootstrap/helpers/github.php
index 60ff6d9c9..11cc5a3f8 100644
--- a/bootstrap/helpers/github.php
+++ b/bootstrap/helpers/github.php
@@ -69,6 +69,7 @@ function githubApi(GithubApp|GitlabApp|null $source, string $endpoint, string $m
}
$json = $response->json();
if ($response->failed() && $throwError) {
+ ray($json);
throw new \Exception("Failed to get data from {$source->name} with error:
" . $json['message'] . "
Rate Limit resets at: " . Carbon::parse((int)$response->header('X-RateLimit-Reset'))->format('Y-m-d H:i:s') . 'UTC');
}
return [
diff --git a/routes/webhooks.php b/routes/webhooks.php
index 77484c133..314d8a06f 100644
--- a/routes/webhooks.php
+++ b/routes/webhooks.php
@@ -1,5 +1,7 @@
id)->where('pull_request_id', $pull_request_id)->first();
if ($found) {
+ ApplicationPullRequestUpdateJob::dispatchSync(application: $application, preview: $found, status: ProcessStatus::CLOSED);
$found->delete();
$container_name = generateApplicationContainerName($application, $pull_request_id);
// ray('Stopping container: ' . $container_name);