mirror of
https://github.com/coollabsio/coolify.git
synced 2026-03-11 08:55:47 +00:00
Implement end-to-end GitHub Actions runner support with provisioning, tracking, and cleanup flows. - handle `workflow_job` webhooks to provision and tear down runners - add runner config/execution models, enum states, and relationships - create jobs for provisioning, cleanup, and stale-runner reaping - schedule periodic stale runner cleanup in the console kernel - add Livewire server UI to manage runner configuration and executions - store GitHub App runner permissions and runner group metadata - add migrations for runner permissions, configs, executions, and group id - update GitHub permissions URL generation for organization app settings - include feature/unit tests for runner behavior and permission paths
35 lines
1.1 KiB
PHP
35 lines
1.1 KiB
PHP
<?php
|
|
|
|
use App\Models\GithubApp;
|
|
use App\Models\Team;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
function makeGithubApp(array $attributes = []): GithubApp
|
|
{
|
|
$team = Team::factory()->create();
|
|
|
|
return GithubApp::create(array_merge([
|
|
'uuid' => fake()->uuid(),
|
|
'name' => 'My Cool App',
|
|
'html_url' => 'https://github.com',
|
|
'api_url' => 'https://api.github.com',
|
|
'organization' => null,
|
|
'team_id' => $team->id,
|
|
], $attributes));
|
|
}
|
|
|
|
it('returns user-level permissions path when no organization is set', function () {
|
|
$app = makeGithubApp(['name' => 'My Cool App', 'organization' => null]);
|
|
|
|
expect(getPermissionsPath($app))
|
|
->toBe('https://github.com/settings/apps/my-cool-app/permissions');
|
|
});
|
|
|
|
it('returns organization-level permissions path when organization is set', function () {
|
|
$app = makeGithubApp(['name' => 'My Cool App', 'organization' => 'coollabsio']);
|
|
|
|
expect(getPermissionsPath($app))
|
|
->toBe('https://github.com/organizations/coollabsio/settings/apps/my-cool-app/permissions');
|
|
});
|