# -*- coding: utf-8 -*-"""Allow user to quickly set up CodeCommit repo and CodeBuild project to usealong with aws_ci_bot solution. Now this module is not necessary, we can useCloudFormation to create them efficiently. But, I want to keep it here as areference."""importtypingasTimportdataclassesfromboto_session_managerimportBotoSesManagerdef_create_one_codecommit_repo(bsm:BotoSesManager,name:str,):""" Ref: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/codecommit.html#CodeCommit.Client.create_repository """returnbsm.codecommit_client.create_repository(repositoryName=name,)defcreate_codecommit_repos(bsm:BotoSesManager,repos:T.List[str],):forrepoinrepos:try:print(f"Create CodeCommit Repository {repo!r}")_create_one_codecommit_repo(bsm,repo)exceptExceptionase:iff"Repository named {repo} already exists"instr(e):print(f" already exists, skip")else:raiseedef_create_one_codebuild_project(bsm:BotoSesManager,repo:str,project:str,iam_role:str,):""" Ref: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/codebuild.html#CodeBuild.Client.create_project """bsm.codebuild_client.create_project(name=project,source=dict(type="CODECOMMIT",location=f"https://git-codecommit.{bsm.aws_region}.amazonaws.com/v1/repos/{repo}",),sourceVersion="refs/heads/main",environment=dict(type="LINUX_CONTAINER",image="aws/codebuild/amazonlinux2-x86_64-standard:3.0",computeType="BUILD_GENERAL1_MEDIUM",privilegedMode=True,),artifacts=dict(type="NO_ARTIFACTS",),serviceRole=iam_role,timeoutInMinutes=15,queuedTimeoutInMinutes=30,concurrentBuildLimit=20,)defcreate_codebuild_projects(bsm:BotoSesManager,repos:T.List[str],codebuild_iam_role:str,):forrepoinrepos:project=repotry:print(f"Create CodeBuild Project {project!r}")_create_one_codebuild_project(bsm,repo=repo,project=project,iam_role=codebuild_iam_role,)exceptExceptionase:iff"Project already exists"instr(e):print(f" already exists, skip")else:raisee