From 327f6df095d38f0e2213cb4572376e01d4629946 Mon Sep 17 00:00:00 2001 From: Dotta Date: Sun, 4 Oct 2026 21:32:19 -0500 Subject: [PATCH] Accept an isolated public plugin install in release fixtures Match the product plugin installer dependency isolation and validate compiled public package metadata before installing it through the API. Co-Authored-By: Paperclip --- tests/runner-e2e/installed-release.test.ts | 2 ++ tests/runner-e2e/installed-release.ts | 5 +++-- tests/runner-e2e/live-fixtures.ts | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/runner-e2e/installed-release.test.ts b/tests/runner-e2e/installed-release.test.ts index 7f7f353385f..7982f9b6646 100644 --- a/tests/runner-e2e/installed-release.test.ts +++ b/tests/runner-e2e/installed-release.test.ts @@ -27,6 +27,8 @@ describe("ordinary installed release smoke", () => { for (const file of ["manifest.js", "worker.js"]) writeFileSync(path.join(plugin, "dist", file), ""); writeFileSync(path.join(plugin, "package.json"), JSON.stringify(manifest)); expect(installedReleaseDaytonaPlugin(cli)).toBe(plugin); + expect(installedReleaseDaytonaPlugin(cli, plugin)).toBe(plugin); + expect(() => installedReleaseDaytonaPlugin(cli, "relative/plugin")).toThrow("absolute"); writeFileSync(path.join(plugin, "package.json"), JSON.stringify({ ...manifest, exports: { ".": "./src/index.ts" } })); expect(() => installedReleaseDaytonaPlugin(cli)).toThrow("public compiled Daytona"); writeFileSync(path.join(plugin, "package.json"), JSON.stringify(manifest)); diff --git a/tests/runner-e2e/installed-release.ts b/tests/runner-e2e/installed-release.ts index eaeafa8d2e3..b07ed89c5cd 100644 --- a/tests/runner-e2e/installed-release.ts +++ b/tests/runner-e2e/installed-release.ts @@ -15,9 +15,10 @@ export function installedReleaseLaunch(cliPath: string) { } /** Install the public plugin from the same consumer, without a workspace loader. */ -export function installedReleaseDaytonaPlugin(cliPath: string): string { +export function installedReleaseDaytonaPlugin(cliPath: string, installedPluginPath?: string): string { const cli = installedReleaseLaunch(cliPath); - const plugin = realpathSync(path.join(path.dirname(cli.cwd), "@paperclipai/plugin-daytona")); + if (installedPluginPath && !path.isAbsolute(installedPluginPath)) throw new Error("Installed Daytona plugin path must be absolute"); + const plugin = realpathSync(installedPluginPath ?? path.join(path.dirname(cli.cwd), "@paperclipai/plugin-daytona")); const manifest = JSON.parse(readFileSync(path.join(plugin, "package.json"), "utf8")); if (manifest.name !== "@paperclipai/plugin-daytona" || manifest.paperclipPlugin?.manifest !== "./dist/manifest.js" || diff --git a/tests/runner-e2e/live-fixtures.ts b/tests/runner-e2e/live-fixtures.ts index 91dd362734e..4cfe762c653 100644 --- a/tests/runner-e2e/live-fixtures.ts +++ b/tests/runner-e2e/live-fixtures.ts @@ -117,7 +117,7 @@ export async function setupLiveFixtures(input: { async setup() { return api.post("/api/plugins/install", { packageName: process.env.PAPERCLIP_RUNNER_E2E_INSTALLED_CLI - ? installedReleaseDaytonaPlugin(process.env.PAPERCLIP_RUNNER_E2E_INSTALLED_CLI) + ? installedReleaseDaytonaPlugin(process.env.PAPERCLIP_RUNNER_E2E_INSTALLED_CLI, process.env.PAPERCLIP_RUNNER_E2E_INSTALLED_DAYTONA_PLUGIN) : path.resolve( import.meta.dirname, "../../packages/plugins/sandbox-providers/daytona",