mirror of
https://github.com/larksuite/cli.git
synced 2026-08-03 08:32:46 +08:00
* fix(schema): fall back to runtime catalog when no embedded metadata Binaries built from the bare Go module (plugin builds) embed only the empty meta_data_default.json stub because meta_data.json is gitignored and fetched at build time. The schema command, its completion, and the affordance command-form resolver read the embedded-only catalog, so every schema lookup failed with "Unknown service" even though the runtime registry had already sync-fetched full metadata. Add registry.SchemaCatalog(): embedded when compiled in (official builds unchanged, still deterministic), otherwise the merged runtime catalog seeded from cache or remote fetch. When neither source has data (offline plugin build with a cold cache), schema now returns a failed_precondition error with an actionable hint instead of "Unknown service" with an empty candidate list. * fix(registry): gate cached meta overlay on version newer than embedded The cached remote meta was overlaid onto the embedded meta_data.json unconditionally, so after a CLI upgrade an equal- or older-version cache kept shadowing the freshly shipped embedded definitions until a later refresh happened to rewrite it. Only overlay when the cache version is strictly newer than the embedded baseline. The bare-module stub baseline is "0.0.0", so plugin builds without compiled metadata still take any real cached version (TestOverlayGate_StubEmbedded_OverlaysRealCache) and the schema runtime fallback keeps working offline from a warm cache. Ports #1376 onto the typed meta model. --------- Co-authored-by: liangshuo-1 <266696938+liangshuo-1@users.noreply.github.com>
31 lines
1.2 KiB
Go
31 lines
1.2 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package registry
|
|
|
|
import "github.com/larksuite/cli/internal/apicatalog"
|
|
|
|
// EmbeddedCatalog returns a navigation catalog over the embedded (overlay-free)
|
|
// metadata — deterministic across machines, for golden tests and schema lint.
|
|
func EmbeddedCatalog() apicatalog.Catalog {
|
|
return apicatalog.New(apicatalog.SourceEmbedded, EmbeddedServicesTyped())
|
|
}
|
|
|
|
// RuntimeCatalog returns a navigation catalog over the merged (embedded + remote
|
|
// overlay) metadata — for service command registration and scope discovery,
|
|
// where overlay methods must be reachable.
|
|
func RuntimeCatalog() apicatalog.Catalog {
|
|
return apicatalog.New(apicatalog.SourceRuntime, ServicesTyped())
|
|
}
|
|
|
|
// SchemaCatalog returns the embedded catalog when metadata is compiled in,
|
|
// otherwise the merged runtime catalog. Binaries built from the bare Go module
|
|
// embed only the empty meta_data_default.json stub, so the embedded view has
|
|
// nothing to resolve; the merged view is the only data such binaries have.
|
|
func SchemaCatalog() apicatalog.Catalog {
|
|
if len(EmbeddedServicesTyped()) > 0 {
|
|
return EmbeddedCatalog()
|
|
}
|
|
return RuntimeCatalog()
|
|
}
|