@spinnaker/cloudrun 2026.2.3 → 2026.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/cloudrun.module.d.ts +1 -1
  2. package/dist/common/ComponentUrlDetails.d.ts +7 -0
  3. package/dist/common/LoadBalancerMessage.d.ts +4 -0
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/instance/details/CloudrunInstanceDetails.d.ts +23 -0
  8. package/dist/loadBalancer/configure/wizard/CloudrunLoadBalancerModal.d.ts +32 -0
  9. package/dist/loadBalancer/details/CloudrunLoadBalancerActions.d.ts +3 -0
  10. package/dist/loadBalancer/details/sections.d.ts +7 -0
  11. package/dist/loadBalancer/details/useCloudrunLoadBalancerDetails.d.ts +4 -0
  12. package/dist/loadBalancer/index.d.ts +4 -2
  13. package/dist/loadBalancer/loadBalancerTransformer.d.ts +2 -6
  14. package/dist/manifest/manifest.service.d.ts +5 -0
  15. package/dist/manifest/manifestCommandBuilder.service.d.ts +1 -1
  16. package/dist/pipeline/stages/deployManifest/manifestStatus/DeployStatus.d.ts +1 -0
  17. package/dist/pipeline/stages/deployManifest/manifestStatus/ManifestDetailsLink.d.ts +6 -3
  18. package/dist/pipeline/stages/editLoadBalancer/CloudrunEditLoadBalancerExecutionDetails.d.ts +7 -0
  19. package/dist/pipeline/stages/editLoadBalancer/CloudrunEditLoadBalancerStageConfig.d.ts +30 -0
  20. package/dist/pipeline/stages/editLoadBalancer/cloudrunEditLoadBalancerStage.d.ts +2 -1
  21. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +4 -6
  22. package/dist/serverGroup/configure/wizard/BasicSettings.d.ts +5 -2
  23. package/dist/serverGroup/configure/wizard/serverGroupWizard.d.ts +18 -6
  24. package/dist/serverGroup/details/CloudrunServerGroupActions.d.ts +6 -0
  25. package/dist/serverGroup/details/cloudrunServerGroupDetailsGetter.d.ts +3 -0
  26. package/dist/serverGroup/details/sections.d.ts +5 -0
  27. package/dist/serverGroup/index.d.ts +3 -1
  28. package/dist/serverGroup/serverGroupTransformer.service.d.ts +1 -5
  29. package/package.json +4 -11
  30. package/src/cloudrun.module.spec.ts +22 -0
  31. package/src/cloudrun.module.ts +54 -59
  32. package/src/common/ComponentUrlDetails.tsx +25 -0
  33. package/src/common/LoadBalancerMessage.tsx +17 -0
  34. package/src/index.ts +2 -1
  35. package/src/instance/details/CloudrunInstanceDetails.tsx +164 -0
  36. package/src/loadBalancer/configure/wizard/CloudrunLoadBalancerModal.spec.tsx +85 -0
  37. package/src/loadBalancer/configure/wizard/CloudrunLoadBalancerModal.tsx +395 -0
  38. package/src/loadBalancer/details/CloudrunLoadBalancerActions.tsx +66 -0
  39. package/src/loadBalancer/details/sections.spec.ts +19 -0
  40. package/src/loadBalancer/details/sections.tsx +91 -0
  41. package/src/loadBalancer/details/useCloudrunLoadBalancerDetails.ts +56 -0
  42. package/src/loadBalancer/index.ts +4 -2
  43. package/src/loadBalancer/loadBalancerTransformer.ts +3 -13
  44. package/src/manifest/manifest.service.ts +18 -1
  45. package/src/manifest/manifestCommandBuilder.service.ts +46 -53
  46. package/src/pipeline/stages/deployManifest/manifestStatus/DeployStatus.tsx +33 -4
  47. package/src/pipeline/stages/deployManifest/manifestStatus/ManifestDetailsLink.spec.tsx +35 -0
  48. package/src/pipeline/stages/deployManifest/manifestStatus/ManifestDetailsLink.tsx +10 -5
  49. package/src/pipeline/stages/editLoadBalancer/CloudrunEditLoadBalancerExecutionDetails.tsx +70 -0
  50. package/src/pipeline/stages/editLoadBalancer/CloudrunEditLoadBalancerStageConfig.tsx +245 -0
  51. package/src/pipeline/stages/editLoadBalancer/cloudrunEditLoadBalancerStage.spec.ts +205 -0
  52. package/src/pipeline/stages/editLoadBalancer/cloudrunEditLoadBalancerStage.ts +14 -71
  53. package/src/serverGroup/configure/serverGroupCommandBuilder.service.ts +5 -15
  54. package/src/serverGroup/configure/wizard/BasicSettings.tsx +10 -8
  55. package/src/serverGroup/configure/wizard/serverGroupWizard.tsx +59 -15
  56. package/src/serverGroup/details/CloudrunServerGroupActions.tsx +80 -0
  57. package/src/serverGroup/details/cloudrunServerGroupDetailsGetter.spec.ts +46 -0
  58. package/src/serverGroup/details/cloudrunServerGroupDetailsGetter.ts +53 -0
  59. package/src/serverGroup/details/sections.tsx +60 -0
  60. package/src/serverGroup/index.ts +3 -1
  61. package/src/serverGroup/routerConsumers.spec.tsx +152 -0
  62. package/src/serverGroup/serverGroupTransformer.service.ts +2 -12
  63. package/dist/common/componentUrlDetails.component.d.ts +0 -1
  64. package/dist/common/conditionalDescriptionListItem.component.d.ts +0 -1
  65. package/dist/common/loadBalancerMessage.component.d.ts +0 -1
  66. package/dist/instance/details/details.controller.d.ts +0 -1
  67. package/dist/loadBalancer/configure/wizard/allocationConfigurationRow.component.d.ts +0 -1
  68. package/dist/loadBalancer/configure/wizard/basicSettings.component.d.ts +0 -1
  69. package/dist/loadBalancer/configure/wizard/stageAllocationConfigurationRow.component.d.ts +0 -1
  70. package/dist/loadBalancer/configure/wizard/wizard.controller.d.ts +0 -2
  71. package/dist/loadBalancer/details/details.controller.d.ts +0 -1
  72. package/dist/pipeline/pipeline.module.d.ts +0 -1
  73. package/dist/pipeline/stages/editLoadBalancer/loadBalancerChoice.modal.controller.d.ts +0 -1
  74. package/dist/serverGroup/details/details.controller.d.ts +0 -1
  75. package/src/common/componentUrlDetails.component.ts +0 -22
  76. package/src/common/conditionalDescriptionListItem.component.ts +0 -37
  77. package/src/common/loadBalancerMessage.component.html +0 -11
  78. package/src/common/loadBalancerMessage.component.ts +0 -13
  79. package/src/instance/details/details.controller.ts +0 -84
  80. package/src/instance/details/details.html +0 -68
  81. package/src/loadBalancer/configure/wizard/allocationConfigurationRow.component.ts +0 -70
  82. package/src/loadBalancer/configure/wizard/basicSettings.component.html +0 -44
  83. package/src/loadBalancer/configure/wizard/basicSettings.component.ts +0 -86
  84. package/src/loadBalancer/configure/wizard/stageAllocationConfigurationRow.component.html +0 -45
  85. package/src/loadBalancer/configure/wizard/stageAllocationConfigurationRow.component.ts +0 -84
  86. package/src/loadBalancer/configure/wizard/wizard.controller.ts +0 -157
  87. package/src/loadBalancer/configure/wizard/wizard.html +0 -39
  88. package/src/loadBalancer/configure/wizard/wizard.less +0 -9
  89. package/src/loadBalancer/details/details.controller.ts +0 -140
  90. package/src/loadBalancer/details/details.html +0 -89
  91. package/src/pipeline/pipeline.module.ts +0 -6
  92. package/src/pipeline/stages/editLoadBalancer/editLoadBalancerExecutionDetails.html +0 -33
  93. package/src/pipeline/stages/editLoadBalancer/editLoadBalancerStage.html +0 -51
  94. package/src/pipeline/stages/editLoadBalancer/loadBalancerChoice.modal.controller.ts +0 -65
  95. package/src/pipeline/stages/editLoadBalancer/loadBalancerChoice.modal.html +0 -53
  96. package/src/serverGroup/details/details.controller.ts +0 -134
  97. package/src/serverGroup/details/details.html +0 -94
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import type { Application } from '@spinnaker/core';
3
+ import type { ICloudrunInstance } from '../../common/domain';
4
+ interface ICloudrunInstanceDetailsProps {
5
+ app: Application;
6
+ instance: {
7
+ instanceId: string;
8
+ };
9
+ }
10
+ interface ICloudrunInstanceDetailsState {
11
+ loading: boolean;
12
+ instance?: ICloudrunInstance;
13
+ instanceIdNotFound?: string;
14
+ }
15
+ export declare class CloudrunInstanceDetails extends React.Component<ICloudrunInstanceDetailsProps, ICloudrunInstanceDetailsState> {
16
+ state: ICloudrunInstanceDetailsState;
17
+ private isUnmounted;
18
+ componentDidMount(): void;
19
+ componentWillUnmount(): void;
20
+ private retrieveInstance;
21
+ render(): JSX.Element;
22
+ }
23
+ export {};
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import type { ILoadBalancerModalProps, IRouterInjectedProps } from '@spinnaker/core';
3
+ import { TaskMonitor } from '@spinnaker/core';
4
+ import { CloudrunLoadBalancerUpsertDescription } from '../../loadBalancerTransformer';
5
+ export interface ICloudrunLoadBalancerModalState {
6
+ loading: boolean;
7
+ loadBalancer?: CloudrunLoadBalancerUpsertDescription;
8
+ taskMonitor: TaskMonitor;
9
+ }
10
+ export interface ICloudrunLoadBalancerModalProps extends ILoadBalancerModalProps {
11
+ isNew?: boolean;
12
+ }
13
+ export declare class CloudrunLoadBalancerModalComponent extends React.Component<ICloudrunLoadBalancerModalProps & IRouterInjectedProps, ICloudrunLoadBalancerModalState> {
14
+ static show(props: ICloudrunLoadBalancerModalProps): Promise<CloudrunLoadBalancerUpsertDescription>;
15
+ private transformer;
16
+ private isUnmounted;
17
+ private applicationRefreshUnsubscribe?;
18
+ constructor(props: ICloudrunLoadBalancerModalProps & IRouterInjectedProps);
19
+ componentDidMount(): void;
20
+ componentWillUnmount(): void;
21
+ private onTaskComplete;
22
+ private onApplicationRefresh;
23
+ private clearApplicationRefreshSubscription;
24
+ private submit;
25
+ private updateLoadBalancer;
26
+ render(): JSX.Element;
27
+ }
28
+ export declare const CloudrunLoadBalancerModal: React.ForwardRefExoticComponent<Omit<ICloudrunLoadBalancerModalProps & IRouterInjectedProps, keyof IRouterInjectedProps> & {
29
+ children?: React.ReactNode;
30
+ } & React.RefAttributes<any>> & {
31
+ show: typeof CloudrunLoadBalancerModalComponent.show;
32
+ };
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import type { ILoadBalancerActionsProps } from '@spinnaker/core';
3
+ export declare function CloudrunLoadBalancerActions({ app, loadBalancer }: ILoadBalancerActionsProps): JSX.Element;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import type { ILoadBalancerDetailsSectionProps } from '@spinnaker/core';
3
+ export declare function compareCloudrunLoadBalancerServerGroups(a: any, b: any): number;
4
+ export declare function CloudrunLoadBalancerDetailsSection({ loadBalancer }: ILoadBalancerDetailsSectionProps): JSX.Element;
5
+ export declare function CloudrunLoadBalancerStatusSection({ loadBalancer }: ILoadBalancerDetailsSectionProps): JSX.Element;
6
+ export declare function CloudrunLoadBalancerTrafficSplitSection({ loadBalancer }: ILoadBalancerDetailsSectionProps): JSX.Element;
7
+ export declare function CloudrunLoadBalancerDnsSection({ loadBalancer }: ILoadBalancerDetailsSectionProps): JSX.Element;
@@ -0,0 +1,4 @@
1
+ import type { IUseDetailsHookProps, UseDetailsHook } from '@spinnaker/core';
2
+ import type { ICloudrunLoadBalancer } from '../../common/domain';
3
+ export declare const useCloudrunLoadBalancerDetails: UseDetailsHook<ICloudrunLoadBalancer>;
4
+ export declare function findCloudrunLoadBalancer(loadBalancers: ICloudrunLoadBalancer[], loadBalancerParams: IUseDetailsHookProps['loadBalancerParams']): ICloudrunLoadBalancer;
@@ -1,3 +1,5 @@
1
1
  export * from './loadBalancerTransformer';
2
- export * from './details/details.controller';
3
- export * from './configure/wizard/wizard.controller';
2
+ export * from './configure/wizard/CloudrunLoadBalancerModal';
3
+ export * from './details/CloudrunLoadBalancerActions';
4
+ export * from './details/sections';
5
+ export * from './details/useCloudrunLoadBalancerDetails';
@@ -26,13 +26,9 @@ export declare class CloudrunLoadBalancerUpsertDescription implements ILoadBalan
26
26
  mapAllocationsToPercentages(): void;
27
27
  }
28
28
  export declare class CloudrunLoadBalancerTransformer {
29
- private $q;
30
- static $inject: string[];
31
- constructor($q: ng.IQService);
32
- normalizeLoadBalancer(loadBalancer: ILoadBalancer): PromiseLike<ILoadBalancer>;
33
- convertLoadBalancerForEditing(loadBalancer: ICloudrunLoadBalancer, application: Application): PromiseLike<ICloudrunLoadBalancer>;
29
+ normalizeLoadBalancer(loadBalancer: ILoadBalancer): Promise<ILoadBalancer>;
30
+ convertLoadBalancerForEditing(loadBalancer: ICloudrunLoadBalancer, application: Application): Promise<ICloudrunLoadBalancer>;
34
31
  convertLoadBalancerToUpsertDescription(loadBalancer: ICloudrunLoadBalancer): CloudrunLoadBalancerUpsertDescription;
35
32
  private buildInstanceCounts;
36
33
  private transformInstance;
37
34
  }
38
- export declare const CLOUDRUN_LOAD_BALANCER_TRANSFORMER = "spinnaker.cloudrun.loadBalancer.transformer.service";
@@ -7,6 +7,11 @@ export interface IStageManifest {
7
7
  name: string;
8
8
  };
9
9
  }
10
+ export interface IStoredManifestReference {
11
+ type: string;
12
+ reference: string;
13
+ }
14
+ export declare function isStoredManifestReference(manifest: unknown): manifest is IStoredManifestReference;
10
15
  export interface IManifestParams {
11
16
  account: string;
12
17
  location: string;
@@ -26,5 +26,5 @@ export interface ICloudrunManifestSpinnakerRelationships {
26
26
  export declare class CloudrunManifestCommandBuilder {
27
27
  static manifestCommandIsValid(command: ICloudrunManifestCommand): boolean;
28
28
  static copyAndCleanCommand(input: ICloudrunManifestCommand): ICloudrunManifestCommand;
29
- static buildNewManifestCommand(app: Application, sourceManifest?: any, sourceMoniker?: IMoniker, sourceAccount?: string): PromiseLike<ICloudrunManifestCommandData>;
29
+ static buildNewManifestCommand(app: Application, sourceManifest?: any, sourceMoniker?: IMoniker, sourceAccount?: string): Promise<ICloudrunManifestCommandData>;
30
30
  }
@@ -17,6 +17,7 @@ export declare class DeployStatus extends React.Component<IExecutionDetailsSecti
17
17
  componentDidUpdate(_prevProps: IExecutionDetailsSectionProps, prevState: IDeployStatusState): void;
18
18
  private subscribeToManifestUpdates;
19
19
  private unsubscribeAll;
20
+ private get storedManifestRefs();
20
21
  private stageManifestToIManifest;
21
22
  render(): JSX.Element;
22
23
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { IManifest } from '@spinnaker/core';
2
+ import type { IManifest, IRouterInjectedProps } from '@spinnaker/core';
3
3
  export interface IManifestDetailsProps {
4
4
  manifest: IManifest;
5
5
  linkName: string;
@@ -8,9 +8,9 @@ export interface IManifestDetailsProps {
8
8
  export interface IManifestDetailsState {
9
9
  url: string;
10
10
  }
11
- export declare class ManifestDetailsLink extends React.Component<IManifestDetailsProps, IManifestDetailsState> {
11
+ export declare class ManifestDetailsLinkComponent extends React.Component<IManifestDetailsProps & IRouterInjectedProps, IManifestDetailsState> {
12
12
  private spinnakerKindStateMap;
13
- constructor(props: IManifestDetailsProps);
13
+ constructor(props: IManifestDetailsProps & IRouterInjectedProps);
14
14
  private canOpen;
15
15
  private spinnakerKindFromCloudrunKind;
16
16
  private resourceRegion;
@@ -18,3 +18,6 @@ export declare class ManifestDetailsLink extends React.Component<IManifestDetail
18
18
  private loadUrl;
19
19
  render(): JSX.Element;
20
20
  }
21
+ export declare const ManifestDetailsLink: React.ForwardRefExoticComponent<Omit<IManifestDetailsProps & IRouterInjectedProps, keyof IRouterInjectedProps> & {
22
+ children?: React.ReactNode;
23
+ } & React.RefAttributes<any>>;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import type { IExecutionDetailsSectionProps, ILoadBalancer } from '@spinnaker/core';
3
+ export declare function CloudrunEditLoadBalancerExecutionDetails(props: IExecutionDetailsSectionProps): JSX.Element;
4
+ export declare namespace CloudrunEditLoadBalancerExecutionDetails {
5
+ var title: string;
6
+ }
7
+ export declare function getLoadBalancerCompositeKey(loadBalancer: Partial<ILoadBalancer>): string;
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import type { ILoadBalancer, IStageConfigProps } from '@spinnaker/core';
3
+ export declare class CloudrunEditLoadBalancerStageConfig extends React.Component<IStageConfigProps> {
4
+ componentDidMount(): void;
5
+ private addLoadBalancer;
6
+ private editLoadBalancer;
7
+ private removeLoadBalancer;
8
+ render(): JSX.Element;
9
+ }
10
+ interface ICloudrunLoadBalancerChoiceModalProps {
11
+ application: IStageConfigProps['application'];
12
+ closeModal?: (loadBalancer: ILoadBalancer) => void;
13
+ dismissModal?: () => void;
14
+ }
15
+ interface ICloudrunLoadBalancerChoiceModalState {
16
+ loading: boolean;
17
+ loadBalancers: ILoadBalancer[];
18
+ selectedLoadBalancer?: ILoadBalancer;
19
+ }
20
+ export declare class CloudrunLoadBalancerChoiceModal extends React.Component<ICloudrunLoadBalancerChoiceModalProps, ICloudrunLoadBalancerChoiceModalState> {
21
+ static show(props: ICloudrunLoadBalancerChoiceModalProps): Promise<ILoadBalancer>;
22
+ private mounted;
23
+ state: ICloudrunLoadBalancerChoiceModalState;
24
+ componentDidMount(): void;
25
+ componentWillUnmount(): void;
26
+ private submit;
27
+ render(): JSX.Element;
28
+ }
29
+ export declare function getLoadBalancerOptionLabel(loadBalancer: ILoadBalancer): string;
30
+ export {};
@@ -1 +1,2 @@
1
- export declare const CLOUDRUN_EDIT_LOAD_BALANCER_STAGE = "spinnaker.cloudrun.pipeline.stage.editLoadBalancerStage";
1
+ import type { IStageTypeConfig } from '@spinnaker/core';
2
+ export declare const CLOUDRUN_EDIT_LOAD_BALANCER_STAGE_CONFIG: IStageTypeConfig;
@@ -56,19 +56,17 @@ export interface ICloudrunServerGroupSpinnakerRelationships {
56
56
  securityGroups?: string[];
57
57
  }
58
58
  export declare class CloudrunV2ServerGroupCommandBuilder {
59
- buildNewServerGroupCommand(app: Application): PromiseLike<ICloudrunServerGroupCommandData>;
59
+ buildNewServerGroupCommand(app: Application): Promise<ICloudrunServerGroupCommandData>;
60
60
  buildNewServerGroupCommandForPipeline(_stage: IStage, pipeline: IPipeline): any;
61
- buildServerGroupCommandFromPipeline(app: Application, cluster: CloudrunDeployDescription, _stage: IStage, pipeline: IPipeline): PromiseLike<ICloudrunServerGroupCommandData>;
61
+ buildServerGroupCommandFromPipeline(app: Application, cluster: CloudrunDeployDescription, _stage: IStage, pipeline: IPipeline): Promise<ICloudrunServerGroupCommandData>;
62
62
  }
63
63
  export declare class CloudrunServerGroupCommandBuilder {
64
- static $inject: string[];
65
64
  static ServerGroupCommandIsValid(command: ICloudrunServerGroupCommand): boolean;
66
65
  static copyAndCleanCommand(input: ICloudrunServerGroupCommand): ICloudrunServerGroupCommand;
67
66
  static buildNewServerGroupCommandForPipeline(stage: IStage, pipeline: IPipeline): any;
68
67
  private static getExpectedArtifacts;
69
- static buildServerGroupCommandFromPipeline(app: Application, cluster: CloudrunDeployDescription, _stage: IStage, pipeline: IPipeline): PromiseLike<ICloudrunServerGroupCommandData>;
68
+ static buildServerGroupCommandFromPipeline(app: Application, cluster: CloudrunDeployDescription, _stage: IStage, pipeline: IPipeline): Promise<ICloudrunServerGroupCommandData>;
70
69
  static getCredentials(accounts: IAccountDetails[]): string;
71
70
  static getRegion(accounts: any[], credentials: string): string;
72
- static buildNewServerGroupCommand(app: Application, sourceAccount: string, mode: string): PromiseLike<ICloudrunServerGroupCommandData>;
71
+ static buildNewServerGroupCommand(app: Application, sourceAccount: string, mode: string): Promise<ICloudrunServerGroupCommandData>;
73
72
  }
74
- export declare const CLOUDRUN_SERVER_GROUP_COMMAND_BUILDER = "spinnaker.cloudrun.serverGroup.commandBuilder.service";
@@ -1,6 +1,6 @@
1
1
  import type { FormikProps } from 'formik';
2
2
  import React from 'react';
3
- import type { Application, IAccount, IServerGroup } from '@spinnaker/core';
3
+ import type { Application, IAccount, IRouterInjectedProps, IServerGroup } from '@spinnaker/core';
4
4
  import type { ICloudrunServerGroupCommandData } from '../serverGroupCommandBuilder.service';
5
5
  export interface IServerGroupBasicSettingsProps {
6
6
  accounts: IAccount[];
@@ -16,7 +16,10 @@ export interface IServerGroupBasicSettingsState {
16
16
  createsNewCluster: boolean;
17
17
  latestServerGroup: IServerGroup;
18
18
  }
19
- export declare function ServerGroupBasicSettings({ accounts, onAccountSelect, selectedAccount, formik, onEnterStack, detailsChanged, app, }: IServerGroupBasicSettingsProps): JSX.Element;
19
+ export declare function ServerGroupBasicSettingsComponent({ accounts, onAccountSelect, selectedAccount, formik, onEnterStack, detailsChanged, app, stateService, }: IServerGroupBasicSettingsProps & IRouterInjectedProps): JSX.Element;
20
+ export declare const ServerGroupBasicSettings: React.ForwardRefExoticComponent<Omit<IServerGroupBasicSettingsProps & IRouterInjectedProps, keyof IRouterInjectedProps> & {
21
+ children?: React.ReactNode;
22
+ } & React.RefAttributes<any>>;
20
23
  export interface IWizardServerGroupBasicSettingsProps {
21
24
  formik: FormikProps<ICloudrunServerGroupCommandData>;
22
25
  app: Application;
@@ -1,25 +1,37 @@
1
1
  import React from 'react';
2
- import type { Application, IModalComponentProps } from '@spinnaker/core';
3
- import { TaskMonitor } from '@spinnaker/core';
2
+ import type { Application, DeckRuntimeServices, IModalComponentProps, IRouterInjectedProps } from '@spinnaker/core';
3
+ import { DeckRuntimeContext, TaskMonitor } from '@spinnaker/core';
4
4
  import type { ICloudrunServerGroupCommandData } from '../serverGroupCommandBuilder.service';
5
5
  export interface ICloudrunServerGroupModalProps extends IModalComponentProps {
6
6
  title: string;
7
7
  application: Application;
8
8
  command: ICloudrunServerGroupCommandData;
9
9
  isNew?: boolean;
10
+ closeModal?: (command: any) => void;
11
+ dismissModal?: () => void;
10
12
  }
11
13
  export interface ICloudrunServerGroupModalState {
12
14
  command: ICloudrunServerGroupCommandData;
13
15
  loaded: boolean;
14
16
  taskMonitor: TaskMonitor;
15
17
  }
16
- export declare class ServerGroupWizard extends React.Component<ICloudrunServerGroupModalProps, ICloudrunServerGroupModalState> {
17
- static defaultProps: Partial<ICloudrunServerGroupModalProps>;
18
+ export declare class ServerGroupWizardComponent extends React.Component<ICloudrunServerGroupModalProps & IRouterInjectedProps, ICloudrunServerGroupModalState> {
19
+ static contextType: React.Context<import("@spinnaker/core").DeckRuntimeContextValue>;
20
+ context: React.ContextType<typeof DeckRuntimeContext>;
21
+ static defaultProps: Partial<ICloudrunServerGroupModalProps & IRouterInjectedProps>;
18
22
  private _isUnmounted;
19
- static show(props: ICloudrunServerGroupModalProps): Promise<ICloudrunServerGroupCommandData>;
20
- constructor(props: ICloudrunServerGroupModalProps);
23
+ private applicationRefreshUnsubscribe?;
24
+ static show(props: ICloudrunServerGroupModalProps, runtimeServices: DeckRuntimeServices): Promise<ICloudrunServerGroupCommandData>;
25
+ constructor(props: ICloudrunServerGroupModalProps & IRouterInjectedProps);
21
26
  private onTaskComplete;
22
27
  protected onApplicationRefresh: () => void;
28
+ componentWillUnmount(): void;
29
+ private clearApplicationRefreshSubscription;
23
30
  private submit;
24
31
  render(): JSX.Element;
25
32
  }
33
+ export declare const ServerGroupWizard: React.ForwardRefExoticComponent<Omit<ICloudrunServerGroupModalProps & IRouterInjectedProps, keyof IRouterInjectedProps> & {
34
+ children?: React.ReactNode;
35
+ } & React.RefAttributes<any>> & {
36
+ show: typeof ServerGroupWizardComponent.show;
37
+ };
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { IRouterInjectedProps, IServerGroupActionsProps } from '@spinnaker/core';
3
+ export declare function CloudrunServerGroupActionsComponent({ app, serverGroup, stateService, }: IServerGroupActionsProps & IRouterInjectedProps): JSX.Element;
4
+ export declare const CloudrunServerGroupActions: React.ForwardRefExoticComponent<Omit<IServerGroupActionsProps & IRouterInjectedProps, keyof IRouterInjectedProps> & {
5
+ children?: React.ReactNode;
6
+ } & React.RefAttributes<any>>;
@@ -0,0 +1,3 @@
1
+ import { Observable } from 'rxjs';
2
+ import type { IServerGroup, IServerGroupDetailsProps } from '@spinnaker/core';
3
+ export declare const cloudrunServerGroupDetailsGetter: (props: IServerGroupDetailsProps, autoClose: () => void) => Observable<IServerGroup>;
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import type { IServerGroupDetailsSectionProps } from '@spinnaker/core';
3
+ export declare function CloudrunServerGroupInformationSection({ serverGroup }: IServerGroupDetailsSectionProps): JSX.Element;
4
+ export declare function CloudrunServerGroupSizeSection({ serverGroup }: IServerGroupDetailsSectionProps): JSX.Element;
5
+ export declare function CloudrunServerGroupHealthSection({ serverGroup }: IServerGroupDetailsSectionProps): JSX.Element;
@@ -1,3 +1,5 @@
1
1
  export * from './configure/serverGroupCommandBuilder.service';
2
2
  export * from './serverGroupTransformer.service';
3
- export * from './details/details.controller';
3
+ export * from './details/CloudrunServerGroupActions';
4
+ export * from './details/cloudrunServerGroupDetailsGetter';
5
+ export * from './details/sections';
@@ -1,10 +1,7 @@
1
1
  import type { IServerGroup } from '@spinnaker/core';
2
2
  import type { ICloudrunServerGroupCommand } from '../serverGroup/configure/serverGroupCommandBuilder.service';
3
3
  export declare class CloudrunV2ServerGroupTransformer {
4
- private $q;
5
- static $inject: string[];
6
- constructor($q: ng.IQService);
7
- normalizeServerGroup(serverGroup: IServerGroup): PromiseLike<IServerGroup>;
4
+ normalizeServerGroup(serverGroup: IServerGroup): Promise<IServerGroup>;
8
5
  convertServerGroupCommandToDeployConfiguration(command: ICloudrunServerGroupCommand): any;
9
6
  }
10
7
  export declare class CloudrunDeployDescription {
@@ -28,4 +25,3 @@ export declare class CloudrunDeployDescription {
28
25
  sourceType: string;
29
26
  constructor(command: ICloudrunServerGroupCommand);
30
27
  }
31
- export declare const CLOUDRUN_SERVER_GROUP_TRANSFORMER = "spinnaker.cloudrun.serverGroup.transformer.service";
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "url": "https://github.com/spinnaker/spinnaker.git"
6
6
  },
7
7
  "license": "Apache-2.0",
8
- "version": "2026.2.3",
8
+ "version": "2026.3.0",
9
9
  "module": "dist/index.js",
10
10
  "typings": "dist/index.d.ts",
11
11
  "publishConfig": {
@@ -22,30 +22,23 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@spinnaker/core": "^0.29.1",
25
- "@uirouter/angularjs": "1.0.26",
26
25
  "@uirouter/react": "1.0.7",
27
- "angular": "1.8.3",
28
- "angular-ui-bootstrap": "2.5.0",
29
26
  "brace": "0.11.1",
30
27
  "dompurify": "^3.0.0",
31
28
  "enzyme": "3.11.0",
32
29
  "formik": "1.5.1",
33
- "js-yaml": "3.13.1",
30
+ "js-yaml": "4.1.1",
34
31
  "lodash": "4.18.1",
35
32
  "luxon": "1.28.1",
36
- "ngimport": "0.6.1",
37
33
  "react": "16.14.0",
38
34
  "react-ace": "6.4.0",
39
35
  "react-bootstrap": "0.32.1",
40
36
  "react-select": "1.2.1",
41
- "react2angular": "3.2.1",
42
37
  "rxjs": "6.6.7"
43
38
  },
44
39
  "devDependencies": {
45
40
  "@spinnaker/eslint-plugin": "^3.0.2",
46
41
  "@spinnaker/scripts": "^0.4.0",
47
- "@types/angular": "1.8.5",
48
- "@types/angular-ui-bootstrap": "0.13.41",
49
42
  "@types/dompurify": "^2.3.3",
50
43
  "@types/enzyme": "3.10.3",
51
44
  "@types/js-yaml": "3.5.30",
@@ -55,7 +48,7 @@
55
48
  "@types/react-bootstrap": "0.32.5",
56
49
  "@types/react-select": "1.3.4",
57
50
  "shx": "0.3.3",
58
- "typescript": "4.3.5"
51
+ "typescript": "5.0.4"
59
52
  },
60
- "gitHead": "a4e60ac0d767ffea0a41057a8bd9b0df110dfaa4"
53
+ "gitHead": "0f7d75f5d4b42c1675e2ecc69a53f8eb73090eb9"
61
54
  }
@@ -0,0 +1,22 @@
1
+ import { CloudProviderRegistry } from '@spinnaker/core';
2
+
3
+ import './index';
4
+ import { CloudrunLoadBalancerTransformer } from './loadBalancer/loadBalancerTransformer';
5
+ import { CloudrunV2ServerGroupCommandBuilder } from './serverGroup/configure/serverGroupCommandBuilder.service';
6
+ import { CloudrunV2ServerGroupTransformer } from './serverGroup/serverGroupTransformer.service';
7
+
8
+ describe('Cloud Run provider registration', () => {
9
+ it('registers the provider configuration', () => {
10
+ expect(CloudProviderRegistry.getValue('cloudrun', 'instance.details')).toBeDefined();
11
+ expect(CloudProviderRegistry.getValue('cloudrun', 'serverGroup.commandBuilder')).toBe(
12
+ CloudrunV2ServerGroupCommandBuilder,
13
+ );
14
+ expect(CloudProviderRegistry.getValue('cloudrun', 'serverGroup.transformer')).toBe(
15
+ CloudrunV2ServerGroupTransformer,
16
+ );
17
+ expect(CloudProviderRegistry.getValue('cloudrun', 'loadBalancer.transformer')).toBe(
18
+ CloudrunLoadBalancerTransformer,
19
+ );
20
+ expect(CloudProviderRegistry.getValue('cloudrun', 'loadBalancer.CreateLoadBalancerModal')).toBeDefined();
21
+ });
22
+ });
@@ -1,73 +1,68 @@
1
- import { module } from 'angular';
2
-
3
1
  import { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';
4
2
 
5
- import { CLOUDRUN_COMPONENT_URL_DETAILS } from './common/componentUrlDetails.component';
6
- import { CLOUDRUN_LOAD_BALANCER_CREATE_MESSAGE } from './common/loadBalancerMessage.component';
7
3
  import './help/cloudrun.help';
8
- import { CLOUDRUN_INSTANCE_DETAILS_CTRL } from './instance/details/details.controller';
9
- import { CLOUDRUN_ALLOCATION_CONFIGURATION_ROW } from './loadBalancer/configure/wizard/allocationConfigurationRow.component';
10
- import { CLOUDRUN_LOAD_BALANCER_BASIC_SETTINGS } from './loadBalancer/configure/wizard/basicSettings.component';
11
- import { CLOUDRUN_STAGE_ALLOCATION_CONFIGURATION_ROW } from './loadBalancer/configure/wizard/stageAllocationConfigurationRow.component';
12
- import { CLOUDRUN_LOAD_BALANCER_WIZARD_CTRL } from './loadBalancer/configure/wizard/wizard.controller';
13
- import { CLOUDRUN_LOAD_BALANCER_DETAILS_CTRL } from './loadBalancer/details/details.controller';
14
- import { CLOUDRUN_LOAD_BALANCER_TRANSFORMER } from './loadBalancer/loadBalancerTransformer';
4
+ import { CloudrunInstanceDetails } from './instance/details/CloudrunInstanceDetails';
5
+ import { CloudrunLoadBalancerModal } from './loadBalancer/configure/wizard/CloudrunLoadBalancerModal';
6
+ import { CloudrunLoadBalancerActions } from './loadBalancer/details/CloudrunLoadBalancerActions';
7
+ import {
8
+ CloudrunLoadBalancerDetailsSection,
9
+ CloudrunLoadBalancerDnsSection,
10
+ CloudrunLoadBalancerStatusSection,
11
+ CloudrunLoadBalancerTrafficSplitSection,
12
+ } from './loadBalancer/details/sections';
13
+ import { useCloudrunLoadBalancerDetails } from './loadBalancer/details/useCloudrunLoadBalancerDetails';
14
+ import { CloudrunLoadBalancerTransformer } from './loadBalancer/loadBalancerTransformer';
15
15
  import logo from './logo/cloudrun.logo.png';
16
- import { CLOUDRUN_PIPELINE_MODULE } from './pipeline/pipeline.module';
17
16
  import './pipeline/stages/deployManifest/deployStage';
18
- import { CLOUDRUN_SERVER_GROUP_COMMAND_BUILDER } from './serverGroup/configure/serverGroupCommandBuilder.service';
17
+ import './pipeline/stages/editLoadBalancer/cloudrunEditLoadBalancerStage';
18
+ import { CloudrunV2ServerGroupCommandBuilder } from './serverGroup/configure/serverGroupCommandBuilder.service';
19
19
  import { ServerGroupWizard } from './serverGroup/configure/wizard/serverGroupWizard';
20
- import { CLOUDRUN_SERVER_GROUP_DETAILS_CTRL } from './serverGroup/details/details.controller';
21
- import { CLOUDRUN_SERVER_GROUP_TRANSFORMER } from './serverGroup/serverGroupTransformer.service';
20
+ import { CloudrunServerGroupActions } from './serverGroup/details/CloudrunServerGroupActions';
21
+ import { cloudrunServerGroupDetailsGetter } from './serverGroup/details/cloudrunServerGroupDetailsGetter';
22
+ import {
23
+ CloudrunServerGroupHealthSection,
24
+ CloudrunServerGroupInformationSection,
25
+ CloudrunServerGroupSizeSection,
26
+ } from './serverGroup/details/sections';
27
+ import { CloudrunV2ServerGroupTransformer } from './serverGroup/serverGroupTransformer.service';
22
28
 
23
29
  import './logo/cloudrun.logo.less';
24
30
 
25
- export const CLOUDRUN_MODULE = 'spinnaker.cloudrun';
26
-
27
- const requires = [
28
- CLOUDRUN_COMPONENT_URL_DETAILS,
29
- CLOUDRUN_SERVER_GROUP_COMMAND_BUILDER,
30
- CLOUDRUN_SERVER_GROUP_DETAILS_CTRL,
31
- CLOUDRUN_SERVER_GROUP_TRANSFORMER,
32
- CLOUDRUN_LOAD_BALANCER_TRANSFORMER,
33
- CLOUDRUN_LOAD_BALANCER_DETAILS_CTRL,
34
- CLOUDRUN_LOAD_BALANCER_WIZARD_CTRL,
35
- CLOUDRUN_LOAD_BALANCER_CREATE_MESSAGE,
36
- CLOUDRUN_ALLOCATION_CONFIGURATION_ROW,
37
- CLOUDRUN_LOAD_BALANCER_BASIC_SETTINGS,
38
- CLOUDRUN_STAGE_ALLOCATION_CONFIGURATION_ROW,
39
- CLOUDRUN_PIPELINE_MODULE,
40
- CLOUDRUN_INSTANCE_DETAILS_CTRL,
41
- ];
42
-
43
- module(CLOUDRUN_MODULE, requires).config(() => {
44
- CloudProviderRegistry.registerProvider('cloudrun', {
45
- name: 'cloudrun',
46
- logo: {
47
- path: logo,
48
- },
31
+ CloudProviderRegistry.registerProvider('cloudrun', {
32
+ name: 'cloudrun',
33
+ logo: {
34
+ path: logo,
35
+ },
49
36
 
50
- instance: {
51
- detailsTemplateUrl: require('./instance/details/details.html'),
52
- detailsController: 'cloudrunInstanceDetailsCtrl',
53
- },
54
- serverGroup: {
55
- CloneServerGroupModal: ServerGroupWizard,
56
- commandBuilder: 'cloudrunV2ServerGroupCommandBuilder',
57
- detailsController: 'cloudrunV2ServerGroupDetailsCtrl',
58
- detailsTemplateUrl: require('./serverGroup/details/details.html'),
59
- transformer: 'cloudrunV2ServerGroupTransformer',
60
- skipUpstreamStageCheck: true,
61
- },
37
+ instance: {
38
+ details: CloudrunInstanceDetails,
39
+ },
40
+ serverGroup: {
41
+ CloneServerGroupModal: ServerGroupWizard,
42
+ commandBuilder: CloudrunV2ServerGroupCommandBuilder,
43
+ detailsActions: CloudrunServerGroupActions,
44
+ detailsGetter: cloudrunServerGroupDetailsGetter,
45
+ detailsSections: [
46
+ CloudrunServerGroupInformationSection,
47
+ CloudrunServerGroupSizeSection,
48
+ CloudrunServerGroupHealthSection,
49
+ ],
50
+ transformer: CloudrunV2ServerGroupTransformer,
51
+ skipUpstreamStageCheck: true,
52
+ },
62
53
 
63
- loadBalancer: {
64
- transformer: 'cloudrunLoadBalancerTransformer',
65
- createLoadBalancerTemplateUrl: require('./loadBalancer/configure/wizard/wizard.html'),
66
- createLoadBalancerController: 'cloudrunLoadBalancerWizardCtrl',
67
- detailsTemplateUrl: require('./loadBalancer/details/details.html'),
68
- detailsController: 'cloudrunLoadBalancerDetailsCtrl',
69
- },
70
- });
54
+ loadBalancer: {
55
+ transformer: CloudrunLoadBalancerTransformer,
56
+ CreateLoadBalancerModal: CloudrunLoadBalancerModal,
57
+ useDetailsHook: useCloudrunLoadBalancerDetails,
58
+ detailsActions: CloudrunLoadBalancerActions,
59
+ detailsSections: [
60
+ CloudrunLoadBalancerDetailsSection,
61
+ CloudrunLoadBalancerStatusSection,
62
+ CloudrunLoadBalancerTrafficSplitSection,
63
+ CloudrunLoadBalancerDnsSection,
64
+ ],
65
+ },
71
66
  });
72
67
 
73
68
  DeploymentStrategyRegistry.registerProvider('cloudrun', ['custom', 'redblack', 'rollingpush', 'rollingredblack']);
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+
3
+ import { CopyToClipboard } from '@spinnaker/core';
4
+
5
+ export function ComponentUrlDetails({ component }: { component: { url?: string; httpsUrl?: string } }) {
6
+ if (!component?.url) {
7
+ return null;
8
+ }
9
+
10
+ return (
11
+ <>
12
+ <dt>HTTPS</dt>
13
+ <dd className="small">
14
+ <a href={component.url} target="_blank" rel="noopener noreferrer">
15
+ {component.url}
16
+ </a>
17
+ <CopyToClipboard
18
+ className="copy-to-clipboard copy-to-clipboard-sm"
19
+ toolTip="Copy URL to clipboard"
20
+ text={component.httpsUrl || component.url}
21
+ />
22
+ </dd>
23
+ </>
24
+ );
25
+ }
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+
3
+ export function LoadBalancerMessage({ showCreateMessage = false }: { showCreateMessage?: boolean }) {
4
+ return (
5
+ <div className="row">
6
+ <div className="col-md-offset-1 col-md-10">
7
+ <div className="well">
8
+ <p>
9
+ {showCreateMessage && <span>Spinnaker cannot create a load balancer for Cloud Run. </span>}A Spinnaker load
10
+ balancer maps to an Cloud Run Service, which will be created automatically alongside a Revision. Once
11
+ created, the Service can be edited as a Load Balancer.
12
+ </p>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ );
17
+ }
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
- export * from './cloudrun.module';
1
+ import './cloudrun.module';
2
+
2
3
  export * from './serverGroup';
3
4
  export * from './loadBalancer';