feat(aws-codecommit): use CloudWatch Events instead of polling by default in the CodePipeline Action#1026
Conversation
| outputArtifactName: props.outputArtifactName | ||
| }); | ||
|
|
||
| if (props.pollForSourceChanges !== true) { |
There was a problem hiding this comment.
Ideally you wouldn't want to codify the default multiple times in your code.
Since the default is false, I would just write this if (!props.pollForSourceChanges).
Alternatively, if you want to be more formal, create a local variable:
const pollForSourceChanges = props.pollForSourceChanges || false;And use it everywhere.
There was a problem hiding this comment.
We can't use a variable here, as the call to super must be the first statement in the constructor.
Will change to if (!props.pollForSourceChanges).
There was a problem hiding this comment.
That’s not correct. You can definitely use a variable :-)
There was a problem hiding this comment.
Can you write out the code for that? Cause I can't see it.
| }); | ||
|
|
||
| if (props.pollForSourceChanges !== true) { | ||
| props.repository.onCommit('CodePipeline', props.stage.pipelineAsEventTarget, props.branch || 'master'); |
There was a problem hiding this comment.
What happens if we want multiple pipelines to subscribe to the same repo? I think your ID should include the pipeline's .uniqueId or something.
There was a problem hiding this comment.
Good call. It's actually a miss on my part, as I meant to change this name to something else, but forgot. Will add the Pipeline's uniqueId.
| }); | ||
|
|
||
| if (props.pollForSourceChanges !== true) { | ||
| props.repository.onCommit('CodePipeline', props.stage.pipelineAsEventTarget, props.branch || 'master'); |
There was a problem hiding this comment.
Again, codify the default for branch once in your code:
const branch = props.branch || 'master';There was a problem hiding this comment.
Again, can't use a variable here (super call, yada yada yada). The only alternative is a function, and that seemed like overkill to me here, hence the duplication.
| return this.pipeline.role; | ||
| } | ||
|
|
||
| public get pipelineAsEventTarget(): events.IEventRuleTarget { |
There was a problem hiding this comment.
Why is this needed? The caller can just do stage.pipeline - it will also be much more readable at the call site.
There was a problem hiding this comment.
A caller cannot do stage.pipeline, because you cannot reference the codepipeline module from the codepipeline-api one (where the IStage interface lives).
| }); | ||
|
|
||
| if (props.pollForSourceChanges !== true) { | ||
| props.repository.onCommit('CodePipeline', props.stage.pipelineAsEventTarget, props.branch || 'master'); |
There was a problem hiding this comment.
Why not just stage.pipeline?
There was a problem hiding this comment.
See above - it would cause a circular dependency. The entire reason for breaking out the codepipeline-api module is because Actions cannot reference the codepipeline module, where the Pipeline type lives.
| pollForSourceChanges: true, | ||
| }); | ||
|
|
||
| /** Build! */ |
There was a problem hiding this comment.
Missing unit test for the default and setting to false
f207fe7 to
9232591
Compare
|
Updated with @eladb's feebdack. |
| throw new Error('Unsupported'); | ||
| } | ||
|
|
||
| public get pipelineUniqueId(): string { |
There was a problem hiding this comment.
I am wondering if perhaps it makes more sense to add cpapi.IPipeline and have Pipeline implement it. This is becoming quite messy, no?
There was a problem hiding this comment.
Agreed. Refactored in the newest revision.
9232591 to
9ac276b
Compare
| } | ||
|
|
||
| public grantBucketRead(identity?: iam.IPrincipal): void { | ||
| this.artifactBucket.grantRead(identity); |
There was a problem hiding this comment.
dependency-wise, would it make sense to just expose artifactBucket in IPipeline?
There was a problem hiding this comment.
Do you think I would bother with these methods, if I could just use artifactBucket here? 🙂
You can't expose artifactBucket in IPipeline, as that would be a circular dependency between the aws-codepipeline-api and aws-s3 modules.
9ac276b to
8ef8cd2
Compare
|
Latest round of changes after @eladb's comments. |
…ault in the CodePipeline Action. BREAKING CHANGE: this modifies the default behavior of the CodeCommit Action. It also changes the internal API contract between the aws-codepipeline-api module and the CodePipeline Actions in the service packages.
8ef8cd2 to
0185081
Compare
|
Noticed that there were actually existing unit tests for the CodeCommit's |
Bug Fixes ========= * **aws-autoscaling:** allow minSize to be set to 0 ([#1015](#1015)) ([67f7fa1](67f7fa1)) * **aws-codebuild:** correctly pass the timeout property to CFN when creating a Project. ([#1071](#1071)) ([b1322bb](b1322bb)) * **aws-codebuild:** correctly set S3 path when using it as artifact. ([#1072](#1072)) ([f32cba9](f32cba9)) * **aws-kms:** add output value when exporting an encryption key ([#1036](#1036)) ([cb490be](cb490be)) * Switch from `js-yaml` to `yaml` ([#1092](#1092)) ([0b132b5](0b132b5)) Features ========= * **applets:** integrate into toolkit ([#1039](#1039)) ([fdabe95](fdabe95)), closes [#849](#849) [#342](#342) [#291](#291) * **aws-codecommit:** use CloudWatch Events instead of polling by default in the CodePipeline Action. ([#1026](#1026)) ([d09d30c](d09d30c)) * **aws-dynamodb:** allow specifying partition/sort keys in props ([#1054](#1054)) ([ec87331](ec87331)), closes [#1051](#1051) * **aws-ec2:** AmazonLinuxImage supports AL2 ([#1081](#1081)) ([97b57a5](97b57a5)), closes [#1062](#1062) * **aws-lambda:** high level API for event sources ([#1063](#1063)) ([1be3442](1be3442)) * **aws-sqs:** improvements to IAM grants API ([#1052](#1052)) ([6f2475e](6f2475e)) * don't upload the same asset multiple times ([#1011](#1011)) ([35937b6](35937b6)), closes [#989](#989) * **codepipeline/cfn:** Use fewer statements for pipeline permissions ([#1009](#1009)) ([8f4c2ab](8f4c2ab)) * add a new construct library for ECS ([#1058](#1058)) ([ae03ddb](ae03ddb)) * **pkglint:** Make sure .snk files are ignored ([#1049](#1049)) ([53c8d76](53c8d76)), closes [#643](#643) * **toolkit:** deployment ui improvements ([#1067](#1067)) ([c832eaf](c832eaf)) BREAKING CHANGES ========= * The ec2.Connections object has been changed to be able to manage multiple security groups. The relevant property has been changed from `securityGroup` to `securityGroups` (an array of security group objects). * **aws-codecommit:** This modifies the default behavior of the CodeCommit Action. It also changes the internal API contract between the aws-codepipeline-api module and the CodePipeline Actions in the service packages. * **applets:** The applet schema has changed to allow Multiple applets can be define in one file by structuring the files like this: * **applets:** The applet schema has changed to allow definition of multiple applets in the same file. The schema now looks like this: applets: MyApplet: type: ./my-applet-file properties: property1: value ... By starting an applet specifier with npm://, applet modules can directly be referenced in NPM. You can include a version specifier (@1.2.3) to reference specific versions. * **aws-sqs:** `queue.grantReceiveMessages` has been removed. It is unlikely that this would be sufficient to interact with a queue. Alternatively you can use `queue.grantConsumeMessages` or `queue.grant('sqs:ReceiveMessage')` if there's a need to only grant this action.
Bug Fixes ======== * **aws-autoscaling:** allow minSize to be set to 0 ([#1015](#1015)) ([67f7fa1](67f7fa1)) * **aws-codebuild:** correctly pass the timeout property to CFN when creating a Project. ([#1071](#1071)) ([b1322bb](b1322bb)) * **aws-codebuild:** correctly set S3 path when using it as artifact. ([#1072](#1072)) ([f32cba9](f32cba9)) * **aws-kms:** add output value when exporting an encryption key ([#1036](#1036)) ([cb490be](cb490be)) * Switch from `js-yaml` to `yaml` ([#1092](#1092)) ([0b132b5](0b132b5)) Features ======== * don't upload the same asset multiple times ([#1011](#1011)) ([35937b6](35937b6)), closes [#989](#989) * **app-delivery:** CI/CD for CDK Stacks ([#1022](#1022)) ([f2fe4e9](f2fe4e9)) * add a new construct library for ECS ([#1058](#1058)) ([ae03ddb](ae03ddb)) * **applets:** integrate into toolkit ([#1039](#1039)) ([fdabe95](fdabe95)), closes [#849](#849) [#342](#342) [#291](#291) * **aws-codecommit:** use CloudWatch Events instead of polling by default in the CodePipeline Action. ([#1026](#1026)) ([d09d30c](d09d30c)) * **aws-dynamodb:** allow specifying partition/sort keys in props ([#1054](#1054)) ([ec87331](ec87331)), closes [#1051](#1051) * **aws-ec2:** AmazonLinuxImage supports AL2 ([#1081](#1081)) ([97b57a5](97b57a5)), closes [#1062](#1062) * **aws-lambda:** high level API for event sources ([#1063](#1063)) ([1be3442](1be3442)) * **aws-sqs:** improvements to IAM grants API ([#1052](#1052)) ([6f2475e](6f2475e)) * **codepipeline/cfn:** Use fewer statements for pipeline permissions ([#1009](#1009)) ([8f4c2ab](8f4c2ab)) * **pkglint:** Make sure .snk files are ignored ([#1049](#1049)) ([53c8d76](53c8d76)), closes [#643](#643) * **toolkit:** deployment ui improvements ([#1067](#1067)) ([c832eaf](c832eaf)) * Update to CloudFormation resource specification v2.11.0 BREAKING CHANGES ======== * The ec2.Connections object has been changed to be able to manage multiple security groups. The relevant property has been changed from `securityGroup` to `securityGroups` (an array of security group objects). * **aws-codecommit:** this modifies the default behavior of the CodeCommit Action. It also changes the internal API contract between the aws-codepipeline-api module and the CodePipeline Actions in the service packages. * **applets:** The applet schema has changed to allow Multiple applets can be define in one file by structuring the files like this: * **applets:** The applet schema has changed to allow definition of multiple applets in the same file. The schema now looks like this: applets: MyApplet: type: ./my-applet-file properties: property1: value ... By starting an applet specifier with npm://, applet modules can directly be referenced in NPM. You can include a version specifier (@1.2.3) to reference specific versions. * **aws-sqs:** `queue.grantReceiveMessages` has been removed. It is unlikely that this would be sufficient to interact with a queue. Alternatively you can use `queue.grantConsumeMessages` or `queue.grant('sqs:ReceiveMessage')` if there's a need to only grant this action.
Bug Fixes ======== * **aws-autoscaling:** allow minSize to be set to 0 ([#1015](#1015)) ([67f7fa1](67f7fa1)) * **aws-codebuild:** correctly pass the timeout property to CFN when creating a Project. ([#1071](#1071)) ([b1322bb](b1322bb)) * **aws-codebuild:** correctly set S3 path when using it as artifact. ([#1072](#1072)) ([f32cba9](f32cba9)) * **aws-kms:** add output value when exporting an encryption key ([#1036](#1036)) ([cb490be](cb490be)) * Switch from `js-yaml` to `yaml` ([#1092](#1092)) ([0b132b5](0b132b5)) Features ======== * don't upload the same asset multiple times ([#1011](#1011)) ([35937b6](35937b6)), closes [#989](#989) * **app-delivery:** CI/CD for CDK Stacks ([#1022](#1022)) ([f2fe4e9](f2fe4e9)) * add a new construct library for ECS ([#1058](#1058)) ([ae03ddb](ae03ddb)) * **applets:** integrate into toolkit ([#1039](#1039)) ([fdabe95](fdabe95)), closes [#849](#849) [#342](#342) [#291](#291) * **aws-codecommit:** use CloudWatch Events instead of polling by default in the CodePipeline Action. ([#1026](#1026)) ([d09d30c](d09d30c)) * **aws-dynamodb:** allow specifying partition/sort keys in props ([#1054](#1054)) ([ec87331](ec87331)), closes [#1051](#1051) * **aws-ec2:** AmazonLinuxImage supports AL2 ([#1081](#1081)) ([97b57a5](97b57a5)), closes [#1062](#1062) * **aws-lambda:** high level API for event sources ([#1063](#1063)) ([1be3442](1be3442)) * **aws-sqs:** improvements to IAM grants API ([#1052](#1052)) ([6f2475e](6f2475e)) * **codepipeline/cfn:** Use fewer statements for pipeline permissions ([#1009](#1009)) ([8f4c2ab](8f4c2ab)) * **pkglint:** Make sure .snk files are ignored ([#1049](#1049)) ([53c8d76](53c8d76)), closes [#643](#643) * **toolkit:** deployment ui improvements ([#1067](#1067)) ([c832eaf](c832eaf)) * Update to CloudFormation resource specification v2.11.0 BREAKING CHANGES ======== * The ec2.Connections object has been changed to be able to manage multiple security groups. The relevant property has been changed from `securityGroup` to `securityGroups` (an array of security group objects). * **aws-codecommit:** this modifies the default behavior of the CodeCommit Action. It also changes the internal API contract between the aws-codepipeline-api module and the CodePipeline Actions in the service packages. * **applets:** The applet schema has changed to allow Multiple applets can be define in one file by structuring the files like this: * **applets:** The applet schema has changed to allow definition of multiple applets in the same file. The schema now looks like this: applets: MyApplet: type: ./my-applet-file properties: property1: value ... By starting an applet specifier with npm://, applet modules can directly be referenced in NPM. You can include a version specifier (@1.2.3) to reference specific versions. * **aws-sqs:** `queue.grantReceiveMessages` has been removed. It is unlikely that this would be sufficient to interact with a queue. Alternatively you can use `queue.grantConsumeMessages` or `queue.grant('sqs:ReceiveMessage')` if there's a need to only grant this action.
This is the preferred way now by the CodePipeline team, so we should make it the default.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license.