in src/lambda_codebase/initial_commit/bootstrap_repository/adf-build/shared/cdk/cdk_constructs/adf_codebuild.py [0:0]
def __init__(self, scope: core.Construct, id: str, shared_modules_bucket: str, deployment_region_kms: str, map_params: dict, target, **kwargs): #pylint: disable=W0622
super().__init__(scope, id, **kwargs)
stack = core.Stack.of(self)
ADF_DEFAULT_BUILD_ROLE = f'arn:{stack.partition}:iam::{ADF_DEPLOYMENT_ACCOUNT_ID}:role/adf-codebuild-role'
ADF_DEFAULT_BUILD_TIMEOUT = 20
# if CodeBuild is being used as a deployment action we want to allow target specific values.
if target:
_role_name = target.get('properties', {}).get('role')
_build_role = f'arn:{stack.partition}:iam::{ADF_DEPLOYMENT_ACCOUNT_ID}:role/{_role_name}' if _role_name else ADF_DEFAULT_BUILD_ROLE
_timeout = target.get('properties', {}).get('timeout') or map_params['default_providers']['deploy'].get('properties', {}).get('timeout') or ADF_DEFAULT_BUILD_TIMEOUT
_env = _codebuild.BuildEnvironment(
build_image=CodeBuild.determine_build_image(scope, target, map_params),
compute_type=target.get(
'properties', {}).get(
'size') or getattr(
_codebuild.ComputeType, map_params['default_providers']['build'].get(
'properties', {}).get(
'size', "SMALL").upper()),
environment_variables=CodeBuild.generate_build_env_variables(_codebuild, shared_modules_bucket, map_params, target),
privileged=target.get('properties', {}).get('privileged', False) or map_params['default_providers']['build'].get('properties', {}).get('privileged', False)
)
build_spec = CodeBuild.determine_build_spec(
id,
map_params['default_providers']['deploy'].get('properties', {}),
target,
)
_codebuild.PipelineProject(
self,
'project',
environment=_env,
encryption_key=_kms.Key.from_key_arn(self, 'default_deployment_account_key', key_arn=deployment_region_kms),
description=f"ADF CodeBuild Project for {id}",
project_name=f"adf-deploy-{id}",
timeout=core.Duration.minutes(_timeout),
role=_iam.Role.from_role_arn(self, 'build_role', role_arn=_build_role, mutable=False),
build_spec=build_spec,
)
self.deploy = Action(
name=id,
provider="CodeBuild",
category="Build",
project_name=f"adf-deploy-{id}",
run_order=1,
target=target,
map_params=map_params,
action_name=id,
).config
else:
_role_name = map_params['default_providers']['build'].get(
'properties', {}).get('role')
_build_role = f'arn:{stack.partition}:iam::{ADF_DEPLOYMENT_ACCOUNT_ID}:role/{_role_name}' if _role_name else ADF_DEFAULT_BUILD_ROLE
_timeout = map_params['default_providers']['build'].get('properties', {}).get('timeout') or ADF_DEFAULT_BUILD_TIMEOUT
_env = _codebuild.BuildEnvironment(
build_image=CodeBuild.determine_build_image(scope, target, map_params),
compute_type=getattr(_codebuild.ComputeType, map_params['default_providers']['build'].get('properties', {}).get('size', "SMALL").upper()),
environment_variables=CodeBuild.generate_build_env_variables(_codebuild, shared_modules_bucket, map_params),
privileged=map_params['default_providers']['build'].get('properties', {}).get('privileged', False)
)
if _role_name:
ADF_DEFAULT_BUILD_ROLE = f'arn:{stack.partition}:iam::{ADF_DEPLOYMENT_ACCOUNT_ID}:role/{_role_name}'
build_spec = CodeBuild.determine_build_spec(
id,
map_params['default_providers']['build'].get('properties', {})
)
_codebuild.PipelineProject(
self,
'project',
environment=_env,
encryption_key=_kms.Key.from_key_arn(self, 'DefaultDeploymentAccountKey', key_arn=deployment_region_kms),
description=f"ADF CodeBuild Project for {map_params['name']}",
project_name=f"adf-build-{map_params['name']}",
timeout=core.Duration.minutes(_timeout),
build_spec=build_spec,
role=_iam.Role.from_role_arn(self, 'default_build_role', role_arn=_build_role, mutable=False)
)
self.build = _codepipeline.CfnPipeline.StageDeclarationProperty(
name="Build",
actions=[
Action(
name="Build",
provider="CodeBuild",
category="Build",
run_order=1,
map_params=map_params,
action_name="build"
).config
]
)