# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

AWSTemplateFormatVersion: '2010-09-09'
Description: "The CodeBuild Project for building and deploying lambda functions for API"
Parameters:
  Application:
    Description: Application Name
    Type: String
    Default:  drs-plan-automation
  StackName:
    Description: Stack Name
    Type: String
  env:
    Type: String

Resources:
  CodeBuildBuildAndDeployLambdaApi:
    Type: AWS::CodeBuild::Project
    Properties:
      Name:  !Sub "BuildAndDeployLambdaApi-${env}"
      Description: "Build and deploy DRS Plan Automation Lambda API"
      ServiceRole: !GetAtt CodeBuildBuildAndDeployLambdaApiExecutionRole.Arn
      Artifacts:
        Type: CODEPIPELINE
      EncryptionKey:
        Fn::ImportValue: "drs-kms-key-arn"
      Environment:
        Type: LINUX_CONTAINER
        ComputeType: BUILD_GENERAL1_SMALL
        Image: public.ecr.aws/sam/build-nodejs14.x
        EnvironmentVariables:
          - Name: drs_s3_bucket_name
            Value:
              Fn::ImportValue: "drs-s3-bucket-name"
          - Name: drs_plan_automation_lambda_api_stack_name
            Value: !Ref StackName
          - Name: env
            Value: !Ref env
      Source:
        Type: CODEPIPELINE
        BuildSpec: !Sub "cfn/codebuild/BuildAndDeployLambdaApi/buildspec-buildanddeploy-${env}.yml"
      TimeoutInMinutes: 10
      Tags:
        - Key: Application
          Value: !Ref Application

  CodeBuildBuildAndDeployLambdaApiExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      Path: /
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - "codebuild.amazonaws.com"
            Action: ['sts:AssumeRole']
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AdministratorAccess
      Policies:
        - PolicyName:   "TestTemplates-Policy"
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Action:
                  - 'kms:Encrypt'
                  - 'kms:Decrypt'
                  - 'kms:ReEncrypt*'
                  - 'kms:GenerateDataKey*'
                  - 'kms:DescribeKey'
                Resource:
                  Fn::ImportValue: "drs-kms-key-arn"
                Effect: Allow
      Tags:
        - Key: Application
          Value: !Ref Application