Implement Keystone environment deployments
This commit is contained in:
81
tests/Feature/BuildArtifactPlanningTest.php
Normal file
81
tests/Feature/BuildArtifactPlanningTest.php
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
use App\Actions\Environments\PlanBuildArtifact;
|
||||
use App\Enums\BuildArtifactStatus;
|
||||
use App\Enums\BuildStrategy;
|
||||
use App\Enums\DeployPolicy;
|
||||
use App\Enums\RegistryType;
|
||||
use App\Enums\ServiceCategory;
|
||||
use App\Enums\ServiceType;
|
||||
use App\Models\Application;
|
||||
use App\Models\Environment;
|
||||
use App\Models\Organisation;
|
||||
use App\Models\Service;
|
||||
|
||||
it('plans single-server builds on the target server without requiring a registry', function () {
|
||||
$organisation = Organisation::factory()->create();
|
||||
$application = Application::factory()->for($organisation)->create(['name' => 'Billing API']);
|
||||
$environment = Environment::factory()->for($application)->create();
|
||||
Service::factory()->for($environment)->create([
|
||||
'organisation_id' => $organisation->id,
|
||||
'category' => ServiceCategory::APPLICATION,
|
||||
'type' => ServiceType::LARAVEL,
|
||||
'version' => 'php-8.4',
|
||||
'version_track' => 'php-8.4',
|
||||
'driver_name' => 'laravel.php-8.4',
|
||||
'deploy_policy' => DeployPolicy::WITH_ENVIRONMENT,
|
||||
'desired_replicas' => 1,
|
||||
]);
|
||||
|
||||
$artifact = app(PlanBuildArtifact::class)->execute($environment, str_repeat('a', 40));
|
||||
|
||||
expect($artifact->status)->toBe(BuildArtifactStatus::PENDING)
|
||||
->and($artifact->image_tag)->toBe('billing-api:aaaaaaaaaaaa')
|
||||
->and($artifact->registry_ref)->toBeNull()
|
||||
->and($artifact->metadata['build_strategy'])->toBe(BuildStrategy::TARGET_SERVER->value);
|
||||
});
|
||||
|
||||
it('requires a registry before planning multi-server builds', function () {
|
||||
$organisation = Organisation::factory()->create();
|
||||
$application = Application::factory()->for($organisation)->create();
|
||||
$environment = Environment::factory()->for($application)->create();
|
||||
Service::factory()->for($environment)->create([
|
||||
'organisation_id' => $organisation->id,
|
||||
'category' => ServiceCategory::APPLICATION,
|
||||
'type' => ServiceType::LARAVEL,
|
||||
'version' => 'php-8.4',
|
||||
'version_track' => 'php-8.4',
|
||||
'driver_name' => 'laravel.php-8.4',
|
||||
'deploy_policy' => DeployPolicy::WITH_ENVIRONMENT,
|
||||
'desired_replicas' => 2,
|
||||
]);
|
||||
|
||||
expect(fn () => app(PlanBuildArtifact::class)->execute($environment, str_repeat('b', 40)))
|
||||
->toThrow(RuntimeException::class, 'A registry is required before building artifacts for multi-server deployments.');
|
||||
});
|
||||
|
||||
it('plans multi-server builds against the configured external registry', function () {
|
||||
$organisation = Organisation::factory()->create();
|
||||
$organisation->registries()->create([
|
||||
'name' => 'GHCR',
|
||||
'type' => RegistryType::GHCR,
|
||||
'url' => 'ghcr.io/example',
|
||||
]);
|
||||
$application = Application::factory()->for($organisation)->create(['name' => 'Billing API']);
|
||||
$environment = Environment::factory()->for($application)->create();
|
||||
Service::factory()->for($environment)->create([
|
||||
'organisation_id' => $organisation->id,
|
||||
'category' => ServiceCategory::APPLICATION,
|
||||
'type' => ServiceType::LARAVEL,
|
||||
'version' => 'php-8.4',
|
||||
'version_track' => 'php-8.4',
|
||||
'driver_name' => 'laravel.php-8.4',
|
||||
'deploy_policy' => DeployPolicy::WITH_ENVIRONMENT,
|
||||
'desired_replicas' => 2,
|
||||
]);
|
||||
|
||||
$artifact = app(PlanBuildArtifact::class)->execute($environment, str_repeat('c', 40));
|
||||
|
||||
expect($artifact->registry_ref)->toBe('ghcr.io/example/billing-api:cccccccccccc')
|
||||
->and($artifact->metadata['build_strategy'])->toBe(BuildStrategy::EXTERNAL_REGISTRY->value);
|
||||
});
|
||||
Reference in New Issue
Block a user