Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(codebuild): add support of organization webhook in github source #31740

Merged
merged 29 commits into from
Oct 28, 2024

Conversation

dviryamin
Copy link
Contributor

@dviryamin dviryamin commented Oct 12, 2024

Issue # (if applicable)

closes #31736

Reason for this change

Currently, the AWS CDK aws-codebuild module lacks native support for creating GitHub organization-level webhooks through the Source construct. Users need to manually use the CfnProject to enable organization webhooks, which adds complexity and inconsistency to the CodeBuild setup. This PR introduces support for creating GitHub organization webhooks directly within the Source construct, streamlining the experience and making it more consistent with the rest of the AWS CDK's high-level constructs.

Description of changes

  • Enhanced the GitHubSource construct in the aws-codebuild module to support GitHub organization webhooks.
  • Updated the GitHubSource construct's configuration to so when repo is not specified an organization webhook is created.
  • Added filter of REPOSITORY_NAME to FilterGroups.

Description of how you validated changes

  • Added unit tests to validate that organization-level webhooks are created correctly when repo is not specified.
  • Ran integration tests to ensure that the changes do not break any existing functionality related to project webhooks.
  • Tested deployment of a CodeBuild project with organization webhook setup in a sample CDK application to verify end-to-end functionality.

Checklist


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license

@aws-cdk-automation aws-cdk-automation requested a review from a team October 12, 2024 17:54
@github-actions github-actions bot added effort/medium Medium work item – several days of effort feature-request A feature should be added or improved. p2 beginning-contributor [Pilot] contributed between 0-2 PRs to the CDK labels Oct 12, 2024
Copy link
Collaborator

@aws-cdk-automation aws-cdk-automation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pull request linter has failed. See the aws-cdk-automation comment below for failure reasons. If you believe this pull request should receive an exemption, please comment and provide a justification.

A comment requesting an exemption should contain the text Exemption Request. Additionally, if clarification is needed add Clarification Request to a comment.

@dviryamin dviryamin changed the title feat(codebuild): Add support of organization webhook in github source feat(codebuild): add support of organization webhook in github source Oct 12, 2024
@aws-cdk-automation aws-cdk-automation added the pr/reviewer-clarification-requested The contributor has requested clarification on feedback, a failing build, or a failing PR Linter run label Oct 12, 2024
@dviryamin dviryamin marked this pull request as ready for review October 12, 2024 20:40
@aws-cdk-automation aws-cdk-automation removed the pr/reviewer-clarification-requested The contributor has requested clarification on feedback, a failing build, or a failing PR Linter run label Oct 12, 2024
@aws-cdk-automation aws-cdk-automation dismissed their stale review October 16, 2024 12:13

✅ Updated pull request passes all PRLinter validations. Dismissing previous PRLinter review.

@aws-cdk-automation aws-cdk-automation added the pr/needs-community-review This PR needs a review from a Trusted Community Member or Core Team Member. label Oct 16, 2024
@shivatalwar
Copy link

This is great - any blockers on getting this merged

@GavinZZ
Copy link
Contributor

GavinZZ commented Oct 24, 2024

@dviryamin do you need any help with the failed integ test?

@GavinZZ GavinZZ self-requested a review October 24, 2024 21:46
@dviryamin
Copy link
Contributor Author

Hi @GavinZZ,
Thank you for offering to help! I’ve updated the integration test snapshot with the new default image, so the tests should pass now. I’d really appreciate it if you could take a moment to review the PR when you have time. Looking forward to your feedback!

Copy link
Contributor

@GavinZZ GavinZZ left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left some questions and feedback. Mainly for my own understanding.

? {
...superConfig.buildTriggers,
scopeConfiguration: {
name: this.organization,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not too familiar with organization webhook with github source, but I'm reading this official documentation https://docs.aws.amazon.com/codebuild/latest/userguide/github-global-organization-webhook-setup.html.

Hopefully you can help answer my clarifying questions to help me review this PR. In the above link step 2, it mentions set the scope configuration to either GITHUB_ORGANIZATION or GITHUB_GLOBAL, but step 3 says use the organization name as scope.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Step 2 it's a toggle between GitHub Global (for enterprise level webhooks) and GitHub Organization (for organization webhooks).
In step 3 you specify the Enterprise name or the Organization name depending on what you choose in step 2.
Anyway, cloudformation only supports Organization webhooks as mentioned here.

codebuild.FilterGroup.inEventOf(
codebuild.EventAction.WORKFLOW_JOB_QUEUED,
)
.andRepositoryNameIs('aws-cdk.*')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume this refers to repository name, is this saying a repository name that

  1. starts with aws-cdk. or (if this is the case, I assume no repo is named like this and is this just for demo purpose showing how to use regex)?
  2. starts with aws-cdk and .* is regex saying one or more at the end

Copy link
Contributor Author

@dviryamin dviryamin Oct 26, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It means repository name that starts with aws-cdk and can have more characters after that.
.* means zero or more characters.
If you have a better example for demonstrating usage of regex pattern it will be great.

Comment on lines 195 to 206
Template.fromStack(stack).hasResourceProperties('AWS::CodeBuild::Project', {
Source: {
Type: 'GITHUB',
Location: 'CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION',
},
Triggers: {
ScopeConfiguration: {
Name: 'testowner',
},
},
});
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we also test webhookFilter here since webhook filter's logic also changes if it's organization github source.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I'll add tests for FilterGroups.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!

@aws-cdk-automation aws-cdk-automation removed pr/needs-community-review This PR needs a review from a Trusted Community Member or Core Team Member. labels Oct 25, 2024
@mergify mergify bot dismissed GavinZZ’s stale review October 26, 2024 21:42

Pull request has been modified.

@aws-cdk-automation aws-cdk-automation added the pr/needs-community-review This PR needs a review from a Trusted Community Member or Core Team Member. label Oct 26, 2024
Copy link
Contributor

mergify bot commented Oct 28, 2024

Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork).

@aws-cdk-automation aws-cdk-automation removed the pr/needs-community-review This PR needs a review from a Trusted Community Member or Core Team Member. label Oct 28, 2024
@aws-cdk-automation
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: AutoBuildv2Project1C6BFA3F-wQm2hXv2jqQv
  • Commit ID: 12d9825
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@mergify mergify bot merged commit 8c15b5f into aws:main Oct 28, 2024
12 checks passed
Copy link
Contributor

mergify bot commented Oct 28, 2024

Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork).

Copy link

Comments on closed issues and PRs are hard for our team to see.
If you need help, please open a new issue that references this one.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Oct 28, 2024
@dviryamin dviryamin deleted the organization-webhook branch October 28, 2024 17:54
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
beginning-contributor [Pilot] contributed between 0-2 PRs to the CDK effort/medium Medium work item – several days of effort feature-request A feature should be added or improved. p2
Projects
None yet
Development

Successfully merging this pull request may close these issues.

aws_codebuild: REPOSITORY_NAME/WORKFLOW_NAME webhook filters and webhook scope configuration
4 participants