in packages/@aws-c2a/cdk-pipelines-step/lib/perform-change-analysis.ts [55:98]
public produceAction(stage: IStage, options: ProduceActionOptions): CodePipelineActionFactoryResult {
const { c2aDiffProject } = this.getOrCreateChangeAnalysis(options.pipeline);
const ruleset = this.props.ruleSet?.bind(options.pipeline);
const broadeningPermissions = this.props.broadeningPermissions ?? true;
this.props.ruleSet?.grantRead(c2aDiffProject);
this.props.notificationTopic?.grantPublish(c2aDiffProject);
const variablesNamespace = Node.of(this.props.stage).addr;
const approveActionName = `${options.actionName}.Confirm`;
stage.addAction(new cpa.CodeBuildAction({
runOrder: options.runOrder,
actionName: `${options.actionName}.Check`,
input: options.artifacts.toCodePipeline(options.pipeline.cloudAssemblyFileSet),
project: c2aDiffProject,
variablesNamespace,
environmentVariables: {
CODEPIPELINE_EXECUTION_ID: { value: '#{codepipeline.PipelineExecutionId}' },
STAGE_PATH: { value: Node.of(this.props.stage).path },
STAGE_NAME: { value: stage.stageName },
ACTION_NAME: { value: approveActionName },
...broadeningPermissions ? {
BROADENING_PERMISSIONS: { value: true },
} : {},
...ruleset ? {
BUCKET: { value: ruleset.bucketName },
RULE_SET: { value: ruleset.objectKey },
} : {},
...this.props.notificationTopic ? {
NOTIFICATION_ARN: { value: this.props.notificationTopic.topicArn },
NOTIFICATION_SUBJECT: { value: `Performed change analysis on ${this.props.stage.stageName}` },
} : {},
},
}));
stage.addAction(new cpa.ManualApprovalAction({
actionName: approveActionName,
runOrder: options.runOrder + 1,
additionalInformation: `#{${variablesNamespace}.MESSAGE}`,
externalEntityLink: `#{${variablesNamespace}.LINK}`,
}));
return { runOrdersConsumed: 2 };
}