Remove deploymentUpdatePolicy, add trigger

This commit is contained in:
Matej Bačo
2025-03-08 19:19:05 +01:00
parent 777fb3fcdd
commit f75acfa503
19 changed files with 117 additions and 55 deletions
+18 -18
View File
@@ -1023,6 +1023,17 @@ return [
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('trigger'), // 'manual', 'deployment', '' (empty)
'type' => Database::VAR_STRING,
'format' => '',
'size' => 32,
'signed' => true,
'required' => false,
'default' => '',
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('redirectUrl'),
'type' => Database::VAR_STRING,
@@ -1111,17 +1122,6 @@ return [
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('deploymentUpdatePolicy'), // 'active' or 'branch'
'type' => Database::VAR_STRING,
'format' => '',
'size' => 32,
'signed' => true,
'required' => false,
'default' => '',
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('status'),
'type' => Database::VAR_STRING,
@@ -1192,6 +1192,13 @@ return [
'lengths' => [32],
'orders' => [Database::ORDER_ASC],
],
[
'$id' => '_key_trigger',
'type' => Database::INDEX_KEY,
'attributes' => ['trigger'],
'lengths' => [32],
'orders' => [Database::ORDER_ASC],
],
[
'$id' => '_key_deploymentResourceType',
'type' => Database::INDEX_KEY,
@@ -1234,13 +1241,6 @@ return [
'lengths' => [Database::LENGTH_KEY],
'orders' => [Database::ORDER_ASC],
],
[
'$id' => '_key_deploymentUpdatePolicy',
'type' => Database::INDEX_KEY,
'attributes' => ['deploymentUpdatePolicy'],
'lengths' => [32],
'orders' => [Database::ORDER_ASC],
],
],
],
+3 -3
View File
@@ -246,13 +246,13 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId
'projectInternalId' => $project->getInternalId(),
'domain' => $domain,
'type' => 'deployment',
'trigger' => 'deployment',
'deploymentId' => $deployment->getId(),
'deploymentInternalId' => $deployment->getInternalId(),
'deploymentResourceType' => 'site',
'deploymentResourceId' => $resourceId,
'deploymentResourceInternalId' => $resourceInternalId,
'deploymentVcsProviderBranch' => $providerBranch,
'deploymentUpdatePolicy' => '',
'status' => 'verified',
'certificateId' => '',
'search' => implode(' ', [$ruleId, $domain]),
@@ -271,13 +271,13 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId
'projectInternalId' => $project->getInternalId(),
'domain' => $domain,
'type' => 'deployment',
'trigger' => 'deployment',
'deploymentId' => $deployment->getId(),
'deploymentInternalId' => $deployment->getInternalId(),
'deploymentResourceType' => 'site',
'deploymentResourceId' => $resourceId,
'deploymentResourceInternalId' => $resourceInternalId,
'deploymentVcsProviderBranch' => $providerBranch,
'deploymentUpdatePolicy' => 'branch',
'status' => 'verified',
'certificateId' => '',
'search' => implode(' ', [$ruleId, $domain]),
@@ -300,13 +300,13 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId
'projectInternalId' => $project->getInternalId(),
'domain' => $domain,
'type' => 'deployment',
'trigger' => 'deployment',
'deploymentId' => $deployment->getId(),
'deploymentInternalId' => $deployment->getInternalId(),
'deploymentResourceType' => 'site',
'deploymentResourceId' => $resourceId,
'deploymentResourceInternalId' => $resourceInternalId,
'deploymentVcsProviderBranch' => $providerBranch,
'deploymentUpdatePolicy' => '',
'status' => 'verified',
'certificateId' => '',
'search' => implode(' ', [$ruleId, $domain]),
+1 -1
View File
@@ -147,7 +147,7 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw
Authorization::skip(fn () => $dbForProject->getDocument('functions', $deployment->getAttribute('resourceId', ''))) :
Authorization::skip(fn () => $dbForProject->getDocument('sites', $deployment->getAttribute('resourceId', '')));
$isPreview = $type === 'function' ? false : ($rule->getAttribute('deploymentUpdatePolicy', '') !== 'active');
$isPreview = $type === 'function' ? false : ($rule->getAttribute('deploymentId', '') !== $resource->getAttribute('deploymentId', ''));
$path = ($swooleRequest->server['request_uri'] ?? '/');
$query = ($swooleRequest->server['query_string'] ?? '');
@@ -185,6 +185,7 @@ class Base extends Action
'projectId' => $project->getId(),
'projectInternalId' => $project->getInternalId(),
'domain' => $domain,
'trigger' => 'deployment',
'type' => 'deployment',
'deploymentId' => $deployment->getId(),
'deploymentInternalId' => $deployment->getInternalId(),
@@ -192,7 +193,6 @@ class Base extends Action
'deploymentResourceId' => $site->getId(),
'deploymentResourceInternalId' => $site->getInternalId(),
'deploymentVcsProviderBranch' => $providerBranch,
'deploymentUpdatePolicy' => '',
'status' => 'verified',
'certificateId' => '',
'search' => implode(' ', [$ruleId, $domain]),
@@ -86,6 +86,8 @@ class Update extends Base
throw new Exception(Exception::BUILD_NOT_READY);
}
$oldDeploymentInternalId = $function->getAttribute('deploymentInternalId', '');
$function = $dbForProject->updateDocument('functions', $function->getId(), new Document(array_merge($function->getArrayCopy(), [
'deploymentInternalId' => $deployment->getInternalId(),
'deployment' => $deployment->getId(),
@@ -99,12 +101,19 @@ class Update extends Base
->setAttribute('active', !empty($function->getAttribute('schedule')) && !empty($function->getAttribute('deployment')));
Authorization::skip(fn () => $dbForPlatform->updateDocument('schedules', $schedule->getId(), $schedule));
$this->listRules($project, [
$queries = [
Query::equal("type", ["deployment"]),
Query::equal("deploymentResourceType", ["function"]),
Query::equal("deploymentResourceInternalId", [$function->getInternalId()]),
Query::equal("deploymentUpdatePolicy", ["active"]),
], $dbForPlatform, function (Document $rule) use ($dbForPlatform, $deployment) {
];
if (empty($oldDeploymentInternalId)) {
$queries[] = Query::equal("deploymentInternalId", [""]);
} else {
$queries[] = Query::equal("deploymentInternalId", [$oldDeploymentInternalId]);
}
$this->listRules($project, $queries, $dbForPlatform, function (Document $rule) use ($dbForPlatform, $deployment) {
$rule = $rule
->setAttribute('deploymentId', $deployment->getId())
->setAttribute('deploymentInternalId', $deployment->getInternalId());
@@ -21,6 +21,7 @@ use Utopia\Database\Database;
use Utopia\Database\DateTime;
use Utopia\Database\Document;
use Utopia\Database\Exception\Conflict;
use Utopia\Database\Exception\Duplicate;
use Utopia\Database\Exception\Restricted;
use Utopia\Database\Exception\Structure;
use Utopia\Database\Helpers\ID;
@@ -837,16 +838,25 @@ class Builds extends Action
$resource->setAttribute('live', true);
switch ($resource->getCollection()) {
case 'functions':
$oldDeploymentInternalId = $resource->getAttribute('deploymentInternalId', '');
$resource->setAttribute('deployment', $deployment->getId());
$resource = $dbForProject->updateDocument('functions', $resource->getId(), $resource);
$this->listRules($project, [
$queries = [
Query::equal("projectInternalId", [$project->getInternalId()]),
Query::equal("type", ["deployment"]),
Query::equal("deploymentResourceInternalId", [$resource->getInternalId()]),
Query::equal('deploymentResourceType', ['function']),
Query::equal("deploymentUpdatePolicy", ['active']),
], $dbForPlatform, function (Document $rule) use ($dbForPlatform, $deployment) {
];
if (empty($oldDeploymentInternalId)) {
$queries[] = Query::equal("deploymentInternalId", [""]);
} else {
$queries[] = Query::equal("deploymentInternalId", [$oldDeploymentInternalId]);
}
$this->listRules($project, $queries, $dbForPlatform, function (Document $rule) use ($dbForPlatform, $deployment) {
$rule = $rule
->setAttribute('deploymentId', $deployment->getId())
->setAttribute('deploymentInternalId', $deployment->getInternalId());
@@ -854,16 +864,25 @@ class Builds extends Action
});
break;
case 'sites':
$oldDeploymentInternalId = $resource->getAttribute('deploymentInternalId', '');
$resource->setAttribute('deploymentId', $deployment->getId());
$resource = $dbForProject->updateDocument('sites', $resource->getId(), $resource);
$this->listRules($project, [
$queries = [
Query::equal("projectInternalId", [$project->getInternalId()]),
Query::equal("type", ["deployment"]),
Query::equal("deploymentResourceInternalId", [$resource->getInternalId()]),
Query::equal('deploymentResourceType', ['site']),
Query::equal("deploymentUpdatePolicy", ['active']),
], $dbForPlatform, function (Document $rule) use ($dbForPlatform, $deployment) {
];
if (empty($oldDeploymentInternalId)) {
$queries[] = Query::equal("deploymentInternalId", [""]);
} else {
$queries[] = Query::equal("deploymentInternalId", [$oldDeploymentInternalId]);
}
$this->listRules($project, $queries, $dbForPlatform, function (Document $rule) use ($dbForPlatform, $deployment) {
$rule = $rule
->setAttribute('deploymentId', $deployment->getId())
->setAttribute('deploymentInternalId', $deployment->getInternalId());
@@ -878,13 +897,43 @@ class Builds extends Action
// VCS branch
$branchName = $deployment->getAttribute('providerBranch');
if (!empty($branchName)) {
$sitesDomain = System::getEnv('_APP_DOMAIN_SITES', '');
$domain = "branch-{$branchName}-{$resource->getId()}-{$project->getId()}.{$sitesDomain}";
$ruleId = md5($domain);
try {
$dbForPlatform->createDocument('rules', new Document([
'$id' => $ruleId,
'projectId' => $project->getId(),
'projectInternalId' => $project->getInternalId(),
'domain' => $domain,
'type' => 'deployment',
'trigger' => 'deployment',
'deploymentId' => $deployment->getId(),
'deploymentInternalId' => $deployment->getInternalId(),
'deploymentResourceType' => 'site',
'deploymentResourceId' => $deployment->getId(),
'deploymentResourceInternalId' => $deployment->getInternalId(),
'deploymentVcsProviderBranch' => $branchName,
'status' => 'verified',
'certificateId' => '',
'search' => implode(' ', [$ruleId, $domain]),
]));
} catch (Duplicate $err) {
$rule = $dbForPlatform->getDocument('rules', $ruleId);
$rule = $rule
->setAttribute('deploymentId', $deployment->getId())
->setAttribute('deploymentInternalId', $deployment->getInternalId());
$dbForPlatform->updateDocument('rules', $rule->getId(), $rule);
}
$this->listRules($project, [
Query::equal("projectInternalId", [$project->getInternalId()]),
Query::equal("type", ["deployment"]),
Query::equal("deploymentResourceInternalId", [$resource->getInternalId()]),
Query::equal('deploymentResourceType', ['site']),
Query::equal("deploymentUpdatePolicy", ['branch']),
Query::equal("_key_deploymentVcsProviderBranch", [$branchName]),
Query::equal("deploymentVcsProviderBranch", [$branchName]),
Query::equal("trigger", ['manual']),
], $dbForPlatform, function (Document $rule) use ($dbForPlatform, $deployment) {
$rule = $rule
->setAttribute('deploymentId', $deployment->getId())
@@ -124,6 +124,7 @@ class Create extends Action
'domain' => $domain->get(),
'status' => $status,
'type' => 'api',
'trigger' => 'manual',
'certificateId' => '',
'search' => implode(' ', [$ruleId, $domain->get()]),
]);
@@ -132,13 +132,13 @@ class Create extends Action
'domain' => $domain->get(),
'status' => $status,
'type' => 'deployment',
'trigger' => 'manual',
'deploymentId' => $deployment->isEmpty() ? '' : $deployment->getId(),
'deploymentInternalId' => $deployment->isEmpty() ? '' : $deployment->getInternalId(),
'deploymentResourceType' => 'function',
'deploymentResourceId' => $function->getId(),
'deploymentResourceInternalId' => $function->getInternalId(),
'deploymentVcsProviderBranch' => $branch,
'deploymentUpdatePolicy' => empty($branch) ? 'active' : 'branch',
'certificateId' => '',
'search' => implode(' ', [$ruleId, $domain->get(), $branch]),
]);
@@ -124,6 +124,7 @@ class Create extends Action
'domain' => $domain->get(),
'status' => $status,
'type' => 'redirect',
'trigger' => 'manual',
'redirectUrl' => $url,
'redirectStatusCode' => $statusCode,
'certificateId' => '',
@@ -132,13 +132,13 @@ class Create extends Action
'domain' => $domain->get(),
'status' => $status,
'type' => 'deployment',
'trigger' => 'manual',
'deploymentId' => $deployment->isEmpty() ? '' : $deployment->getId(),
'deploymentInternalId' => $deployment->isEmpty() ? '' : $deployment->getInternalId(),
'deploymentResourceType' => 'site',
'deploymentResourceId' => $site->getId(),
'deploymentResourceInternalId' => $site->getInternalId(),
'deploymentVcsProviderBranch' => $branch,
'deploymentUpdatePolicy' => empty($branch) ? 'active' : 'branch',
'certificateId' => '',
'search' => implode(' ', [$ruleId, $domain->get(), $branch]),
]);
@@ -241,6 +241,7 @@ class Create extends Action
'projectInternalId' => $project->getInternalId(),
'domain' => $domain,
'type' => 'deployment',
'trigger' => 'deployment',
'deploymentId' => $deployment->isEmpty() ? '' : $deployment->getId(),
'deploymentInternalId' => $deployment->isEmpty() ? '' : $deployment->getInternalId(),
'deploymentResourceType' => 'site',
@@ -296,6 +297,7 @@ class Create extends Action
'projectInternalId' => $project->getInternalId(),
'domain' => $domain,
'type' => 'deployment',
'trigger' => 'deployment',
'value' => $deployment->getId(),
'status' => 'verified',
'certificateId' => '',
@@ -117,6 +117,7 @@ class Create extends Action
'projectInternalId' => $project->getInternalId(),
'domain' => $domain,
'type' => 'deployment',
'trigger' => 'deployment',
'deploymentId' => $deployment->isEmpty() ? '' : $deployment->getId(),
'deploymentInternalId' => $deployment->isEmpty() ? '' : $deployment->getInternalId(),
'deploymentResourceType' => 'site',
@@ -153,6 +153,7 @@ class Create extends Base
'projectInternalId' => $project->getInternalId(),
'domain' => $domain,
'type' => 'deployment',
'trigger' => 'deployment',
'deploymentId' => $deployment->isEmpty() ? '' : $deployment->getId(),
'deploymentInternalId' => $deployment->isEmpty() ? '' : $deployment->getInternalId(),
'deploymentResourceType' => 'site',
@@ -83,17 +83,26 @@ class Update extends Base
throw new Exception(Exception::BUILD_NOT_READY);
}
$oldDeploymentInternalId = $site->getAttribute('deploymentInternalId', '');
$site = $dbForProject->updateDocument('sites', $site->getId(), new Document(array_merge($site->getArrayCopy(), [
'deploymentInternalId' => $deployment->getInternalId(),
'deploymentId' => $deployment->getId(),
])));
$this->listRules($project, [
$queries = [
Query::equal("type", ["deployment"]),
Query::equal("deploymentResourceType", ["site"]),
Query::equal("deploymentResourceInternalId", [$site->getInternalId()]),
Query::equal("deploymentUpdatePolicy", ["active"]),
], $dbForPlatform, function (Document $rule) use ($dbForPlatform, $deployment) {
];
if (empty($oldDeploymentInternalId)) {
$queries[] = Query::equal("deploymentInternalId", [""]);
} else {
$queries[] = Query::equal("deploymentInternalId", [$oldDeploymentInternalId]);
}
$this->listRules($project, $queries, $dbForPlatform, function (Document $rule) use ($dbForPlatform, $deployment) {
$rule = $rule
->setAttribute('deploymentId', $deployment->getId())
->setAttribute('deploymentInternalId', $deployment->getInternalId());
@@ -7,11 +7,11 @@ class Rules extends Base
public const ALLOWED_ATTRIBUTES = [
'domain',
'type',
'trigger',
'deploymentResourceType',
'deploymentResourceId',
'deploymentId',
'deploymentVcsProviderBranch',
'deploymentUpdatePolicy'
'deploymentVcsProviderBranch'
];
/**
@@ -76,12 +76,6 @@ class Rule extends Model
'default' => '',
'example' => 'function',
])
->addRule('deploymentUpdatePolicy', [
'type' => self::TYPE_STRING,
'description' => 'Describes when to update deployment ID of this rule. Can be "active" or "branch". Used if type is "deployment"',
'default' => '',
'example' => 'function',
])
->addRule('status', [
'type' => self::TYPE_STRING,
'description' => 'Domain verification status. Possible values are "created", "verifying", "verified" and "unverified"',
@@ -309,7 +309,7 @@ trait FunctionsBase
], $this->getHeaders()), [
'queries' => [
Query::equal('deploymentResourceId', [$functionId])->toString(),
Query::equal('deploymentUpdatePolicy', ['active'])->toString(),
Query::equal('trigger', ['manual'])->toString(),
Query::equal('type', ['deployment'])->toString(),
],
]);
@@ -31,7 +31,6 @@ class ProxyCustomServerTest extends Scope
$this->assertArrayHasKey('deploymentId', $rule['body']);
$this->assertArrayHasKey('deploymentResourceId', $rule['body']);
$this->assertArrayHasKey('deploymentVcsProviderBranch', $rule['body']);
$this->assertArrayHasKey('deploymentUpdatePolicy', $rule['body']);
$this->assertArrayHasKey('logs', $rule['body']);
$this->assertArrayHasKey('renewAt', $rule['body']);
@@ -278,7 +277,6 @@ class ProxyCustomServerTest extends Scope
$rule = $this->getRule($ruleId);
$this->assertEquals(200, $rule['headers']['status-code']);
$this->assertEquals('branch', $rule['body']['deploymentUpdatePolicy']);
$this->cleanupRule($ruleId);
}
@@ -299,7 +297,6 @@ class ProxyCustomServerTest extends Scope
$rule = $this->getRule($ruleId);
$this->assertEquals(200, $rule['headers']['status-code']);
$this->assertEquals('branch', $rule['body']['deploymentUpdatePolicy']);
$this->cleanupRule($ruleId);
}
@@ -358,7 +355,6 @@ class ProxyCustomServerTest extends Scope
$this->assertArrayHasKey('deploymentId', $rule['body']);
$this->assertArrayHasKey('deploymentResourceId', $rule['body']);
$this->assertArrayHasKey('deploymentVcsProviderBranch', $rule['body']);
$this->assertArrayHasKey('deploymentUpdatePolicy', $rule['body']);
$this->assertArrayHasKey('logs', $rule['body']);
$this->assertArrayHasKey('renewAt', $rule['body']);
@@ -398,7 +394,6 @@ class ProxyCustomServerTest extends Scope
$this->assertArrayHasKey('deploymentId', $rules['body']['rules'][0]);
$this->assertArrayHasKey('deploymentResourceId', $rules['body']['rules'][0]);
$this->assertArrayHasKey('deploymentVcsProviderBranch', $rules['body']['rules'][0]);
$this->assertArrayHasKey('deploymentUpdatePolicy', $rules['body']['rules'][0]);
$this->assertArrayHasKey('logs', $rules['body']['rules'][0]);
$this->assertArrayHasKey('renewAt', $rules['body']['rules'][0]);
+2 -2
View File
@@ -344,7 +344,7 @@ trait SitesBase
], $this->getHeaders()), [
'queries' => [
Query::equal('deploymentResourceId', [$siteId])->toString(),
Query::equal('deploymentUpdatePolicy', ['active'])->toString(),
Query::equal('trigger', ['manual'])->toString(),
Query::equal('type', ['deployment'])->toString(),
],
]);
@@ -368,7 +368,7 @@ trait SitesBase
'queries' => [
Query::equal('deploymentId', [$deploymentId])->toString(),
Query::equal('type', ['deployment'])->toString(),
Query::equal('deploymentUpdatePolicy', [''])->toString(),
Query::equal('trigger', ['deployment'])->toString(),
],
]);