diff --git a/src/deploy/extensions/prepare.ts b/src/deploy/extensions/prepare.ts index cf3de21efa2..d066e0a8ac4 100644 --- a/src/deploy/extensions/prepare.ts +++ b/src/deploy/extensions/prepare.ts @@ -171,6 +171,14 @@ export async function prepareDynamicExtensions( const filters = getEndpointFilters(options, functionsConfig); const extensions = extractExtensionsFromBuilds(builds, filters); const projectId = needProjectId(options); + + // Skip extensions API checks if no extensions are defined in the builds. + // This avoids unnecessary API calls and permission errors for projects + // that don't use Firebase Extensions but still deploy functions. + if (Object.keys(extensions).length === 0) { + return; + } + const projectNumber = await needProjectNumber(options); await ensureExtensionsApiEnabled(options); @@ -181,8 +189,8 @@ export async function prepareDynamicExtensions( extensionMatchesAnyFilter(e.labels?.codebase, e.instanceId, filters), ); - if (Object.keys(extensions).length === 0 && haveExtensions.length === 0) { - // Nothing defined, and nothing to delete + if (haveExtensions.length === 0) { + // Nothing to delete return; }