From 2ee2ea09a0fbbbf1276158e06f84710f450869ce Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Sun, 12 Apr 2026 13:56:49 +0530 Subject: [PATCH] fix(installer): sync compose template executor image --- app/views/install/compose.phtml | 2 +- .../Modules/Installer/ComposeTemplateTest.php | 67 +++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 tests/unit/Platform/Modules/Installer/ComposeTemplateTest.php diff --git a/app/views/install/compose.phtml b/app/views/install/compose.phtml index 8d0ae55394..ef4d4a1fe4 100644 --- a/app/views/install/compose.phtml +++ b/app/views/install/compose.phtml @@ -993,7 +993,7 @@ $hostPath = rtrim($this->getParam('hostPath', ''), '/'); <<: *x-logging restart: unless-stopped stop_signal: SIGINT - image: openruntimes/executor:0.7.22 + image: openruntimes/executor:0.11.4 networks: - appwrite - runtimes diff --git a/tests/unit/Platform/Modules/Installer/ComposeTemplateTest.php b/tests/unit/Platform/Modules/Installer/ComposeTemplateTest.php new file mode 100644 index 0000000000..d2588835ff --- /dev/null +++ b/tests/unit/Platform/Modules/Installer/ComposeTemplateTest.php @@ -0,0 +1,67 @@ +readRepoFile('/docker-compose.yml'); + $renderedCompose = $this->renderInstallerCompose(); + + $this->assertStringContainsString("appwrite-worker-executions:\n", $canonicalCompose); + $this->assertStringContainsString("appwrite-worker-executions:\n", $renderedCompose); + $this->assertStringContainsString("entrypoint: worker-executions\n", $renderedCompose); + } + + public function testRenderedInstallerComposeUsesCanonicalExecutorImage(): void + { + $canonicalExecutorImage = $this->extractExecutorImage($this->readRepoFile('/docker-compose.yml')); + $renderedCompose = $this->renderInstallerCompose(); + + $this->assertStringContainsString("image: {$canonicalExecutorImage}\n", $renderedCompose); + } + + private function renderInstallerCompose(): string + { + $view = new View($this->repoPath('/app/views/install/compose.phtml')); + + $view + ->setParam('httpPort', '80') + ->setParam('httpsPort', '443') + ->setParam('version', '1.9.0') + ->setParam('organization', 'appwrite') + ->setParam('image', 'appwrite') + ->setParam('database', 'mariadb') + ->setParam('hostPath', '') + ->setParam('enableAssistant', false); + + return $view->render(false); + } + + private function extractExecutorImage(string $compose): string + { + $matched = preg_match('/^\s*image:\s*(openruntimes\/executor:[^\s]+)\s*$/m', $compose, $matches); + + $this->assertSame(1, $matched, 'Failed to find the canonical openruntimes executor image.'); + + return $matches[1]; + } + + private function readRepoFile(string $path): string + { + $contents = file_get_contents($this->repoPath($path)); + + $this->assertIsString($contents, "Failed to read {$path}."); + + return $contents; + } + + private function repoPath(string $path): string + { + return dirname(__DIR__, 5) . $path; + } +}