@spotinst/spinnaker-deck
Version:
Spinnaker-Deck service, forked with support to Spotinst
43 lines (37 loc) • 1.9 kB
text/typescript
import { toPairs } from 'lodash';
import { IStageTypeConfig } from 'core/domain';
import { HelpContentsRegistry } from 'core/help';
import { IManagedDeliveryPlugin, IResourceKindConfig, registerManagedDeliveryPlugin } from 'core/managed';
import { Registry } from 'core/registry';
import { SearchResultType, searchResultTypeRegistry } from 'core/search';
export interface IDeckPlugin {
/** Custom Stage UI (configuration and execution details) */
stages?: IStageTypeConfig[];
/** Custom Preconfigured Job Stage UI (configuration and execution details) */
preconfiguredJobStages?: IStageTypeConfig[];
/** DEPRECATED - Custom managed resource kinds */
resourceKinds?: IResourceKindConfig[];
/** Managed Delivery hooks */
managedDelivery?: IManagedDeliveryPlugin;
/** Help Text for use in <HelpField /> */
help?: { [helpKey: string]: string };
/** Custom global search types */
search?: SearchResultType[];
initialize?(plugin: IDeckPlugin): void;
}
/** Given a plugin, registers the plugin's extensions with Deck registries */
export function registerPluginExtensions(plugin: IDeckPlugin): PromiseLike<any> {
plugin.stages?.forEach((stage) => Registry.pipeline.registerStage(stage));
plugin.preconfiguredJobStages?.forEach((stage) => Registry.pipeline.registerPreconfiguredJobStage(stage));
toPairs(plugin.help ?? {}).forEach(([key, value]) => HelpContentsRegistry.register(key, value));
plugin.search?.forEach((search) => searchResultTypeRegistry.register(search));
if (plugin.managedDelivery || plugin.resourceKinds) {
const managedDeliveryPlugin: IManagedDeliveryPlugin = {
...plugin.managedDelivery,
resources: plugin.resourceKinds || plugin.managedDelivery?.resources,
};
registerManagedDeliveryPlugin(managedDeliveryPlugin);
}
// Run arbitrary plugin initialization code
return Promise.resolve(plugin.initialize?.(plugin));
}