This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
pxz-hos-client-cpp-module/support/aws-sdk-cpp-master/CI/trebuchet-release-pipeline/template.yml

1086 lines
42 KiB
YAML

# +---------------------------------------+
# | Trebuchet sends SNS message. |
# | The message contains an S3 presigned |
# | url to the models, release notes and |
# | release id updated with this release |
# +-------------------+-------------------+ +----------------------------------------+
# | | The PipelineExecutionNotification |
# +-------------------v-------------------+ | function will send message to Chime |
# | Lambda reads the message from SNS, | | room when |
# | put release notes, release id and | | 1. Failed at any stage |
# | the message itself into files and | | 2. Or succeeded at Source stage |
# | upload them in zip to Amazon S3 | | indicating the release started. |
# +-------------------+-------------------+ | 3. Or succeeded at Prod stage |
# | | indicating the release finished. |
# +-------------------v-------------------+ +----------------------------------------+
# | S3 triggers CodePipeline |
# +-------------------+-------------------+
# |
# +---------------------------v---------------------------+
# |================= CodePipeline Stages =================|
# +-------------------------------------------------------+
# | Generate service clients for the |
# | new and existing models. |
# +-------------------------------------------------------+ +----------------------------------------+
# | Build on Linux, MacOS, Windows, etc. | | The UpdateStatus Lambda talks to |
# | and invoke the UpdateStatus Lambda at | | 1. AWS CloudWatch and reports metrics |
# | the end of each if fails. | | The failure metrics triggers an alarm |
# +-----------------------------------------------------------> which cuts a sev2 ticket |
# | Run the integration tests | | 2. AWS SQS to report back to Trebuchet |
# | and invoke the UpdateStatus Lambda at | | 3. Chime Bot to mention all members |
# | the end of each if fails. | | when builds or tests failed |
# +-------------------------------------------------------+ +----------------------------------------+
# | Run bash scripts to do the following: |
# | 1. Bump the patch part of the version |
# | 2. Commit the changes to release-candidate branch |
# | 3. Tag the release candidate branch |
# | 4. Merge release-candidate to master |
# | 5. Push the changes to private repo |
# | 6. Push the changes to public repo |
# +-------------------------------------------------------+
# | Publish the documentation |
# +-------------------------------------------------------+
AWSTemplateFormatVersion: 2010-09-09
Parameters:
TrebuchetReleaseS3BucketName:
Type: String
Default: <TrebuchetReleaseS3BucketName>
Description: Bucket name used for Trebuchet release pipeline.
PipelineCacheS3BucketName:
Type: String
Default: <PipelineCacheS3BucketName>
Description: Name of the S3 Bucket used for pipeline cache.
PublicDocsS3BucketName:
Type: String
Default: <PublicDocsS3BucketName>
Description: Name of the S3 Bucket used to publish API docs.
BinaryReleaseS3BucketName:
Type: String
Default: <BinaryReleaseS3BucketName>
Description: Name of the S3 Bucket used to publish binaries.
TrebuchetReleaseMessageFilename:
Type: String
Default: <TrebuchetReleaseMessageFilename>
Description: A json file containing message received from Trebuchet.
TrebuchetReleaseIdFilename:
Type: String
Default: <TrebuchetReleaseIdFilename>
Description: A file containing release id received from Trebuchet.
TrebuchetReleaseNotesFilename:
Type: String
Default: <TrebuchetReleaseNotesFilename>
Description: A file containing release notes received from Trebuchet.
TrebuchetReleasePipelineSourceS3KeyName:
Type: String
Default: <TrebuchetReleasePipelineSourceS3KeyName>
Description: Key name of the S3 object, which will trigger the Trebuchet release pipeline.
TrebuchetReleasePipelineName:
Type: String
Default: <TrebuchetReleasePipelineName>
Description: Name of the staging build pipeline.
TrebuchetReleasePipelineRoleName:
Type: String
Default: <TrebuchetReleasePipelineRoleName>
Description: Name of the service role used by pipeline.
TrebuchetReleaseCodeBuildRoleName:
Type: String
Default: <TrebuchetReleaseCodeBuildRoleName>
Description: Name of the service role used by RegenerateCode CodeBuild project.
RegenerateCodeProjectName:
Type: String
Default: <RegenerateCodeProjectName>
Description: Name of the CodeBuild project, which will regenerate the code with new models.
LinuxGccBuildProjectName:
Type: String
Default: <LinuxGccBuildProjectName>
Description: Name of the CodeBuild project, which will build C++ SDK with Linux environment.
LinuxGccTestsProjectName:
Type: String
Default: <LinuxGccTestsProjectName>
Description: Name of the CodeBuild project, which will run integration tests with Linux environment.
LinuxGccImageName:
Type: String
Default: <LinuxGccImageName>
Description: Name of the image used in the CodeBuild Project to build SDK in Linux.
WindowsVS2015BuildProjectName:
Type: String
Default: <WindowsVS2015BuildProjectName>
Description: Name of the CodeBuild project, which will build C++ SDK with Visual Studio 2015.
WindowsVS2015TestsProjectName:
Type: String
Default: <WindowsVS2015TestsProjectName>
Description: Name of the CodeBuild project, which will run integration tests with Visual Studio 2015.
WindowsVS2015ImageName:
Type: String
Default: <WindowsVS2015ImageName>
Description: Name of the image used in the CodeBuild Project to build SDK in Linux.
WindowsVS2017BuildProjectName:
Type: String
Default: <WindowsVS2017BuildProjectName>
Description: Name of the CodeBuild project, which will build C++ SDK with Visual Studio 2017.
WindowsVS2017TestsProjectName:
Type: String
Default: <WindowsVS2017TestsProjectName>
Description: Name of the CodeBuild project, which will run integration tests with Visual Studio 2017.
WindowsVS2017ImageName:
Type: String
Default: <WindowsVS2017ImageName>
Description: Name of the image used in the CodeBuild Project to build SDK in Linux.
MacosxClangBuildProjectName:
Type: String
Default: <MacosxClangBuildProjectName>
Description: Name of the Jenkins job, which will build C++ SDK on MacOSX.
MacosxClangTestsProjectName:
Type: String
Default: <MacosxClangTestsProjectName>
Description: Name of the CodeBuild project, which will will run integration tests on MacOSX.
PushToGithubProjectName:
Type: String
Default: <PushToGithubProjectName>
Description: Name of the CodeBuild project, which will push code to Github.
PublishAPIDocsProjectName:
Type: String
Default: <PublishAPIDocsProjectName>
Description: Name of the CodeBuild project, which will publish API docs.
JenkinsMacOSXProvider:
Type: String
Default: <JenkinsMacOSXProvider>
Description: Provider name of Jenkins used to build SDK on MacOSX.
JenkinsMacOSXProviderVersion:
Type: Number
Default: 1
Description: Version of the custom provider (Jenkins) used to build SDK on MacOSX.
HandleTrebuchetReleaseNotificationFunctionName:
Type: String
Default: <HandleTrebuchetReleaseNotificationFunctionName>
Description: Name of the Lambda function, used to handle messages received from Trebuchet.
HandleTrebuchetReleaseNotificationFunctionRoleName:
Type: String
Default: <HandleTrebuchetReleaseNotificationFunctionRoleName>
Description: Name of the execution role used by HandleTrebuchetReleaseNotification Lambda function.
UpdateStatusFunctionName:
Type: String
Default: <UpdateStatusFunctionName>
Description: Name of the Lambda function, used to update Trebuchet release status.
UpdateStatusFunctionRoleName:
Type: String
Default: <UpdateStatusFunctionRoleName>
Description: Name of the execution role used by UpdateStatus Lambda function.
PipelineExecutionNotificationFunctionName:
Type: String
Default: <PipelineExecutionNotificationFunctionName>
Description: Name of the lambda function, used to send notifications about pipeline execution status.
PipelineExecutionNotificationFunctionRoleName:
Type: String
Default: <PipelineExecutionNotificationFunctionRoleName>
Description: Name of the execution role used by PipelineExecutionNotification Lambda function.
PipelineExecutionCodeStarNotificationRuleName:
Type: String
Default: <PipelineExecutionCodeStarNotificationRuleName>
Description: Name of the CodeStar Notifications rule, used to define the behaviors when the pipeline execution fails or succeeds.
PipelineExecutionSNSTopicName:
Type: String
Default: <PipelineExecutionSNSTopicName>
Description: Topic name of the SNS associated with the CodeStar Notifications rule.
TrebuchetQueueUrl:
Type: String
Default: <TrebuchetQueueUrl>
Description: Url of the Trebuchet Queue to update staging build status.
TrebuchetSNSArn:
Type: String
Default: <TrebuchetSNSArn>
Description: Arn of the Trebuchet SNS topic, and our SQS should subscribe to this topic.
ChimeBotUrl:
Type: String
Default: <ChimeBotUrl>
Description: Url of the Chime Bot to send notifications.
ParameterStoreAwsAccessKeyId:
Type: String
Default: <ParameterStoreAwsAccessKeyId>
Description: Key name in Parameter Store, used for aws access key id.
ParameterStoreAwsSecretAccessKey:
Type: String
Default: <ParameterStoreAwsSecretAccessKey>
Description: Key name in Parameter Store, used for aws secret access key.
ParameterStoreGitUsername:
Type: String
Default: <ParameterStoreGitUsername>
Description: Key name in Parameter Store, used for Github username.
ParameterStoreGitPassword:
Type: String
Default: <ParameterStoreGitPassword>
Description: Key name in Parameter Store, used for Github password.
GithubPrivateRepository:
Type: String
Default: <GithubPrivateRepository>
Description: Github private repository name, for example "aws/aws-sdk-cpp".
GithubPublicRepository:
Type: String
Default: <GithubPublicRepository>
Description: Github public repository name, for example "aws/aws-sdk-cpp".
GitCommitAuthorName:
Type: String
Default: <GitCommitAuthorName>
Description: Author name when making a git commit.
GitCommitAuthorEmail:
Type: String
Default: <GitCommitAuthorEmail>
Description: Author email when making a git commit.
Mappings:
PipelineArtifacts:
StageSource:
TrebuchetRelease: trebuchet-release
StageRegenerateCode:
CppSdkGeneratedSource: aws-sdk-cpp
StageBuild:
LinuxBuild: linux_build
VS2015Build: vs2015_build
VS2017Build: vs2017_build
MacosxBuild: macosx_build
ScriptLocations:
CodeBuild:
RegenerateCode: aws-sdk-cpp/CI/trebuchet-release-pipeline/buildspec_regenerate_code.yml
LinuxBuild: aws-sdk-cpp/CI/trebuchet-release-pipeline/buildspec_linux_build.yml
LinuxTests: aws-sdk-cpp/CI/trebuchet-release-pipeline/buildspec_linux_tests.yml
VS2015Build: aws-sdk-cpp/CI/trebuchet-release-pipeline/buildspec_vs2015_build.yml
VS2017Build: aws-sdk-cpp/CI/trebuchet-release-pipeline/buildspec_vs2017_build.yml
WindowsTests: aws-sdk-cpp/CI/trebuchet-release-pipeline/buildspec_windows_tests.yml
PushToGithub: aws-sdk-cpp/CI/trebuchet-release-pipeline/buildspec_push_to_github.yml
PublishAPIDocs: aws-sdk-cpp/CI/trebuchet-release-pipeline/buildspec_publish_api_docs.yml
Lambda:
HandleTrebuchetReleaseNotificationFunction: lambda/HandleTrebuchetReleaseNotification.zip
UpdateStatusFunction: lambda/UpdateTrebuchetReleaseStatus.zip
PipelineExecutionNotificationFunction: lambda/PipelineExecutionNotification.zip
Scripts:
CodeBuildBuildSpec:
RegenerateCode: |
# This buildspec is source controlled, whenever you make any change in the AWS console, you should update it to Github.
version: 0.2
phases:
build:
commands:
- echo $CODEBUILD_SOURCE_VERSION
- git clone https://${GIT_USERNAME}:${GIT_PASSWORD}@github.com/${GITHUB_PRIVATE_REPOSITORY}.git aws-sdk-cpp
- export RELEASE_ID=$(cat $RELEASE_ID_FILENAME)
- python3 aws-sdk-cpp/CI/trebuchet-release-pipeline/UpdateStatus.py -s RegenerateCode -i "$RELEASE_ID" -m "Step 1 of 4. Regenerating Code with New Models." -b $CODEBUILD_BUILD_SUCCEEDING
- cp models/*.normal.json aws-sdk-cpp/code-generation/api-descriptions/
- cd aws-sdk-cpp
- mkdir build
- cd build
- cmake .. -DREGENERATE_CLIENTS=ON
- cd ..
- rm -rf build
post_build:
commands:
- cd $CODEBUILD_SRC_DIR
- export BUILD_JOB_NAME=$(echo "${CODEBUILD_BUILD_ID}" | cut -f1 -d ":")
- export BUILD_URL="https://${AWS_REGION}.console.aws.amazon.com/codesuite/codebuild/projects/${BUILD_JOB_NAME}/build/${CODEBUILD_BUILD_ID}"
- |
if [ "${CODEBUILD_BUILD_SUCCEEDING}" = "1" ]; then
python3 aws-sdk-cpp/CI/trebuchet-release-pipeline/UpdateStatus.py -s RegenerateCode -e "[BUILD SUCCESS](${BUILD_URL}) (${CODEBUILD_BUILD_ID})" -i $RELEASE_ID -m "Step 1 of 4. Regenerated Code with New Models." -b $CODEBUILD_BUILD_SUCCEEDING;
else
python3 aws-sdk-cpp/CI/trebuchet-release-pipeline/UpdateStatus.py -s RegenerateCode -e "[BUILD FAILURE](${BUILD_URL}) (${CODEBUILD_BUILD_ID})" -i $RELEASE_ID -m "Step 1 of 4. Code Generation with New Models Failed. A technician has already been notified." -b $CODEBUILD_BUILD_SUCCEEDING;
fi
artifacts:
files:
- "**/*"
Resources:
TrebuchetReleasePipelineRole:
Type: 'AWS::IAM::Role'
Properties:
RoleName: !Ref TrebuchetReleasePipelineRoleName
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- codepipeline.amazonaws.com
Action:
- 'sts:AssumeRole'
Path: /
HandleTrebuchetReleaseNotificationFunctionRole:
Type: 'AWS::IAM::Role'
Properties:
RoleName: !Ref HandleTrebuchetReleaseNotificationFunctionRoleName
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
- edgelambda.amazonaws.com
Action:
- 'sts:AssumeRole'
Path: /
UpdateStatusFunctionRole:
Type: 'AWS::IAM::Role'
Properties:
RoleName: !Ref UpdateStatusFunctionRoleName
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
- edgelambda.amazonaws.com
Action:
- 'sts:AssumeRole'
Path: /
PipelineExecutionNotificationFunctionRole:
Type: 'AWS::IAM::Role'
Properties:
RoleName: !Ref PipelineExecutionNotificationFunctionRoleName
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
- edgelambda.amazonaws.com
Action:
- 'sts:AssumeRole'
Path: /
TrebuchetReleaseCodeBuildRole:
Type: 'AWS::IAM::Role'
Properties:
RoleName: !Ref TrebuchetReleaseCodeBuildRoleName
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- codebuild.amazonaws.com
Action:
- 'sts:AssumeRole'
Path: /
TrebuchetReleaseS3Policy:
Type: 'AWS::IAM::Policy'
Properties:
PolicyName: TrebuchetReleaseS3Policy
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action:
- 's3:PutObject'
- 's3:GetObject'
- 's3:GetObjectVersion'
- 's3:GetBucketVersioning'
Resource:
- !Join
- ''
- - 'arn:aws:s3:::'
- !Ref TrebuchetReleaseS3BucketName
- '*'
- !Join
- ''
- - 'arn:aws:s3:::'
- !Ref PipelineCacheS3BucketName
- '*'
- !Join
- ''
- - 'arn:aws:s3:::'
- !Ref PublicDocsS3BucketName
- '*'
Roles:
- !Ref TrebuchetReleasePipelineRole
- !Ref HandleTrebuchetReleaseNotificationFunctionRole
- !Ref TrebuchetReleaseCodeBuildRole
TrebuchetReleaseSQSPolicy:
Type: 'AWS::IAM::Policy'
Properties:
PolicyName: TrebuchetReleaseSQSPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action:
- 'sqs:SendMessage'
- 'sqs:ReceiveMessage'
- 'sqs:DeleteMessage'
- 'sqs:GetQueueAttributes'
Resource: '*'
Roles:
- !Ref UpdateStatusFunctionRole
TrebuchetReleaseCodeBuildPolicy:
Type: 'AWS::IAM::Policy'
Properties:
PolicyName: TrebuchetReleaseCodeBuildPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action: 'codebuild:*'
Resource: '*'
Roles:
- !Ref TrebuchetReleasePipelineRole
TrebuchetReleaseLambdaPolicy:
Type: 'AWS::IAM::Policy'
Properties:
PolicyName: TrebuchetReleaseLambdaPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action: 'lambda:InvokeFunction'
Resource: '*'
Roles:
- !Ref HandleTrebuchetReleaseNotificationFunctionRole
- !Ref TrebuchetReleaseCodeBuildRole
TrebuchetReleaseCloudWatchLogsPolicy:
Type: 'AWS::IAM::Policy'
Properties:
PolicyName: TrebuchetReleaseCloudWatchLogsPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action:
- 'logs:CreateLogGroup'
- 'logs:CreateLogStream'
- 'logs:PutLogEvents'
Resource: '*'
Roles:
- !Ref TrebuchetReleasePipelineRole
- !Ref HandleTrebuchetReleaseNotificationFunctionRole
- !Ref UpdateStatusFunctionRole
- !Ref PipelineExecutionNotificationFunctionRole
- !Ref TrebuchetReleaseCodeBuildRole
TrebuchetReleaseCloudWatchMetricsPolicy:
Type: 'AWS::IAM::Policy'
Properties:
PolicyName: TrebuchetReleaseCloudWatchMetricsPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action:
- 'cloudwatch:PutMetricData'
Resource: '*'
Roles:
- !Ref UpdateStatusFunctionRole
TrebuchetReleaseSSMPolicy:
Type: 'AWS::IAM::Policy'
Properties:
PolicyName: TrebuchetReleaseSSMPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action: 'ssm:GetParameters'
Resource: "*"
Roles:
- !Ref TrebuchetReleaseCodeBuildRole
HandleTrebuchetReleaseNotificationFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Ref HandleTrebuchetReleaseNotificationFunctionName
Handler: lambda_handle_trebuchet_release_notification.lambda_handler
Role: !GetAtt HandleTrebuchetReleaseNotificationFunctionRole.Arn
Runtime: python3.6
ReservedConcurrentExecutions: 1
Timeout: 300
Code:
S3Bucket: !Ref TrebuchetReleaseS3BucketName
S3Key: !FindInMap [ScriptLocations, Lambda, HandleTrebuchetReleaseNotificationFunction]
Environment:
Variables:
S3_BUCKET_NAME: !Ref TrebuchetReleaseS3BucketName
RELEASE_MESSAGE_FILENAME: !Ref TrebuchetReleaseMessageFilename
RELEASE_ID_FILENAME: !Ref TrebuchetReleaseIdFilename
RELEASE_NOTES_FILENAME: !Ref TrebuchetReleaseNotesFilename
PIPELINE_SOURCE: !Ref TrebuchetReleasePipelineSourceS3KeyName
UPDATE_STATUS_LAMBDA_FUNCTION_NAME: !Ref UpdateStatusFunctionName
UpdateStatusFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Ref UpdateStatusFunctionName
Handler: lambda_update_trebuchet_release_status.lambda_handler
Role: !GetAtt UpdateStatusFunctionRole.Arn
Runtime: python3.6
Code:
S3Bucket: !Ref TrebuchetReleaseS3BucketName
S3Key: !FindInMap [ScriptLocations, Lambda, UpdateStatusFunction]
Environment:
Variables:
TREBUCHET_QUEUE_URL: !Ref TrebuchetQueueUrl
CHIME_BOT_URL: !Ref ChimeBotUrl
PipelineExecutionNotificationFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Ref PipelineExecutionNotificationFunctionName
Handler: lambda_pipeline_execution_notification.lambda_handler
Role: !GetAtt PipelineExecutionNotificationFunctionRole.Arn
Runtime: python3.6
Code:
S3Bucket: !Ref TrebuchetReleaseS3BucketName
S3Key: !FindInMap [ScriptLocations, Lambda, PipelineExecutionNotificationFunction]
Environment:
Variables:
CHIME_BOT_URL: !Ref ChimeBotUrl
TREBUCHET_RELEASE_PIPELINE_NAME: !Ref TrebuchetReleasePipelineName
SOURCE_STAGE_NAME: Source
PROD_STAGE_NAME: Prod
TrebuchetReleaseBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref TrebuchetReleaseS3BucketName
VersioningConfiguration:
Status: Enabled
CodePipelineCacheBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref PipelineCacheS3BucketName
VersioningConfiguration:
Status: Enabled
PipelineExecutionSNSTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: !Ref PipelineExecutionSNSTopicName
Subscription:
- Protocol: lambda
Endpoint: !GetAtt PipelineExecutionNotificationFunction.Arn
TopicPolicy:
Type: AWS::SNS::TopicPolicy
Properties:
Topics:
- !Ref PipelineExecutionSNSTopic
PolicyDocument:
Version: '2012-10-17'
Statement:
-
Sid: AllCodeStar
Effect: Allow
Action: 'SNS:Publish'
Principal:
Service: 'codestar-notifications.amazonaws.com'
Resource: !Ref PipelineExecutionSNSTopic
PipelineExecutionCodeStarNotificationRule:
Type: AWS::CodeStarNotifications::NotificationRule
Properties:
Name: !Ref PipelineExecutionCodeStarNotificationRuleName
DetailType: FULL
Resource: !Sub 'arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${TrebuchetReleasePipeline}'
EventTypeIds:
- codepipeline-pipeline-stage-execution-failed
- codepipeline-pipeline-stage-execution-succeeded
Targets:
- TargetType: SNS
TargetAddress: !Ref PipelineExecutionSNSTopic
RegenerateCodeProject:
Type: AWS::CodeBuild::Project
Properties:
Name: !Ref RegenerateCodeProjectName
ServiceRole: !Ref TrebuchetReleaseCodeBuildRole
Source:
Type: CODEPIPELINE
BuildSpec: !FindInMap [Scripts, CodeBuildBuildSpec, RegenerateCode]
Artifacts:
Type: CODEPIPELINE
Environment:
Type: LINUX_CONTAINER
ComputeType: BUILD_GENERAL1_LARGE
Image: !Ref LinuxGccImageName
EnvironmentVariables:
- Name: S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseS3BucketName
- Name: RELEASE_ID_FILENAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseIdFilename
- Name: UPDATE_STATUS_LAMBDA_FUNCTION_NAME
Type: PLAINTEXT
Value: !Ref UpdateStatusFunctionName
- Name: AWS_ACCESS_KEY_ID
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsAccessKeyId
- Name: AWS_SECRET_ACCESS_KEY
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsSecretAccessKey
- Name: GITHUB_PRIVATE_REPOSITORY
Type: PLAINTEXT
Value: !Ref GithubPrivateRepository
- Name: GIT_USERNAME
Type: PARAMETER_STORE
Value: !Ref ParameterStoreGitUsername
- Name: GIT_PASSWORD
Type: PARAMETER_STORE
Value: !Ref ParameterStoreGitPassword
TimeoutInMinutes: 60
LinuxGccBuildProject:
Type: AWS::CodeBuild::Project
Properties:
Name: !Ref LinuxGccBuildProjectName
ServiceRole: !Ref TrebuchetReleaseCodeBuildRole
Source:
Type: CODEPIPELINE
BuildSpec: !FindInMap [ScriptLocations, CodeBuild, LinuxBuild]
Artifacts:
Type: CODEPIPELINE
Environment:
Type: LINUX_CONTAINER
ComputeType: BUILD_GENERAL1_LARGE
Image: !Ref LinuxGccImageName
PrivilegedMode: true
EnvironmentVariables:
- Name: S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseS3BucketName
- Name: RELEASE_ID_FILENAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseIdFilename
- Name: UPDATE_STATUS_LAMBDA_FUNCTION_NAME
Type: PLAINTEXT
Value: !Ref UpdateStatusFunctionName
- Name: AWS_ACCESS_KEY_ID
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsAccessKeyId
- Name: AWS_SECRET_ACCESS_KEY
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsSecretAccessKey
TimeoutInMinutes: 60
LinuxGccTestsProject:
Type: AWS::CodeBuild::Project
Properties:
Name: !Ref LinuxGccTestsProjectName
ServiceRole: !Ref TrebuchetReleaseCodeBuildRole
Source:
Type: CODEPIPELINE
BuildSpec: !FindInMap [ScriptLocations, CodeBuild, LinuxTests]
Artifacts:
Type: CODEPIPELINE
Environment:
Type: LINUX_CONTAINER
ComputeType: BUILD_GENERAL1_LARGE
Image: !Ref LinuxGccImageName
PrivilegedMode: true
EnvironmentVariables:
- Name: S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseS3BucketName
- Name: RELEASE_ID_FILENAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseIdFilename
- Name: UPDATE_STATUS_LAMBDA_FUNCTION_NAME
Type: PLAINTEXT
Value: !Ref UpdateStatusFunctionName
- Name: AWS_ACCESS_KEY_ID
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsAccessKeyId
- Name: AWS_SECRET_ACCESS_KEY
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsSecretAccessKey
TimeoutInMinutes: 60
WindowsVS2015BuildProject:
Type: AWS::CodeBuild::Project
Properties:
Name: !Ref WindowsVS2015BuildProjectName
ServiceRole: !Ref TrebuchetReleaseCodeBuildRole
Source:
Type: CODEPIPELINE
BuildSpec: !FindInMap [ScriptLocations, CodeBuild, VS2015Build]
Artifacts:
Type: CODEPIPELINE
Environment:
Type: WINDOWS_CONTAINER
ComputeType: BUILD_GENERAL1_LARGE
Image: !Ref WindowsVS2015ImageName
EnvironmentVariables:
- Name: S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseS3BucketName
- Name: RELEASE_ID_FILENAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseIdFilename
- Name: UPDATE_STATUS_LAMBDA_FUNCTION_NAME
Type: PLAINTEXT
Value: !Ref UpdateStatusFunctionName
- Name: AWS_ACCESS_KEY_ID
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsAccessKeyId
- Name: AWS_SECRET_ACCESS_KEY
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsSecretAccessKey
TimeoutInMinutes: 60
WindowsVS2015TestsProject:
Type: AWS::CodeBuild::Project
Properties:
Name: !Ref WindowsVS2015TestsProjectName
ServiceRole: !Ref TrebuchetReleaseCodeBuildRole
Source:
Type: CODEPIPELINE
BuildSpec: !FindInMap [ScriptLocations, CodeBuild, WindowsTests]
Artifacts:
Type: CODEPIPELINE
Environment:
Type: WINDOWS_CONTAINER
ComputeType: BUILD_GENERAL1_LARGE
Image: !Ref WindowsVS2015ImageName
EnvironmentVariables:
- Name: S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseS3BucketName
- Name: RELEASE_ID_FILENAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseIdFilename
- Name: UPDATE_STATUS_LAMBDA_FUNCTION_NAME
Type: PLAINTEXT
Value: !Ref UpdateStatusFunctionName
- Name: AWS_ACCESS_KEY_ID
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsAccessKeyId
- Name: AWS_SECRET_ACCESS_KEY
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsSecretAccessKey
TimeoutInMinutes: 60
WindowsVS2017BuildProject:
Type: AWS::CodeBuild::Project
Properties:
Name: !Ref WindowsVS2017BuildProjectName
ServiceRole: !Ref TrebuchetReleaseCodeBuildRole
Source:
Type: CODEPIPELINE
BuildSpec: !FindInMap [ScriptLocations, CodeBuild, VS2017Build]
Artifacts:
Type: CODEPIPELINE
Environment:
Type: WINDOWS_CONTAINER
ComputeType: BUILD_GENERAL1_LARGE
Image: !Ref WindowsVS2017ImageName
EnvironmentVariables:
- Name: S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseS3BucketName
- Name: RELEASE_ID_FILENAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseIdFilename
- Name: UPDATE_STATUS_LAMBDA_FUNCTION_NAME
Type: PLAINTEXT
Value: !Ref UpdateStatusFunctionName
- Name: AWS_ACCESS_KEY_ID
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsAccessKeyId
- Name: AWS_SECRET_ACCESS_KEY
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsSecretAccessKey
TimeoutInMinutes: 60
WindowsVS2017TestsProject:
Type: AWS::CodeBuild::Project
Properties:
Name: !Ref WindowsVS2017TestsProjectName
ServiceRole: !Ref TrebuchetReleaseCodeBuildRole
Source:
Type: CODEPIPELINE
BuildSpec: !FindInMap [ScriptLocations, CodeBuild, WindowsTests]
Artifacts:
Type: CODEPIPELINE
Environment:
Type: WINDOWS_CONTAINER
ComputeType: BUILD_GENERAL1_LARGE
Image: !Ref WindowsVS2017ImageName
EnvironmentVariables:
- Name: S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseS3BucketName
- Name: RELEASE_ID_FILENAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseIdFilename
- Name: UPDATE_STATUS_LAMBDA_FUNCTION_NAME
Type: PLAINTEXT
Value: !Ref UpdateStatusFunctionName
- Name: AWS_ACCESS_KEY_ID
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsAccessKeyId
- Name: AWS_SECRET_ACCESS_KEY
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsSecretAccessKey
TimeoutInMinutes: 60
PushToGithubProject:
Type: AWS::CodeBuild::Project
Properties:
Name: !Ref PushToGithubProjectName
ServiceRole: !Ref TrebuchetReleaseCodeBuildRole
Source:
Type: CODEPIPELINE
BuildSpec: !FindInMap [ScriptLocations, CodeBuild, PushToGithub]
Artifacts:
Type: CODEPIPELINE
Environment:
Type: LINUX_CONTAINER
ComputeType: BUILD_GENERAL1_LARGE
Image: !Ref LinuxGccImageName
EnvironmentVariables:
- Name: S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseS3BucketName
- Name: RELEASE_ID_FILENAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseIdFilename
- Name: RELEASE_NOTES_FILENAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseNotesFilename
- Name: UPDATE_STATUS_LAMBDA_FUNCTION_NAME
Type: PLAINTEXT
Value: !Ref UpdateStatusFunctionName
- Name: AWS_ACCESS_KEY_ID
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsAccessKeyId
- Name: AWS_SECRET_ACCESS_KEY
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsSecretAccessKey
- Name: GITHUB_PRIVATE_REPOSITORY
Type: PLAINTEXT
Value: !Ref GithubPrivateRepository
- Name: GITHUB_PUBLIC_REPOSITORY
Type: PLAINTEXT
Value: !Ref GithubPublicRepository
- Name: GIT_USERNAME
Type: PARAMETER_STORE
Value: !Ref ParameterStoreGitUsername
- Name: GIT_PASSWORD
Type: PARAMETER_STORE
Value: !Ref ParameterStoreGitPassword
- Name: GIT_COMMIT_AUTHOR_NAME
Type: PLAINTEXT
Value: !Ref GitCommitAuthorName
- Name: GIT_COMMIT_AUTHOR_EMAIL
Type: PLAINTEXT
Value: !Ref GitCommitAuthorEmail
TimeoutInMinutes: 60
PublishAPIDocsProject:
Type: AWS::CodeBuild::Project
Properties:
Name: !Ref PublishAPIDocsProjectName
ServiceRole: !Ref TrebuchetReleaseCodeBuildRole
Source:
Type: CODEPIPELINE
BuildSpec: !FindInMap [ScriptLocations, CodeBuild, PublishAPIDocs]
Artifacts:
Type: CODEPIPELINE
Environment:
Type: LINUX_CONTAINER
ComputeType: BUILD_GENERAL1_LARGE
Image: !Ref LinuxGccImageName
EnvironmentVariables:
- Name: PIPELINE_S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseS3BucketName
- Name: DOCS_S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref PublicDocsS3BucketName
- Name: BINARY_S3_BUCKET_NAME
Type: PLAINTEXT
Value: !Ref BinaryReleaseS3BucketName
- Name: RELEASE_ID_FILENAME
Type: PLAINTEXT
Value: !Ref TrebuchetReleaseIdFilename
- Name: UPDATE_STATUS_LAMBDA_FUNCTION_NAME
Type: PLAINTEXT
Value: !Ref UpdateStatusFunctionName
- Name: AWS_ACCESS_KEY_ID
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsAccessKeyId
- Name: AWS_SECRET_ACCESS_KEY
Type: PARAMETER_STORE
Value: !Ref ParameterStoreAwsSecretAccessKey
- Name: GITHUB_PUBLIC_REPOSITORY
Type: PLAINTEXT
Value: !Ref GithubPublicRepository
- Name: GIT_USERNAME
Type: PARAMETER_STORE
Value: !Ref ParameterStoreGitUsername
- Name: GIT_PASSWORD
Type: PARAMETER_STORE
Value: !Ref ParameterStoreGitPassword
TimeoutInMinutes: 120
TrebuchetReleasePipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
Name: !Ref TrebuchetReleasePipelineName
RoleArn: !GetAtt TrebuchetReleasePipelineRole.Arn
Stages:
-
Name: Source
Actions:
-
Name: TrebuchetReleaseSource
ActionTypeId:
Category: Source
Owner: AWS
Version: 1
Provider: S3
Configuration:
PollForSourceChanges: true
S3Bucket: !Ref TrebuchetReleaseBucket
S3ObjectKey: !Ref TrebuchetReleasePipelineSourceS3KeyName
OutputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageSource, TrebuchetRelease]
RunOrder: 1
-
Name: RegenerateCode
Actions:
-
Name: RegenerateCodeWithNewModels
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
InputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageSource, TrebuchetRelease]
OutputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageRegenerateCode, CppSdkGeneratedSource]
Configuration:
ProjectName: !Ref RegenerateCodeProject
RunOrder: 1
-
Name: Build
Actions:
-
Name: LinuxGccBuild
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
InputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageRegenerateCode, CppSdkGeneratedSource]
OutputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageBuild, LinuxBuild]
Configuration:
ProjectName: !Ref LinuxGccBuildProject
RunOrder: 1
-
Name: WindowsVS2015Build
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
InputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageRegenerateCode, CppSdkGeneratedSource]
OutputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageBuild, VS2015Build]
Configuration:
ProjectName: !Ref WindowsVS2015BuildProject
RunOrder: 1
-
Name: WindowsVS2017Build
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
InputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageRegenerateCode, CppSdkGeneratedSource]
OutputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageBuild, VS2017Build]
Configuration:
ProjectName: !Ref WindowsVS2017BuildProject
RunOrder: 1
-
Name: MacosxClangBuild
ActionTypeId:
Category: Build
Owner: Custom
Provider: !Ref JenkinsMacOSXProvider
Version: !Ref JenkinsMacOSXProviderVersion
InputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageRegenerateCode, CppSdkGeneratedSource]
OutputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageBuild, MacosxBuild]
Configuration:
ProjectName: !Ref MacosxClangBuildProjectName
RunOrder: 1
-
Name: IntegrationTests
Actions:
-
Name: LinuxGccTests
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
InputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageBuild, LinuxBuild]
Configuration:
ProjectName: !Ref LinuxGccTestsProject
RunOrder: 1
-
Name: WindowsVS2017Tests
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
InputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageBuild, VS2017Build]
Configuration:
ProjectName: !Ref WindowsVS2017TestsProject
RunOrder: 1
-
Name: MacosxClangTests
ActionTypeId:
Category: Build
Owner: Custom
Provider: !Ref JenkinsMacOSXProvider
Version: !Ref JenkinsMacOSXProviderVersion
InputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageBuild, MacosxBuild]
OutputArtifacts:
- Name: macosx_tests
Configuration:
ProjectName: !Ref MacosxClangTestsProjectName
RunOrder: 1
-
Name: Prod
Actions:
-
Name: PushToGithub
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
InputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageRegenerateCode, CppSdkGeneratedSource]
Configuration:
ProjectName: !Ref PushToGithubProjectName
RunOrder: 1
-
Name: Docs
Actions:
-
Name: PublishAPIDocs
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
InputArtifacts:
- Name: !FindInMap [PipelineArtifacts, StageRegenerateCode, CppSdkGeneratedSource]
Configuration:
ProjectName: !Ref PublishAPIDocsProjectName
RunOrder: 1
ArtifactStore:
Type: S3
Location: !Ref CodePipelineCacheBucket