From 34c14b7dd229efed0669f83d9906ba39112cb550 Mon Sep 17 00:00:00 2001 From: Jacob MacDonald Date: Mon, 22 Sep 2025 09:42:35 -0700 Subject: [PATCH] Store installed release version as a part of install metadata (#9122) --- packages/cli/src/config/extension.ts | 20 ++++---------------- packages/cli/src/config/extensions/github.ts | 4 ++-- packages/core/src/config/config.ts | 1 + 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/packages/cli/src/config/extension.ts b/packages/cli/src/config/extension.ts index 28a8d62c6f..6475325ccf 100644 --- a/packages/cli/src/config/extension.ts +++ b/packages/cli/src/config/extension.ts @@ -406,8 +406,8 @@ export async function installExtension( installMetadata, tempDir, ); - updateExtensionVersion(tempDir, tagName); installMetadata.type = 'github-release'; + installMetadata.releaseTag = tagName; } catch (_error) { await cloneFromGit(installMetadata, tempDir); installMetadata.type = 'git'; @@ -503,21 +503,6 @@ export async function installExtension( } } -async function updateExtensionVersion( - extensionDir: string, - extensionVersion: string, -) { - const configFilePath = path.join(extensionDir, EXTENSIONS_CONFIG_FILENAME); - if (fs.existsSync(configFilePath)) { - const configContent = await fs.promises.readFile(configFilePath, 'utf-8'); - const config = JSON.parse(configContent); - config.version = extensionVersion; - await fs.promises.writeFile( - configFilePath, - JSON.stringify(config, null, 2), - ); - } -} async function requestConsent(extensionConfig: ExtensionConfig) { const mcpServerEntries = Object.entries(extensionConfig.mcpServers || {}); if (mcpServerEntries.length) { @@ -609,6 +594,9 @@ export function toOutputString(extension: Extension): string { if (extension.installMetadata.ref) { output += `\n Ref: ${extension.installMetadata.ref}`; } + if (extension.installMetadata.releaseTag) { + output += `\n Release tag: ${extension.installMetadata.releaseTag}`; + } } if (extension.contextFiles.length > 0) { output += `\n Context files:`; diff --git a/packages/cli/src/config/extensions/github.ts b/packages/cli/src/config/extensions/github.ts index 264a2041e3..8d83fe40e4 100644 --- a/packages/cli/src/config/extensions/github.ts +++ b/packages/cli/src/config/extensions/github.ts @@ -191,7 +191,7 @@ export async function checkForExtensionUpdate( setExtensionUpdateState(ExtensionUpdateState.UPDATE_AVAILABLE); return; } else { - const { source, ref } = installMetadata; + const { source, releaseTag } = installMetadata; if (!source) { console.error(`No "source" provided for extension.`); setExtensionUpdateState(ExtensionUpdateState.ERROR); @@ -204,7 +204,7 @@ export async function checkForExtensionUpdate( repo, installMetadata.ref, ); - if (releaseData.tag_name !== ref) { + if (releaseData.tag_name !== releaseTag) { setExtensionUpdateState(ExtensionUpdateState.UPDATE_AVAILABLE); return; } diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index a21a9989c2..88f8b4f974 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -124,6 +124,7 @@ export interface GeminiCLIExtension { export interface ExtensionInstallMetadata { source: string; type: 'git' | 'local' | 'link' | 'github-release'; + releaseTag?: string; // Only present for github-release installs. ref?: string; autoUpdate?: boolean; }