How the services work
- A post-receive background job is submitted when someone pushes their commits to GitHub
- If the repository the commits belong to has any "Service Hooks" setup, the
job makes a request to
http://services-server/service_name/with the following data:
params[:payload]containing all of the commit data (the same data you get using the API)
params[:data]containing the service data (username, password, room, etc)
- Sinatra (github-services.rb) processes the request (twitters your data, says something in campfire, posts it to lighthouse, etc)
- Rinse and repeat
Steps to contributing
- Fork the project
Create a new file in /services/ called
service_name.rb, using the following template:
service :service_name do |data, payload| end
Vendor any external gems your code relies on, and make sure to include it in the requires at the top of github-services.rb
- Add documentation to
docs/service_name(refer to the others for guidance)
- Send a pull request from your fork to github/github-services
- Once it's accepted we'll add any new necessary data fields to the GitHub front-end so people can start using your addition.
Patches including tests are encouraged
A huge thanks goes out to our many contributors!
If your service name is two words, the filenames and service key should be underscored, with words separated by an underscore.
# GitHub # docs/git_hub # services/git_hub.rb service :git_hub do |data, payload| ... end
Running the server locally
- [sudo] gem install hpricot
- git clone git://github.com/github/github-services.git
- cd github-services
- Bugs in the code should be filed under the Issues tab
- Problems with the service hooks can be filed here
How to test your service
- Start the github-services Sinatra server with
ruby github-services.rb. By default, it runs on port 8080.
- Edit the docs/github_payload file as necessary to test your service. (Usually just editing the "data" values but leaving the "payload" alone.)
- Send the docs/github_payload file to your service by calling:
NOTE: The name of the service and your docs/ file matters. If your service is RunCodeRun, your service
and docs MUST be
run_code_run. Good luck!