// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import React from 'react'; import type { IExecutionDetailsSectionProps, IFormikStageConfigInjectedProps, IStage, IStageConfigProps, IStageTypeConfig, } from '@spinnaker/core'; import { ExecutionDetailsSection, ExecutionDetailsTasks, FormikStageConfig, FormValidator, HelpContentsRegistry, StageFailureMessage, } from '@spinnaker/core'; import { InvokeLambdaFunctionStageForm } from './InvokeLambdaFunctionStageForm'; import { awsArnValidator } from '../../../aws.validators'; export function InvokeLambdaExecutionDetails(props: IExecutionDetailsSectionProps) { const { stage } = props; return (

Function Name: {stage.outputs.functionName ? stage.outputs.functionName : 'N/A'}

{' '} Deployed Alias:{' '} {stage.outputs['deployment:aliasDeployed'] ? stage.outputs['deployment:aliasDeployed'] : 'N/A'}{' '}

{' '} Deployed Major Version:{' '} {stage.outputs['deployment:majorVersionDeployed'] ? stage.outputs['deployment:majorVersionDeployed'] : 'N/A'}{' '}

); } /* IStageConfigProps defines properties passed to all Spinnaker Stages. See IStageConfigProps.ts (https://github.com/spinnaker/deck/blob/master/app/scripts/modules/core/src/pipeline/config/stages/common/IStageConfigProps.ts) for a complete list of properties. Pass a JSON object to the `updateStageField` method to add the `account` to the Stage. This method returns JSX (https://reactjs.org/docs/introducing-jsx.html) that gets displayed in the Spinnaker UI. */ function InvokeLambdaConfig(props: IStageConfigProps) { return (
} />
); } /* This is a contrived example of how to use an `initialize` function to hook into arbitrary Deck services. This `initialize` function provides the help field text for the `LambdaDeploymentConfig` stage form defined above. You can hook into any service exported by the `@spinnaker/core` NPM module, e.g.: - CloudProviderRegistry - DeploymentStrategyRegistry When you use a registry, you are diving into Deck's implementation to add functionality. These registries and their methods may change without warning. */ export const initialize = () => { HelpContentsRegistry.register('aws.lambdaDeploymentStage.lambda', 'Lambda Name'); }; function validate(stageConfig: IStage) { const validator = new FormValidator(stageConfig); validator .field('triggerArns', 'Trigger ARNs') .optional() .withValidators((value: any, _: string) => { const tmp: any[] = value.map((arn: string) => { return awsArnValidator(arn, arn); }); const ret: boolean = tmp.every((el) => el === undefined); return ret ? undefined : 'Invalid ARN. Event ARN must match regular expression: /^arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./'; }); return validator.validateForm(); } // eslint-disable-next-line export namespace InvokeLambdaExecutionDetails { export const title = 'Invoke Lambda Stage'; } /* Define Spinnaker Stages with IStageTypeConfig. Required options: https://github.com/spinnaker/deck/master/app/scripts/modules/core/src/domain/IStageTypeConfig.ts - label -> The name of the Stage - description -> Long form that describes what the Stage actually does - key -> A unique name for the Stage in the UI; ties to Orca backend - component -> The rendered React component - validateFn -> A validation function for the stage config form. */ export const lambdaInvokeStage: IStageTypeConfig = { key: 'Aws.LambdaInvokeStage', label: `AWS Lambda Invoke`, description: 'Invoke a Lambda function', component: InvokeLambdaConfig, // stage config executionDetailsSections: [InvokeLambdaExecutionDetails, ExecutionDetailsTasks], validateFn: validate, };