Curry checks that committers in a GitHub Pull Request have signed Chef's CLA in Super Market.
The general goal of curry is to verify that committer(s) opening a pull request in a Chef Inc. repo have signed a CLA. If they have signed a CLA, Super Market will leave a comment letting Chef Inc. know that the user has signed a CLA. If they have not, Super Market will leave a comment letting Chef Inc. and the committer(s) know they have not signed a CLA, while instructing the committer(s) to sign a CLA. When the Pull Request is opened, a ticket is opened in the ticket tracking system being used (in Chef's case, JIRA).
Major parts of Curry include:
- Ability for Chef Admins to specify the repositories (and projects in corresponding ticket tracking system) that notify Super Market when a Pull Request was opened and updated. This let's GitHub know what repositories it should be the hub for when sending POSTs to Super Market via PubSubHubbub.
- Handling POSTs to the Super Market API end point from GitHub when a Pull Request is opened and updated.
- Commenting on Pull Requests based upon the committer(s) CLA verification status.
- Opening a ticket in the ticket tracking system with the information surrounding the Pull Request.
- If committer(s) had not signed a CLA when the Pull Request was opened but sign a CLA, Super Market will leave another comment in the Pull Request letting Chef Inc. know that a committer has signed a CLA (and what committers still need to sign a CLA).
- Super Market will subscribe to a GitHub repository Hub to receive POST requests at Super Market API end point when a Pull Request is created or updated in the GitHub repository. This will be using the PubSubHubbub protocol (Hubbub for short).
- There will be an interface for managing what GitHub repositories Super Market is subscribed to.
- Interfacing with JIRA (the current issue tracker) with the Jira Ruby gem to open issues when a Pull Request is opened on a subscribed repository.
- Leaving comments on subscribed GitHub repositories with the Octokit.rb gem.
- Use Sidekiq to process background jobs.
- Spec out and develop interface for managing GitHub repository subscriptions.
- Create API endpoint to receive Hubbub updates from the GitHub repository.
- Handle checking committers in the Pull Request to see if they have signed a CLA.
- Use Octokit to leave a comment on the Pull Request based upon their CLA signing status.
- Handle when committers have not signed a CLA but then sign a CLA.
- Use the JIRA Ruby gem to open an issue in the corresponding project.
One thing I think we should discuss with Chef:
Given that they are moving towards using LeanKit internally, it seems like JIRA is just an added layer of complexity in managing and tracking work to be done. I'm assuming Chef will be using the "Portfolio" version on LeanKit. If that's the case, then they support a really nice GitHub integration:
And since PRs also create GitHub issues, it seems like a Win/Win for reducing complexity and simplifying the workflow, not to mention reducing the barrier to entry and things for contributors to track.