Skip to content
Matt Simerson edited this page Feb 18, 2016 · 27 revisions

We love and appreciate contributions to Haraka.

To contribute money

  1. Create an issue
  2. Use Bountysource to post a bounty on that issue

To contribute code, use the Github "Pull Request" mechanism

Overview

  1. fork, by clicking the Fork button on the GitHub Project Page
  2. checkout a copy
  3. create a branch
  4. make changes
  5. push changes to your fork
  6. submit Pull Request

Detailed Example

export GHUSERNAME=CHANGE_THIS
git clone https://github.com/$GHUSERNAME/Haraka.git
cd Haraka
git checkout -b new_branch
$EDITOR server.js
git add server.js
git commit
git push origin new_branch

The git commit step(s) will launch you into $EDITOR where the first line should be a summary of the change(s) in less than 50 characters. Additional paragraphs can be added starting on line 3.

To submit new_branch as a Pull Request, visit the Haraka project page where your recently pushed branches will appear with a green "Pull Request" button.

Rebase

On branches with more than a couple commits, it's usually best to squash the commits (condense them into one) before submitting the change(s) as a PR. Notable exceptions to the single commit guideline are:

  • where there are multiple logical changes, put each in a commit (easier to review and revert)
  • whitespace changes belong in their own commit
  • no-op code refactoring is separate from functional changes

To rebase:

git remote add haraka https://github.com/haraka/Haraka.git
git remote update haraka
git rebase -i haraka/master

Change all but the first "pick" lines to "s" and save your changes. Your $EDITOR will then present you with all of the commit messages. Edit them and save. Then force push your branch:

git push -f

General Guidelines

  • New features must be documented
  • New features should include tests

Style conventions

  • 4 spaces for indentation (no tabs)
  • Semi-colons on the end of statements are preferred
  • Use underscores_to_separate_names (yes this goes against JS conventions - it's the way it has always been done)
  • Do not cuddle elses
  • Use whitespace between operators - we prefer if (foo > bar) over if(foo>bar)
  • Don't comment out lines of code, remove them as they will be in the revision history.
  • Use boolean true/false instead of numeric 0/1
  • Use one var for each declared variable
  • See Editor Settings

Tests

  • run all tests: ./run_tests (or "npm test")
  • run tests for a single plugin: ./run_tests tests/plugins/bounce.js

Install Guides

How To

Future Plans / TODO

  • Support RFC3464 in bounce messages
  • Decode Short URLs in data.uribl.js and test the destination URL instead
  • DKIM verifier

Additional Resources

Clone this wiki locally