diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index e18384a93..5c47008f8 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -1,64 +1,249 @@ --- -title: hledger development +title: hledger developers' guide --- -# hledger development +# Developers' guide -**Support** for users and developers: +A rough guide for hledger contributors of all kinds, plus some quick links for everyone. -- chat Simon (sm) on the - [\#ledger](irc://irc.freenode.net/#ledger) irc channel which we - share, or [email me](mailto:simon@joyful.com?subject=hledger:) -- [report](http://code.google.com/p/hledger/issues/entry) - problems at [bugs.hledger.org](http://bugs.hledger.org) - ([view all](http://bugs.hledger.org/grid)) -- share and test journal snippets at paste . hledger.org --
- join the hledger mail list at list.hledger.org. Your email: - -
+ -**Goals:** the hledger project aims to produce +## Quick links -- a practical, accessible, dependable tool for end users -- a useful library and toolbox for finance-minded haskell programmers -- a successful, time-and-money-solvent project within a thriving ecosystem of financial software projects. - -**Code:** - ->`darcs get --lazy http://joyful.com/repos/hledger` ->`cd hledger` ->`make` or `make install` - -- [browse the repo](http://joyful.com/darcsweb/darcsweb.cgi?r=hledger), - [release notes](NEWS.html), - [developer notes](http://joyful.com/darcsweb/darcsweb.cgi?r=hledger;a=plainblob;f=/NOTES) -- [api docs](http://hledger.org/api-doc), [internal code docs](http://hledger.org/code-doc) for all packages -- [hledger](http://hackage.haskell.org/package/hledger), +- User and developer support: [how to get help](#how-to-get-help) +- IRC channel: [irc://irc.freenode.net/#ledger](irc://irc.freenode.net/#ledger) +- Mail list: [http://list.hledger.org](http://list.hledger.org) +- Bug tracker: [http://bugs.hledger.org](http://bugs.hledger.org) +- [Release notes](NEWS.html) +- Code: + [get it](#how-to-set-up-for-hledger-development), + [browse it](http://joyful.com/darcsweb/darcsweb.cgi?r=hledger), + [api docs](http://hledger.org/api-doc), + [internal code docs](http://hledger.org/code-doc) for all packages +- Packages: + [hledger](http://hackage.haskell.org/package/hledger), [hledger-lib](http://hackage.haskell.org/package/hledger-lib), [hledger-chart](http://hackage.haskell.org/package/hledger-chart), [hledger-vty](http://hackage.haskell.org/package/hledger-vty), [hledger-web](http://hackage.haskell.org/package/hledger-web) - packages -- [hledger](http://packdeps.haskellers.com/feed/?needle=hledger), - [hledger-lib](http://packdeps.haskellers.com/feed/?needle=hledger-lib), - [hledger-chart](http://packdeps.haskellers.com/feed/?needle=hledger-chart), - [hledger-vty](http://packdeps.haskellers.com/feed/?needle=hledger-vty), - [hledger-web](http://packdeps.haskellers.com/feed/?needle=hledger-web) - dependency reports -- [test coverage](http://hledger.org/profs/coverage/hpc_index_fun.html), +- Developer reports: + [unit test coverage](http://hledger.org/profs/coverage/hpc_index_fun.html), [benchmark](http://hledger.org/profs/latest.bench), [profile](http://hledger.org/profs/latest.prof), [heap](http://hledger.org/profs/latest.ps) - reports +- [Developer notes](http://joyful.com/darcsweb/darcsweb.cgi?r=hledger;a=plainblob;f=/NOTES) + + + + + - - +## How to.. -**Related projects** +### how to get help -- John Wiegley's [ledger](http://wiki.github.com/jwiegley/ledger) inspired hledger. -- h/ledger inspired Uwe Hollerbach's [umm](http://www.korgwal.com/umm/). -- Tim Docker's [ledger-reports](http://dockerz.net/repos/ledger-reports) builds on hledger to generate - [html reports](http://dockerz.net/software/hledger_report_sample/report.html). -- I have a few older bits and pieces [here](http://joyful.com/Ledger). +-
+ join and use the [hledger mail list](http://list.hledger.org). Your email: + +
+- chat Simon (sm) on the + [\#ledger](irc://irc.freenode.net/#ledger) irc channel which we + share, or [send email](mailto:simon@joyful.com?subject=hledger:) +- for issues relevant to the wider *ledger community, you can also use or cc ledger's mail list + +### how to report problems + +- check for related issues at [bugs.hledger.org](http://bugs.hledger.org) ([view all](http://bugs.hledger.org/grid)) or in the [list archive](http://groups.google.com/group/hledger/topics) +- discuss/confirm the issue on irc or list +- [report](http://code.google.com/p/hledger/issues/entry) new issues in the bug tracker + + +### how to help with testing + +- review and test our documentation and web presence +- download and test the binaries on your platform +- test installing via cabal +- use the tools and test functionality, usability, browser compatibility, ui layout etc. +- check that `hledger test` reports no failures +- [run the developer tests](#how-to-run-the-tests) +- discuss/report problems via irc/mail list/bug tracker + +### how to help with bug tracking + +- get to know the bug tracker and its contents +- join its google project for more access +- research and update issues + +### how to set up for hledger development + +- install [darcs](http://darcs.net) if you don't have it (version 2) +- get the hledger repo: + + darcs get --lazy http://joyful.com/repos/hledger + cd hledger + +- install packages required to build hledger and add-ons, or as many of them as possible: + + cabal update + make install + + This will also try to cabal install the development version of the + hledger packages, so ghc-pkg unregister those afterwards if you don't + want that. + +- test patch sending. Make a dummy change: + + echo >>README.markdown; darcs record README.markdown -a -m 'my test patch' + + send it to yourself: + + darcs send --to me@my.address + + and make sure you receive it. If not, your system may not be + configured to send email from the command line. Try to fix that. As a + last resort, you can `darcs send -O` and mail the resulting patch file + to the list. Finally, clean up: + + darcs obliterate -p 'my test patch' + +### how to get your patch committed + +- [send it](#how-to-set-up-for-hledger-development) +- you should receive a reply shortly. If in doubt, [follow up](#how-to-get-help) at any time. +- respond to any code review feedback, submitting new patches if needed, until you receive a "patch applied" acknowledgement +- to verify the patch is in the main repo: listen for it on irc or look for it in darcsweb + +### how to improve the documentation + +- get familiar with the website and documentation online, review and test +- get familiar with the site/doc source files (see Makefile) +- set up for hledger development +- send patches with names prefixed with "doc: " (or "site: ") + +### how to run the tests + +- set up for hledger development +- cabal install shelltestrunner +- make test + +### how to add a test + +- identify what to test +- choose the test type: unit ? functional ? benchmark ? +- currently expected to pass or fail ? +- figure out where it goes +- write test, verify expected result +- get it committed + +### how to fix a bug or add a feature + +- research, discuss, validate the issue/feature on irc/list/bug tracker +- look for related tests, run the tests and check they are passing +- add a test ? +- develop a patch +- include any related issue numbers in the patch name, eg: "fix for blah blah (#NNN)" +- get it committed + +### how to become a contributor + +- after getting one or more patches committed, read and sign the [contributor list & agreement](CONTRIBUTORS.html) +- or, [ask](#how-to-get-help) to be added + +### how to do code review + +- watch for and read new patches on the mail list, irc, darcsweb patch feed, or [darcsweb patch log](http://joyful.com/darcsweb/darcsweb.cgi?r=hledger;a=shortlog) +- set up for development and test new patches in your own repo +- read the existing [code docs and source](#quick-links) +- send feedback or discuss via irc or list + +### how to help with packaging + +- package hledger for linux distros, macports, etc. +- develop mac/windows installers +- find and assist distro packagers/installer developers + +### how to help with project management + +- clarify/update goals and principles +- monitor, report on project progress and performance +- research, compare and report on successful projects, related projects +- identify collaboration opportunities +- marketing, communication, outreach +- release management, roadmap planning + +## Project notes + +This will grow into an overall description/blueprint for the hledger project. + +### mission, principles, goals + +The hledger project aims to produce: + +- a practical, accessible, dependable tool for end users +- a useful library and toolbox for finance-minded haskell programmers +- a successful, time-and-money-solvent project within a thriving ecosystem of financial software projects. + +### roles and activities + +- newcomer/potential user +- user +- library user +- field tester +- bug wrangler +- support +- documentor +- qa +- developer +- packager +- communicator +- project manager + +### documentation + +- website +- user manual +- developer guide +- code documentation: haddock +- various developer reports +- developer notes outline +- blurbs: in cabal files, module headers, google project, repo message of the day.. + +### quality assurance + +- unit tests (HUnit, make unittest) +- functional tests (shelltestrunner, make functest) +- performance tests (simplebench, make bench) +- documentation tests (make haddocktest + manual) +- ui tests (manual) +- installation tests (manual) + +### code + +- main darcs repo is http://joyful.com/repos/hledger, browse with [darcsweb](http://joyful.com/darcsweb/darcsweb.cgi?r=hledger) + + + + + + + + + + + + + + + + + +## Related projects + +- John Wiegley's [ledger](http://wiki.github.com/jwiegley/ledger) inspired hledger. +- [beancount](https://furius.ca/beancount/) is another ledger clone, in python +- h/ledger inspired Uwe Hollerbach's [umm](http://www.korgwal.com/umm/) +- Tim Docker's [ledger-reports](http://dockerz.net/repos/ledger-reports) builds on hledger to generate + [html reports](http://dockerz.net/software/hledger_report_sample/report.html) +- I have a few older bits and pieces [here](http://joyful.com/Ledger) + +