From 53a871da22bddd76ef642b00f177f6aeda96acde Mon Sep 17 00:00:00 2001 From: Surya P R Date: Fri, 29 May 2026 15:24:28 +0530 Subject: [PATCH 1/2] fix: make smoke test check all valid plugin.json paths --- eng/external-plugin-quality-gates.mjs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/eng/external-plugin-quality-gates.mjs b/eng/external-plugin-quality-gates.mjs index de4f2b37a..3a33b1359 100644 --- a/eng/external-plugin-quality-gates.mjs +++ b/eng/external-plugin-quality-gates.mjs @@ -230,8 +230,13 @@ function runInstallSmokeGate(workDir, plugin) { } const installedPluginPath = path.join(homeDir, ".copilot", "installed-plugins", "external-plugin-intake", plugin.name); - const pluginManifestPath = path.join(installedPluginPath, ".github", "plugin", "plugin.json"); - if (!fs.existsSync(installedPluginPath) || !fs.existsSync(pluginManifestPath)) { + const candidatePaths = [ + path.join(installedPluginPath, "plugin.json"), + path.join(installedPluginPath, ".github", "plugin", "plugin.json"), + path.join(installedPluginPath, ".plugin", "plugin.json"), + ]; + const pluginManifestPath = candidatePaths.find((p) => fs.existsSync(p)); + if (!fs.existsSync(installedPluginPath) || !pluginManifestPath) { return { status: "fail", output: `Plugin installed but expected files were missing at ${installedPluginPath}`, From 041f7add1a12be394c650696f61cf92eac4d0fe7 Mon Sep 17 00:00:00 2001 From: Surya P R Date: Fri, 29 May 2026 15:36:12 +0530 Subject: [PATCH 2/2] refactor: fail fast on missing plugin dir before scanning candidate paths --- eng/external-plugin-quality-gates.mjs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/eng/external-plugin-quality-gates.mjs b/eng/external-plugin-quality-gates.mjs index 3a33b1359..0e64cc1f7 100644 --- a/eng/external-plugin-quality-gates.mjs +++ b/eng/external-plugin-quality-gates.mjs @@ -230,13 +230,20 @@ function runInstallSmokeGate(workDir, plugin) { } const installedPluginPath = path.join(homeDir, ".copilot", "installed-plugins", "external-plugin-intake", plugin.name); + if (!fs.existsSync(installedPluginPath)) { + return { + status: "fail", + output: `Plugin installed but expected files were missing at ${installedPluginPath}`, + }; + } + const candidatePaths = [ path.join(installedPluginPath, "plugin.json"), path.join(installedPluginPath, ".github", "plugin", "plugin.json"), path.join(installedPluginPath, ".plugin", "plugin.json"), ]; const pluginManifestPath = candidatePaths.find((p) => fs.existsSync(p)); - if (!fs.existsSync(installedPluginPath) || !pluginManifestPath) { + if (!pluginManifestPath) { return { status: "fail", output: `Plugin installed but expected files were missing at ${installedPluginPath}`,