mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 18:50:42 +00:00
perf(ci): trim provider catalog test setup
This commit is contained in:
2
.github/actions/setup-node-env/action.yml
vendored
2
.github/actions/setup-node-env/action.yml
vendored
@@ -14,7 +14,7 @@ inputs:
|
|||||||
pnpm-version:
|
pnpm-version:
|
||||||
description: pnpm version for corepack.
|
description: pnpm version for corepack.
|
||||||
required: false
|
required: false
|
||||||
default: "10.32.1"
|
default: "10.33.0"
|
||||||
install-bun:
|
install-bun:
|
||||||
description: Whether to install Bun alongside Node.
|
description: Whether to install Bun alongside Node.
|
||||||
required: false
|
required: false
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ inputs:
|
|||||||
pnpm-version:
|
pnpm-version:
|
||||||
description: pnpm version to activate via corepack.
|
description: pnpm version to activate via corepack.
|
||||||
required: false
|
required: false
|
||||||
default: "10.32.1"
|
default: "10.33.0"
|
||||||
cache-key-suffix:
|
cache-key-suffix:
|
||||||
description: Suffix appended to the cache key.
|
description: Suffix appended to the cache key.
|
||||||
required: false
|
required: false
|
||||||
|
|||||||
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@@ -2000,7 +2000,7 @@ jobs:
|
|||||||
- name: Setup pnpm + cache store
|
- name: Setup pnpm + cache store
|
||||||
uses: ./.github/actions/setup-pnpm-store-cache
|
uses: ./.github/actions/setup-pnpm-store-cache
|
||||||
with:
|
with:
|
||||||
pnpm-version: "10.32.1"
|
pnpm-version: "10.33.0"
|
||||||
cache-key-suffix: "node24"
|
cache-key-suffix: "node24"
|
||||||
use-restore-keys: "false"
|
use-restore-keys: "false"
|
||||||
use-actions-cache: "true"
|
use-actions-cache: "true"
|
||||||
|
|||||||
2
.github/workflows/macos-release.yml
vendored
2
.github/workflows/macos-release.yml
vendored
@@ -20,7 +20,7 @@ concurrency:
|
|||||||
env:
|
env:
|
||||||
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
||||||
NODE_VERSION: "24.x"
|
NODE_VERSION: "24.x"
|
||||||
PNPM_VERSION: "10.32.1"
|
PNPM_VERSION: "10.33.0"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
validate_macos_release_request:
|
validate_macos_release_request:
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ concurrency:
|
|||||||
env:
|
env:
|
||||||
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
||||||
NODE_VERSION: "24.x"
|
NODE_VERSION: "24.x"
|
||||||
PNPM_VERSION: "10.32.1"
|
PNPM_VERSION: "10.33.0"
|
||||||
OPENCLAW_REPOSITORY: openclaw/openclaw
|
OPENCLAW_REPOSITORY: openclaw/openclaw
|
||||||
TSX_VERSION: "4.21.0"
|
TSX_VERSION: "4.21.0"
|
||||||
|
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ permissions:
|
|||||||
env:
|
env:
|
||||||
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
||||||
NODE_VERSION: "24.x"
|
NODE_VERSION: "24.x"
|
||||||
PNPM_VERSION: "10.32.1"
|
PNPM_VERSION: "10.33.0"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
validate_selected_ref:
|
validate_selected_ref:
|
||||||
|
|||||||
2
.github/workflows/openclaw-npm-release.yml
vendored
2
.github/workflows/openclaw-npm-release.yml
vendored
@@ -32,7 +32,7 @@ concurrency:
|
|||||||
env:
|
env:
|
||||||
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
||||||
NODE_VERSION: "24.x"
|
NODE_VERSION: "24.x"
|
||||||
PNPM_VERSION: "10.32.1"
|
PNPM_VERSION: "10.33.0"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# PLEASE DON'T ADD LONG-RUNNING OR FLAKY CHECKS TO THE npm RELEASE PATH.
|
# PLEASE DON'T ADD LONG-RUNNING OR FLAKY CHECKS TO THE npm RELEASE PATH.
|
||||||
|
|||||||
2
.github/workflows/plugin-clawhub-release.yml
vendored
2
.github/workflows/plugin-clawhub-release.yml
vendored
@@ -23,7 +23,7 @@ concurrency:
|
|||||||
env:
|
env:
|
||||||
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
||||||
NODE_VERSION: "24.x"
|
NODE_VERSION: "24.x"
|
||||||
PNPM_VERSION: "10.32.1"
|
PNPM_VERSION: "10.33.0"
|
||||||
CLAWHUB_REGISTRY: "https://clawhub.ai"
|
CLAWHUB_REGISTRY: "https://clawhub.ai"
|
||||||
CLAWHUB_REPOSITORY: "openclaw/clawhub"
|
CLAWHUB_REPOSITORY: "openclaw/clawhub"
|
||||||
# Pinned to a reviewed ClawHub commit so release behavior stays reproducible.
|
# Pinned to a reviewed ClawHub commit so release behavior stays reproducible.
|
||||||
|
|||||||
2
.github/workflows/plugin-npm-release.yml
vendored
2
.github/workflows/plugin-npm-release.yml
vendored
@@ -38,7 +38,7 @@ concurrency:
|
|||||||
env:
|
env:
|
||||||
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
||||||
NODE_VERSION: "24.x"
|
NODE_VERSION: "24.x"
|
||||||
PNPM_VERSION: "10.32.1"
|
PNPM_VERSION: "10.33.0"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
preview_plugins_npm:
|
preview_plugins_npm:
|
||||||
|
|||||||
@@ -1,9 +1,35 @@
|
|||||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
import {
|
import {
|
||||||
loadProviderCatalogModelsForList,
|
loadProviderCatalogModelsForList,
|
||||||
resolveProviderCatalogPluginIdsForFilter,
|
resolveProviderCatalogPluginIdsForFilter,
|
||||||
} from "./list.provider-catalog.js";
|
} from "./list.provider-catalog.js";
|
||||||
|
|
||||||
|
const providerDiscoveryMocks = vi.hoisted(() => ({
|
||||||
|
resolveBundledProviderCompatPluginIds: vi.fn(),
|
||||||
|
resolveOwningPluginIdsForProvider: vi.fn(),
|
||||||
|
resolvePluginDiscoveryProviders: vi.fn(),
|
||||||
|
resolveProviderContractPluginIdsForProviderAlias: vi.fn(),
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("../../plugins/providers.js", () => ({
|
||||||
|
resolveBundledProviderCompatPluginIds:
|
||||||
|
providerDiscoveryMocks.resolveBundledProviderCompatPluginIds,
|
||||||
|
resolveOwningPluginIdsForProvider: providerDiscoveryMocks.resolveOwningPluginIdsForProvider,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("../../plugins/contracts/registry.js", () => ({
|
||||||
|
resolveProviderContractPluginIdsForProviderAlias:
|
||||||
|
providerDiscoveryMocks.resolveProviderContractPluginIdsForProviderAlias,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("../../plugins/provider-discovery.js", async (importOriginal) => {
|
||||||
|
const actual = await importOriginal<typeof import("../../plugins/provider-discovery.js")>();
|
||||||
|
return {
|
||||||
|
...actual,
|
||||||
|
resolvePluginDiscoveryProviders: providerDiscoveryMocks.resolvePluginDiscoveryProviders,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
const baseParams = {
|
const baseParams = {
|
||||||
cfg: {
|
cfg: {
|
||||||
plugins: {
|
plugins: {
|
||||||
@@ -21,9 +47,67 @@ const baseParams = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const chutesProvider = {
|
||||||
|
id: "chutes",
|
||||||
|
pluginId: "chutes",
|
||||||
|
label: "Chutes",
|
||||||
|
auth: [],
|
||||||
|
staticCatalog: {
|
||||||
|
run: async () => ({
|
||||||
|
provider: { baseUrl: "https://chutes.example/v1", models: [] },
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const moonshotProvider = {
|
||||||
|
id: "moonshot",
|
||||||
|
pluginId: "moonshot",
|
||||||
|
label: "Moonshot",
|
||||||
|
auth: [],
|
||||||
|
staticCatalog: {
|
||||||
|
run: async () => ({
|
||||||
|
provider: {
|
||||||
|
baseUrl: "https://api.moonshot.ai/v1",
|
||||||
|
models: [{ id: "kimi-k2.6", name: "Kimi K2.6" }],
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const openaiProvider = {
|
||||||
|
id: "openai",
|
||||||
|
pluginId: "openai",
|
||||||
|
label: "OpenAI",
|
||||||
|
aliases: ["azure-openai-responses"],
|
||||||
|
auth: [],
|
||||||
|
staticCatalog: {
|
||||||
|
run: async () => ({
|
||||||
|
provider: { baseUrl: "https://api.openai.com/v1", models: [] },
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const defaultProviders = [chutesProvider, moonshotProvider, openaiProvider];
|
||||||
|
|
||||||
describe("loadProviderCatalogModelsForList", () => {
|
describe("loadProviderCatalogModelsForList", () => {
|
||||||
afterEach(() => {
|
beforeEach(() => {
|
||||||
vi.restoreAllMocks();
|
vi.clearAllMocks();
|
||||||
|
providerDiscoveryMocks.resolveBundledProviderCompatPluginIds.mockReturnValue([
|
||||||
|
"chutes",
|
||||||
|
"moonshot",
|
||||||
|
"openai",
|
||||||
|
]);
|
||||||
|
providerDiscoveryMocks.resolveOwningPluginIdsForProvider.mockImplementation(
|
||||||
|
({ provider }: { provider: string }) =>
|
||||||
|
defaultProviders.some((entry) => entry.id === provider) ? [provider] : undefined,
|
||||||
|
);
|
||||||
|
providerDiscoveryMocks.resolveProviderContractPluginIdsForProviderAlias.mockImplementation(
|
||||||
|
(provider: string) => (provider === "azure-openai-responses" ? ["openai"] : undefined),
|
||||||
|
);
|
||||||
|
providerDiscoveryMocks.resolvePluginDiscoveryProviders.mockImplementation(
|
||||||
|
async ({ onlyPluginIds }: { onlyPluginIds?: string[] }) =>
|
||||||
|
defaultProviders.filter((provider) => onlyPluginIds?.includes(provider.pluginId)),
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("does not use live provider discovery for display-only rows", async () => {
|
it("does not use live provider discovery for display-only rows", async () => {
|
||||||
@@ -62,13 +146,11 @@ describe("loadProviderCatalogModelsForList", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("does not execute workspace provider static catalogs", async () => {
|
it("does not execute workspace provider static catalogs", async () => {
|
||||||
const providers = await import("../../plugins/providers.js");
|
|
||||||
const discovery = await import("../../plugins/provider-discovery.js");
|
|
||||||
const workspaceStaticCatalog = vi.fn(async () => ({
|
const workspaceStaticCatalog = vi.fn(async () => ({
|
||||||
provider: { baseUrl: "https://workspace.example/v1", models: [] },
|
provider: { baseUrl: "https://workspace.example/v1", models: [] },
|
||||||
}));
|
}));
|
||||||
vi.spyOn(providers, "resolveBundledProviderCompatPluginIds").mockReturnValue(["bundled-demo"]);
|
providerDiscoveryMocks.resolveBundledProviderCompatPluginIds.mockReturnValue(["bundled-demo"]);
|
||||||
vi.spyOn(discovery, "resolvePluginDiscoveryProviders").mockResolvedValue([
|
providerDiscoveryMocks.resolvePluginDiscoveryProviders.mockResolvedValue([
|
||||||
{
|
{
|
||||||
id: "bundled-demo",
|
id: "bundled-demo",
|
||||||
pluginId: "bundled-demo",
|
pluginId: "bundled-demo",
|
||||||
@@ -93,7 +175,7 @@ describe("loadProviderCatalogModelsForList", () => {
|
|||||||
...baseParams,
|
...baseParams,
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(discovery.resolvePluginDiscoveryProviders).toHaveBeenCalledWith(
|
expect(providerDiscoveryMocks.resolvePluginDiscoveryProviders).toHaveBeenCalledWith(
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
onlyPluginIds: ["bundled-demo"],
|
onlyPluginIds: ["bundled-demo"],
|
||||||
includeUntrustedWorkspacePlugins: false,
|
includeUntrustedWorkspacePlugins: false,
|
||||||
|
|||||||
Reference in New Issue
Block a user