Skip to content

Commit 802f366

Browse files
Merge pull request #15699 from logonoff/CONSOLE-4840-s2e14-the-carpet
CONSOLE-4840: Remove all plugin entry points + topology static extension cleanup
2 parents de4a431 + 303a839 commit 802f366

File tree

48 files changed

+119
-462
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+119
-462
lines changed

frontend/packages/console-app/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
"@console/webterminal-plugin": "0.0.0-fixed"
2828
},
2929
"consolePlugin": {
30-
"entry": "src/plugin.ts",
3130
"exposedModules": {
3231
"tourContext": "src/components/tour/tour-context.ts",
3332
"quickStartContext": "src/components/quick-starts/utils/quick-start-context.tsx",

frontend/packages/console-app/src/plugin.ts

Lines changed: 0 additions & 2 deletions
This file was deleted.

frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ table in [Console dynamic plugins README](./README.md).
1818
- Begin alignment of plugin SDK types with `@openshift/dynamic-plugin-sdk` ([CONSOLE-3769], [#15509])
1919
- Add optional `fetch` property to extension `console.dashboards/overview/health/url` ([CONSOLE-4796], [#15526])
2020
- Add optional `infrastructure` parameter to `PrometheusHealthHandler` type ([CONSOLE-4796], [#15526])
21+
- Allow `K8sResourceKind` in `TopologyDataObject`, `TopologyResourcesObject`, and `OverviewItem` types ([CONSOLE-4840], [#15699])
22+
- Allow async functions for the `resources` property of `console.topology/data/factory` extension ([CONSOLE-4806], [#15641])
2123

2224
## 4.20.0-prerelease.1 - 2025-08-15
2325

@@ -135,6 +137,7 @@ table in [Console dynamic plugins README](./README.md).
135137
[CONSOLE-4654]: https://issues.redhat.com/browse/CONSOLE-4654
136138
[CONSOLE-4656]: https://issues.redhat.com/browse/CONSOLE-4656
137139
[CONSOLE-4796]: https://issues.redhat.com/browse/CONSOLE-4796
140+
[CONSOLE-4806]: https://issues.redhat.com/browse/CONSOLE-4806
138141
[CONSOLE-4840]: https://issues.redhat.com/browse/CONSOLE-4840
139142
[OCPBUGS-19048]: https://issues.redhat.com/browse/OCPBUGS-19048
140143
[OCPBUGS-30077]: https://issues.redhat.com/browse/OCPBUGS-30077
@@ -194,4 +197,6 @@ table in [Console dynamic plugins README](./README.md).
194197
[#15386]: https://github.com/openshift/console/pull/15386
195198
[#15509]: https://github.com/openshift/console/pull/15509
196199
[#15526]: https://github.com/openshift/console/pull/15526
200+
[#15641]: https://github.com/openshift/console/pull/15641
197201
[#15671]: https://github.com/openshift/console/pull/15671
202+
[#15699]: https://github.com/openshift/console/pull/15699

frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology-types.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export interface OdcEdgeModel extends EdgeModel {
4747
resourceKind?: K8sResourceKindReference;
4848
}
4949

50-
export type TopologyResourcesObject = { [key: string]: K8sResourceCommon[] };
50+
export type TopologyResourcesObject = { [key: string]: K8sResourceKind[] };
5151

5252
export type TopologyDataResources = WatchK8sResults<TopologyResourcesObject>;
5353

@@ -101,9 +101,9 @@ export type TopologyDisplayOption = {
101101
value: boolean;
102102
};
103103

104-
export type OverviewItem<T = K8sResourceCommon> = {
104+
export type OverviewItem<T = K8sResourceKind> = {
105105
obj: T;
106-
hpas?: K8sResourceCommon[];
106+
hpas?: K8sResourceKind[];
107107
isOperatorBackedService?: boolean;
108108
isMonitorable?: boolean;
109109
monitoringAlerts?: PrometheusAlert[];
@@ -133,9 +133,9 @@ export interface TopologyDataObject<D = {}> {
133133
name: string;
134134
type: string;
135135
resources: OverviewItem;
136-
pods?: K8sResourceCommon[];
136+
pods?: K8sResourceKind[];
137137
data: D;
138-
resource: K8sResourceCommon | null;
138+
resource: K8sResourceKind | null;
139139
groupResources?: OdcNodeModel[];
140140
}
141141

frontend/packages/console-dynamic-plugin-sdk/src/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ export type {
1616
} from '@openshift/dynamic-plugin-sdk';
1717

1818
/**
19-
* A type for **existing static extensions** in console.
19+
* A legacy type for static extensions that should not be used anymore.
2020
*
2121
* Each extension instance has a `type` and the corresponding parameters
2222
* represented by the `properties` object.
2323
*
2424
* Each extension may specify `flags` referencing Console feature flags which
2525
* are required and/or disallowed in order to put this extension into effect.
2626
*
27-
* @deprecated - Use `ExtensionDeclaration` instead for dynamic extensions.
27+
* @deprecated - Use `ExtensionDeclaration` instead.
2828
*/
2929
export type Extension<P extends {} = any> = {
3030
type: string;

frontend/packages/console-plugin-sdk/src/codegen/__tests__/active-plugins.spec.ts

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ describe('getActivePluginsModule', () => {
3535
...getTemplatePackage({
3636
name: 'foo',
3737
}),
38-
consolePlugin: { entry: 'src/plugin.ts' },
38+
consolePlugin: {},
3939
};
4040

4141
const barPluginPackage: PluginPackage = {
4242
...getTemplatePackage({
4343
name: 'bar-plugin',
4444
}),
45-
consolePlugin: { entry: 'index.ts' },
45+
consolePlugin: {},
4646
};
4747

4848
const fooDynamicExtensions: Extension[] = [{ type: 'Dynamic/Foo', properties: { test: true } }];
@@ -80,18 +80,12 @@ describe('getActivePluginsModule', () => {
8080
8181
activePlugins.push({
8282
name: 'foo',
83-
extensions: [
84-
...require('foo/src/plugin.ts').default,
85-
...${JSON.stringify(fooDynamicExtensions)},
86-
],
83+
extensions: ${JSON.stringify(fooDynamicExtensions)},
8784
});
8885
8986
activePlugins.push({
9087
name: 'bar-plugin',
91-
extensions: [
92-
...require('bar-plugin/index.ts').default,
93-
...${JSON.stringify(barDynamicExtensions)},
94-
],
88+
extensions: ${JSON.stringify(barDynamicExtensions)},
9589
});
9690
9791
export default activePlugins;
@@ -118,21 +112,16 @@ describe('loadActivePluginsForTestPurposes', () => {
118112
...getTemplatePackage({
119113
name: 'foo',
120114
}),
121-
consolePlugin: { entry: 'src/plugin.ts' },
115+
consolePlugin: {},
122116
};
123117

124118
const barPluginPackage: PluginPackage = {
125119
...getTemplatePackage({
126120
name: 'bar-plugin',
127121
}),
128-
consolePlugin: { entry: 'index.ts' },
122+
consolePlugin: {},
129123
};
130124

131-
const fooStaticExtensions: Extension[] = [{ type: 'Static/Foo', properties: { test: true } }];
132-
const barStaticExtensions: Extension[] = [
133-
{ type: 'Static/Bar', properties: { baz: 1, qux: () => true } },
134-
];
135-
136125
const fooDynamicExtensions: Extension[] = [{ type: 'Dynamic/Foo', properties: { test: true } }];
137126
const barDynamicExtensions: Extension[] = [
138127
{ type: 'Dynamic/Bar', properties: { baz: 1, qux: { $codeRef: 'a.b' } } },
@@ -151,9 +140,6 @@ describe('loadActivePluginsForTestPurposes', () => {
151140
}
152141
});
153142

154-
jest.doMock('foo/src/plugin.ts', () => ({ default: fooStaticExtensions }), { virtual: true });
155-
jest.doMock('bar-plugin/index.ts', () => ({ default: barStaticExtensions }), { virtual: true });
156-
157143
expect(
158144
loadActivePluginsForTestPurposes(
159145
[fooPluginPackage, barPluginPackage],
@@ -163,11 +149,11 @@ describe('loadActivePluginsForTestPurposes', () => {
163149
).toEqual([
164150
{
165151
name: 'foo',
166-
extensions: [...fooStaticExtensions, ...fooDynamicExtensions],
152+
extensions: fooDynamicExtensions,
167153
},
168154
{
169155
name: 'bar-plugin',
170-
extensions: [...barStaticExtensions, ...barDynamicExtensions],
156+
extensions: barDynamicExtensions,
171157
},
172158
]);
173159

@@ -186,7 +172,7 @@ describe('getExecutableCodeRefSource', () => {
186172
exposedModules: { [moduleName: string]: string } = {},
187173
): PluginPackage => ({
188174
...getTemplatePackage({ name }),
189-
consolePlugin: { entry: 'src/plugin.ts', exposedModules },
175+
consolePlugin: { exposedModules },
190176
});
191177

192178
it('transforms encoded code reference into CodeRef function source', () => {
@@ -270,7 +256,7 @@ describe('getDynamicExtensions', () => {
270256
...getTemplatePackage({
271257
name: 'test-plugin',
272258
}),
273-
consolePlugin: { entry: 'src/plugin.ts' },
259+
consolePlugin: {},
274260
};
275261

276262
const extensionsJSON: Extension[] = [
@@ -357,7 +343,7 @@ describe('getDynamicExtensions', () => {
357343
...getTemplatePackage({
358344
name: 'test-plugin',
359345
}),
360-
consolePlugin: { entry: 'src/plugin.ts' },
346+
consolePlugin: {},
361347
};
362348

363349
const extensionsFilePath = `${pluginPackage._path}/${extensionsFile}`;
@@ -383,7 +369,7 @@ describe('getDynamicExtensions', () => {
383369
...getTemplatePackage({
384370
name: 'test-plugin',
385371
}),
386-
consolePlugin: { entry: 'src/plugin.ts' },
372+
consolePlugin: {},
387373
};
388374

389375
const extensionsJSON: Extension[] = [];
@@ -419,7 +405,7 @@ describe('getDynamicExtensions', () => {
419405
...getTemplatePackage({
420406
name: 'test-plugin',
421407
}),
422-
consolePlugin: { entry: 'src/plugin.ts' },
408+
consolePlugin: {},
423409
};
424410

425411
const extensionsJSON: Extension[] = [

frontend/packages/console-plugin-sdk/src/codegen/__tests__/plugin-resolver.spec.ts

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,33 +20,6 @@ describe('isPluginPackage', () => {
2020
}),
2121
).toBe(false);
2222
});
23-
24-
it('returns false if package.consolePlugin.entry is missing', () => {
25-
expect(
26-
isPluginPackage({
27-
...getTemplatePackage(),
28-
consolePlugin: {},
29-
}),
30-
).toBe(false);
31-
});
32-
33-
it('returns false if package.consolePlugin.entry is an empty string', () => {
34-
expect(
35-
isPluginPackage({
36-
...getTemplatePackage(),
37-
consolePlugin: { entry: '' },
38-
}),
39-
).toBe(false);
40-
});
41-
42-
it('returns true if package.consolePlugin.entry is a non-empty string', () => {
43-
expect(
44-
isPluginPackage({
45-
...getTemplatePackage(),
46-
consolePlugin: { entry: 'plugin.ts' },
47-
}),
48-
).toBe(true);
49-
});
5023
});
5124

5225
describe('readPackages', () => {
@@ -75,7 +48,7 @@ describe('readPackages', () => {
7548
name: '@console/foo-plugin',
7649
_path: pluginPackagePath,
7750
}),
78-
consolePlugin: { entry: 'plugin.ts' },
51+
consolePlugin: {},
7952
};
8053

8154
const utilsPackagePath = '/test/packages/bar-utils';
@@ -132,14 +105,14 @@ describe('filterActivePluginPackages', () => {
132105
name: 'bar',
133106
version: '1.2.3',
134107
}),
135-
consolePlugin: { entry: 'plugin.ts' },
108+
consolePlugin: {},
136109
},
137110
{
138111
...getTemplatePackage({
139112
name: 'qux',
140113
version: '2.3.4',
141114
}),
142-
consolePlugin: { entry: 'plugin.ts' },
115+
consolePlugin: {},
143116
},
144117
];
145118

@@ -152,7 +125,7 @@ describe('filterActivePluginPackages', () => {
152125
name: 'app',
153126
}),
154127
dependencies: {},
155-
consolePlugin: { entry: 'plugin.ts' },
128+
consolePlugin: {},
156129
};
157130

158131
expect(filterActivePluginPackages(appPackage, [appPackage])).toEqual([appPackage]);
@@ -167,7 +140,7 @@ describe('filterActivePluginPackages', () => {
167140
bar: '1.2.3',
168141
qux: '2.3.4',
169142
},
170-
consolePlugin: { entry: 'plugin.ts' },
143+
consolePlugin: {},
171144
};
172145

173146
const pluginPackages: PluginPackage[] = [
@@ -176,14 +149,14 @@ describe('filterActivePluginPackages', () => {
176149
name: 'bar',
177150
version: '1.2.3',
178151
}),
179-
consolePlugin: { entry: 'plugin.ts' },
152+
consolePlugin: {},
180153
},
181154
{
182155
...getTemplatePackage({
183156
name: 'qux',
184157
version: '2.3.4',
185158
}),
186-
consolePlugin: { entry: 'plugin.ts' },
159+
consolePlugin: {},
187160
},
188161
];
189162

frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,7 @@ export const getActivePluginsModule = (
5757
${output}
5858
activePlugins.push({
5959
name: '${pkg.name}',
60-
extensions: [
61-
...require('${pkg.name}/${pkg.consolePlugin.entry}').default,
62-
...${extensionHook(pkg)},
63-
],
60+
extensions: ${extensionHook(pkg)},
6461
});
6562
`;
6663
}
@@ -87,11 +84,7 @@ export const loadActivePluginsForTestPurposes = (
8784
for (const pkg of pluginPackages) {
8885
activePlugins.push({
8986
name: pkg.name,
90-
extensions: [
91-
// eslint-disable-next-line @typescript-eslint/no-var-requires
92-
...require(`${pkg.name}/${pkg.consolePlugin.entry}`).default,
93-
...extensionHook(pkg),
94-
],
87+
extensions: extensionHook(pkg),
9588
});
9689
}
9790

frontend/packages/console-plugin-sdk/src/codegen/plugin-resolver.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,8 @@ const consolePluginOverrideEnvVar = 'CONSOLE_PLUGINS';
2020
* Return `true` if the given package represents a Console plugin.
2121
*/
2222
export const isPluginPackage = (pkg: Package): pkg is PluginPackage => {
23-
if (!(pkg as PluginPackage).consolePlugin) {
24-
return false;
25-
}
26-
27-
const { entry } = (pkg as PluginPackage).consolePlugin;
28-
return typeof entry === 'string' && !!entry;
23+
const { consolePlugin } = pkg as PluginPackage;
24+
return !_.isNil(consolePlugin) && _.isObject(consolePlugin);
2925
};
3026

3127
/**
@@ -114,7 +110,6 @@ export type Package = readPkg.NormalizedPackageJson & {
114110

115111
export type PluginPackage = Package & {
116112
consolePlugin: {
117-
entry: string;
118113
exposedModules?: { [moduleName: string]: string };
119114
};
120115
};

0 commit comments

Comments
 (0)