This commit is contained in:
Hemachandar
2026-02-04 17:58:45 +05:30
parent 979cb087e1
commit 59a4f1ef12
5 changed files with 120 additions and 93 deletions
+9 -7
View File
@@ -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 {
@@ -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 {
@@ -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);
@@ -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}");
}
/**
@@ -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);