mirror of
https://github.com/coollabsio/coolify.git
synced 2026-03-11 08:55:47 +00:00
Add runner execution observability and lifecycle hardening for self-hosted GitHub Actions runners, including: - scheduled artifact cleanup job for cached runner tarballs/templates - workflow_job in_progress handling to mark executions as running - safer cleanup failure handling and non-functional server fallback - persisted workflow job HTML URLs with execution "Open" links in UI - configurable runner group name sync (UI + provisioning + GitHub API) - webhook events persistence and auto-fix for missing required events - strict enum/status checks and related model cast/query improvements Also includes migrations and expanded feature/unit coverage for webhook, provisioning, cleanup, and runner group/event sync behaviors.
64 lines
1.5 KiB
PHP
64 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Enums\GithubRunnerStatus;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
|
|
class GithubRunnerExecution extends BaseModel
|
|
{
|
|
protected $guarded = [];
|
|
|
|
protected function casts(): array
|
|
{
|
|
return [
|
|
'status' => GithubRunnerStatus::class,
|
|
'workflow_job_id' => 'integer',
|
|
'runner_id' => 'integer',
|
|
'pid' => 'integer',
|
|
'started_at' => 'datetime',
|
|
'completed_at' => 'datetime',
|
|
];
|
|
}
|
|
|
|
public function server(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Server::class);
|
|
}
|
|
|
|
public function config(): BelongsTo
|
|
{
|
|
return $this->belongsTo(GithubRunnerConfig::class, 'github_runner_config_id');
|
|
}
|
|
|
|
public function isActive(): bool
|
|
{
|
|
return $this->status->isActive();
|
|
}
|
|
|
|
public function duration(): ?string
|
|
{
|
|
if (! $this->started_at) {
|
|
return null;
|
|
}
|
|
|
|
$end = $this->completed_at ?? now();
|
|
|
|
return $this->started_at->diffForHumans($end, true);
|
|
}
|
|
|
|
public function workflowJobUrl(): ?string
|
|
{
|
|
$directUrl = trim((string) $this->workflow_job_html_url);
|
|
if ($directUrl !== '') {
|
|
return $directUrl;
|
|
}
|
|
|
|
$repositoryFullName = trim((string) $this->repository_full_name);
|
|
if ($repositoryFullName === '' || ! $this->workflow_job_id) {
|
|
return null;
|
|
}
|
|
|
|
return "https://github.com/{$repositoryFullName}/actions?query=".urlencode((string) $this->workflow_job_id);
|
|
}
|
|
}
|