public produceAction()

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 };
  }