diff --git a/app/controllers/api/vcs.php b/app/controllers/api/vcs.php index b5206676c8..84ab2eb86c 100644 --- a/app/controllers/api/vcs.php +++ b/app/controllers/api/vcs.php @@ -372,13 +372,15 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId // VCS branch preview if (!empty($providerBranch)) { $transformation = new Transformation([new BranchDomain()]); - $transformation->setInput([ - 'branch' => $providerBranch, - 'resourceId' => $resource->getId(), - 'projectId' => $project->getId(), - 'sitesDomain' => $sitesDomain, - ]); - $transformation->transform(); + $transformation + ->setInput([ + 'branch' => $providerBranch, + 'resourceId' => $resource->getId(), + 'projectId' => $project->getId(), + 'sitesDomain' => $sitesDomain, + ]) + ->setTraits([]) + ->transform(); $domain = $transformation->getOutput(); $ruleId = md5($domain); try { diff --git a/src/Appwrite/Platform/Modules/Compute/Base.php b/src/Appwrite/Platform/Modules/Compute/Base.php index aad9f07460..a5d1b94039 100644 --- a/src/Appwrite/Platform/Modules/Compute/Base.php +++ b/src/Appwrite/Platform/Modules/Compute/Base.php @@ -299,13 +299,15 @@ class Base extends Action // VCS branch preview if (!empty($providerBranch)) { $transformation = new Transformation([new BranchDomain()]); - $transformation->setInput([ - 'branch' => $providerBranch, - 'resourceId' => $site->getId(), - 'projectId' => $project->getId(), - 'sitesDomain' => $sitesDomain, - ]); - $transformation->transform(); + $transformation + ->setInput([ + 'branch' => $providerBranch, + 'resourceId' => $site->getId(), + 'projectId' => $project->getId(), + 'sitesDomain' => $sitesDomain, + ]) + ->setTraits([]) + ->transform(); $domain = $transformation->getOutput(); $ruleId = md5($domain); try { diff --git a/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php b/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php index 33de06d42b..9c6f304aa6 100644 --- a/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php +++ b/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php @@ -1040,13 +1040,15 @@ class Builds extends Action $branchName = $deployment->getAttribute('providerBranch'); if (!empty($branchName)) { $transformation = new Transformation([new BranchDomain()]); - $transformation->setInput([ - 'branch' => $branchName, - 'resourceId' => $resource->getId(), - 'projectId' => $project->getId(), - 'sitesDomain' => $platform['sitesDomain'], - ]); - $transformation->transform(); + $transformation + ->setInput([ + 'branch' => $branchName, + 'resourceId' => $resource->getId(), + 'projectId' => $project->getId(), + 'sitesDomain' => $platform['sitesDomain'], + ]) + ->setTraits([]) + ->transform(); $domain = $transformation->getOutput(); $ruleId = md5($domain); diff --git a/src/Appwrite/Transformation/Adapter/BranchDomain.php b/src/Appwrite/Transformation/Adapter/BranchDomain.php index d74b2ecaa6..c0efd3196f 100644 --- a/src/Appwrite/Transformation/Adapter/BranchDomain.php +++ b/src/Appwrite/Transformation/Adapter/BranchDomain.php @@ -43,7 +43,7 @@ class BranchDomain extends Adapter $branchPrefix = $this->generateBranchPrefix($branch); $resourceProjectHash = substr(hash('sha256', $resourceId . $projectId), 0, self::HASH_SUFFIX_LENGTH); - $this->output = "branch-{$branchPrefix}-{$resourceProjectHash}.{$sitesDomain}"; + $this->output = strtolower("branch-{$branchPrefix}-{$resourceProjectHash}.{$sitesDomain}"); } /** diff --git a/tests/unit/Transformation/TransformationTest.php b/tests/unit/Transformation/TransformationTest.php index aa8540f12d..6f37ddf0c8 100644 --- a/tests/unit/Transformation/TransformationTest.php +++ b/tests/unit/Transformation/TransformationTest.php @@ -47,114 +47,135 @@ class TransformationTest extends TestCase $transformer = new Transformation([new BranchDomain()]); // Branch name with slash - $transformer->setInput([ - 'branch' => 'feature/test', - 'resourceId' => 'site123', - 'projectId' => 'proj456', - 'sitesDomain' => 'appwrite.network' - ]); - $transformer->transform(); + $transformer + ->setInput([ + 'branch' => 'feature/test', + 'resourceId' => 'site123', + 'projectId' => 'proj456', + 'sitesDomain' => 'appwrite.network' + ]) + ->setTraits([]) + ->transform(); $domain = $transformer->getOutput(); $this->assertStringNotContainsString('/', $domain); - $this->assertStringStartsWith('branch-feature-test-', $domain); - $this->assertStringEndsWith('.appwrite.network', $domain); + $this->assertStringStartsWith('branch-feature-test-', $domain->getOutput()); + $this->assertStringEndsWith('.appwrite.network', $domain->getOutput()); // Branch domain consistency - $transformer->setInput([ - 'branch' => 'feature/test', - 'resourceId' => 'site123', - 'projectId' => 'proj456', - 'sitesDomain' => 'appwrite.network' - ]); - $transformer->transform(); + $transformer + ->setInput([ + 'branch' => 'feature/test', + 'resourceId' => 'site123', + 'projectId' => 'proj456', + 'sitesDomain' => 'appwrite.network' + ]) + ->setTraits([]) + ->transform(); $domain2 = $transformer->getOutput(); $this->assertEquals($domain, $domain2); // Different resources should produce different domains - $transformer->setInput([ - 'branch' => 'feature/test', - 'resourceId' => 'site789', - 'projectId' => 'proj456', - 'sitesDomain' => 'appwrite.network' - ]); - $transformer->transform(); + $transformer + ->setInput([ + 'branch' => 'feature/test', + 'resourceId' => 'site789', + 'projectId' => 'proj456', + 'sitesDomain' => 'appwrite.network' + ]) + ->setTraits([]) + ->transform(); $domain2 = $transformer->getOutput(); $this->assertNotEquals($domain, $domain2); // Different projects should produce different domains - $transformer->setInput([ - 'branch' => 'feature/test', - 'resourceId' => 'site123', - 'projectId' => 'proj789', - 'sitesDomain' => 'appwrite.network' - ]); - $transformer->transform(); + $transformer + ->setInput([ + 'branch' => 'feature/test', + 'resourceId' => 'site123', + 'projectId' => 'proj789', + 'sitesDomain' => 'appwrite.network' + ]) + ->setTraits([]) + ->transform(); $domain2 = $transformer->getOutput(); $this->assertNotEquals($domain, $domain2); // Some real-world branch names - $transformer->setInput([ - 'branch' => 'feature/SER-1234', - 'resourceId' => 'site123', - 'projectId' => 'proj456', - 'sitesDomain' => 'appwrite.network' - ]); - $transformer->transform(); + $transformer + ->setInput([ + 'branch' => 'feature/SER-1234', + 'resourceId' => 'site123', + 'projectId' => 'proj456', + 'sitesDomain' => 'appwrite.network' + ]) + ->setTraits([]) + ->transform(); $domain = $transformer->getOutput(); $this->assertStringStartsWith('branch-feature-ser-1234-', $domain); $this->assertStringEndsWith('.appwrite.network', $domain); - $transformer->setInput([ - 'branch' => 'bugfix/fix-login', - 'resourceId' => 'site123', - 'projectId' => 'proj456', - 'sitesDomain' => 'appwrite.network' - ]); - $transformer->transform(); + $transformer + ->setInput([ + 'branch' => 'bugfix/fix-login', + 'resourceId' => 'site123', + 'projectId' => 'proj456', + 'sitesDomain' => 'appwrite.network' + ]) + ->setTraits([]) + ->transform(); $domain = $transformer->getOutput(); $this->assertStringStartsWith('branch-bugfix-fix-login-', $domain); $this->assertStringEndsWith('.appwrite.network', $domain); - $transformer->setInput([ - 'branch' => 'hotfix/v1.2.3', - 'resourceId' => 'site123', - 'projectId' => 'proj456', - 'sitesDomain' => 'appwrite.network' - ]); - $transformer->transform(); + $transformer + ->setInput([ + 'branch' => 'hotfix/v1.2.3', + 'resourceId' => 'site123', + 'projectId' => 'proj456', + 'sitesDomain' => 'appwrite.network' + ]) + ->setTraits([]) + ->transform(); $domain = $transformer->getOutput(); $this->assertStringStartsWith('branch-hotfix-v1-2-3-', $domain); $this->assertStringEndsWith('.appwrite.network', $domain); - $transformer->setInput([ - 'branch' => 'release/2024.01', - 'resourceId' => 'site123', - 'projectId' => 'proj456', - 'sitesDomain' => 'appwrite.network' - ]); + $transformer + ->setInput([ + 'branch' => 'release/2024.01', + 'resourceId' => 'site123', + 'projectId' => 'proj456', + 'sitesDomain' => 'appwrite.network' + ]) + ->setTraits([]) + ->transform(); $transformer->transform(); $domain = $transformer->getOutput(); $this->assertStringStartsWith('branch-release-2024-01-', $domain); $this->assertStringEndsWith('.appwrite.network', $domain); - $transformer->setInput([ - 'branch' => 'user/john/experiment', - 'resourceId' => 'site123', - 'projectId' => 'proj456', - 'sitesDomain' => 'appwrite.network' - ]); - $transformer->transform(); + $transformer + ->setInput([ + 'branch' => 'user/john/experiment', + 'resourceId' => 'site123', + 'projectId' => 'proj456', + 'sitesDomain' => 'appwrite.network' + ]) + ->setTraits([]) + ->transform(); $domain = $transformer->getOutput(); $this->assertStringStartsWith('branch-user-john-experiment-', $domain); $this->assertStringEndsWith('.appwrite.network', $domain); - $transformer->setInput([ - 'branch' => 'dependabot/npm_and_yarn/lodash-4.17.21', - 'resourceId' => 'site123', - 'projectId' => 'proj456', - 'sitesDomain' => 'appwrite.network' - ]); - $transformer->transform(); + $transformer + ->setInput([ + 'branch' => 'dependabot/npm_and_yarn/lodash-4.17.21', + 'resourceId' => 'site123', + 'projectId' => 'proj456', + 'sitesDomain' => 'appwrite.network' + ]) + ->setTraits([]) + ->transform(); $domain = $transformer->getOutput(); $this->assertStringStartsWith('branch-dependabot-npm-and-yarn-lodash-4-17-21-', $domain); $this->assertStringEndsWith('.appwrite.network', $domain);