doc: devguide: rewrite setup docs
This commit is contained in:
parent
62f0b879e5
commit
edd1d4268b
@ -77,14 +77,28 @@ libghc-hledger-lib-prof
|
|||||||
|
|
||||||
## How to..
|
## How to..
|
||||||
|
|
||||||
Here are some suggested procedures to help you quickly (re)engage
|
### Do user testing
|
||||||
with the project and get things done.
|
|
||||||
|
- review and critique our documentation and web presence
|
||||||
|
- test the procedures on [download](download) and on this page
|
||||||
|
- check that the hledger binaries run your platform, and `hledger test` reports no failures
|
||||||
|
- test the hledger tools' functionality, usability, browser compatibility, ui layout etc.
|
||||||
|
- discuss/report problems via irc/mail list/bug tracker
|
||||||
|
|
||||||
|
### Get help
|
||||||
|
|
||||||
|
- for quick help or if you're not sure about the problem,
|
||||||
|
you can ask on the [#hledger](http://irc.hledger.org) (irc.hledger.org) IRC channel
|
||||||
|
or the [mail list](http://list.hledger.org) (list.hledger.org).
|
||||||
|
If #hledger does not respond quickly, you can leave the window open and check back later, or leave your email address.
|
||||||
|
- check the open and closed issues in the [bug tracker](http://bugs.hledger.org) (bugs.hledger.org). Sometimes the problem has been fixed in git but not yet released.
|
||||||
|
|
||||||
|
<!-- - test and share problem journal snippets at paste . hledger.org -->
|
||||||
|
|
||||||
### Suggest enhancements
|
### Suggest enhancements
|
||||||
|
|
||||||
Suggestions and feature requests (aka wishes) are very welcome, but we
|
Suggestions and feature requests are welcome, but we don't want them to pile up in the issue tracker obscuring higher-priority tasks.
|
||||||
don't want them to pile up in the issue tracker obscuring bugs and
|
So consider these alternatives:
|
||||||
higher-priority tasks. So before opening a github issue, first consider:
|
|
||||||
|
|
||||||
1. The [#hledger](http://irc.hledger.org) (irc.hledger.org) IRC channel on freenode
|
1. The [#hledger](http://irc.hledger.org) (irc.hledger.org) IRC channel on freenode
|
||||||
and the [mail list](http://list.hledger.org) (list.hledger.org) are excellent places for discussing and refining ideas.
|
and the [mail list](http://list.hledger.org) (list.hledger.org) are excellent places for discussing and refining ideas.
|
||||||
@ -93,82 +107,62 @@ higher-priority tasks. So before opening a github issue, first consider:
|
|||||||
2. The [trello board](http://trello.hledger.org) (trello.hledger.org) is a good place
|
2. The [trello board](http://trello.hledger.org) (trello.hledger.org) is a good place
|
||||||
for storing and prioritising backlog and wishlist items of all kinds.
|
for storing and prioritising backlog and wishlist items of all kinds.
|
||||||
3. The [bug tracker](http:///bugs.hledger.org) (bugs.hledger.org) on github
|
3. The [bug tracker](http:///bugs.hledger.org) (bugs.hledger.org) on github
|
||||||
is best used for issues with the existing product or docs. If you're not sure if you're reporting
|
is mostly used for reporting problems with the existing product or docs.
|
||||||
a bug or not, it's fine to post it here.
|
If you're not sure if it's a problem or not, it's fine to report it.
|
||||||
|
When enhancement requests land in the bug tracker, they get the WISH label, and are excluded from the default view at [bugs.hledger.org](http://bugs.hledger.org).
|
||||||
|
|
||||||
When wishes land in the bug tracker, they get the WISH label, and
|
|
||||||
these are excluded from the default view given by bugs.hledger.org.
|
|
||||||
|
|
||||||
### Report problems
|
### Report bugs
|
||||||
|
|
||||||
- for quick help or if you're not sure about the problem,
|
- get to know the bug tracker (on github) and its contents.
|
||||||
you can ask on the [#hledger](http://irc.hledger.org) (irc.hledger.org) IRC channel
|
Some convenient url shortcuts:\
|
||||||
or the [mail list](http://list.hledger.org) (list.hledger.org).
|
[`bugs.hledger.org`](http://bugs.hledger.org) - show non-wishlist issues \
|
||||||
If #hledger does not respond quickly, you can leave the window open and check back later, or leave your email address.
|
`bugs.hledger.org/N` - jump to issue #N
|
||||||
- check the open and closed issues in the [bug tracker](http://bugs.hledger.org) (bugs.hledger.org). Sometimes the problem has been fixed in git but not yet released.
|
- research and update existing issues
|
||||||
- report new issues in the bug tracker (shortcut: [bugs.hledger.org/new](http://bugs.hledger.org/new))
|
- report a bug: [`bugs.hledger.org/new`](http://bugs.hledger.org/new)
|
||||||
|
|
||||||
<!-- - test and share problem journal snippets at paste . hledger.org -->
|
### Install stack and git
|
||||||
|
|
||||||
### Help with testing
|
[stack](https://github.com/commercialhaskell/stack/wiki/Downloads) is
|
||||||
|
the recommended tool for building hledger from source.
|
||||||
|
It builds haskell projects, installing required haskell libraries as needed.
|
||||||
|
It can also install GHC (the compiler) and (on windows) git, if needed.
|
||||||
|
|
||||||
- review and test our documentation and web presence
|
You don't need to use stack, if you are already expert with the older
|
||||||
- download and test the binaries on your platform
|
cabal tool, or even just GHC, but I won't attempt to document those
|
||||||
- test installing via cabal
|
procedures; these docs assume you have downloaded and installed stack.
|
||||||
- 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
|
|
||||||
|
|
||||||
### Help with bug tracking
|
[git](http://git-scm.com) is the revision control tool you'll need to
|
||||||
|
fetch the latest hledger source and submit changes. On windows, stack
|
||||||
|
can install it for you. These docs assume you have installed git and
|
||||||
|
know a little about how to use it.
|
||||||
|
|
||||||
- get to know the [bug tracker](http://bugs.hledger.org) and its contents
|
### Install other optional tools
|
||||||
- research and update issues
|
|
||||||
- some convenient url shortcuts:\
|
|
||||||
[`bugs.hledger.org`](http://bugs.hledger.org)\
|
|
||||||
[`bugs.hledger.org/new`](http://bugs.hledger.org/new)\
|
|
||||||
`bugs.hledger.org/N`
|
|
||||||
|
|
||||||
### Set up for development
|
Up-to-date `alex`, `happy`, and `haddock` tools are required, but `stack` should install those for you.
|
||||||
|
|
||||||
1. Download and install [stack](https://github.com/commercialhaskell/stack/wiki/Downloads).
|
Here are some optional extra tools:
|
||||||
This builds haskell projects and can also install GHC (and on windows, git) if needed.
|
|
||||||
2. Get the hledger repo:
|
- `shelltestrunner` is useful for running functional tests.
|
||||||
|
- `hasktags` is an easy way to generate editor tag files for quick source code navigation.
|
||||||
|
- `profiteur` is for reporting stack profiles.
|
||||||
|
- `hpack` regenerates cabal files when package.yaml files have been updated.
|
||||||
|
- `hoogle` is for searching source code.
|
||||||
|
|
||||||
|
You can install them all with:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ stack install shelltestrunner hasktags profiteur hpack hoogle
|
||||||
|
```
|
||||||
|
|
||||||
|
### Get the latest hledger source
|
||||||
|
|
||||||
```{.shell .bold}
|
```{.shell .bold}
|
||||||
$ git clone https://github.com/simonmichael/hledger.git
|
$ git clone code.hledger.org hledger # aka github.com/simonmichael/hledger.git
|
||||||
$ cd hledger
|
$ cd hledger
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Install [GNU Make](http://www.gnu.org/software/make) and other optional extra tools (see the Makefile for a list):
|
<!--
|
||||||
|
|
||||||
```shell
|
|
||||||
$ stack install shelltestrunner hasktags profiteur hpack
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Run `make` or `stack --help` to see some suggested commands:
|
|
||||||
|
|
||||||
```{.shell .bold}
|
|
||||||
$ make
|
|
||||||
Makefile:37: -------------------- hledger make rules --------------------
|
|
||||||
Makefile:39: make [help] -- list documented rules in this makefile. make -n RULE shows more detail.
|
|
||||||
Makefile:204: (INSTALLING:)
|
|
||||||
Makefile:206: make install -- download dependencies and install hledger executables to ~/.local/bin or equivalent (with stack)
|
|
||||||
Makefile:231: (BUILDING:)
|
|
||||||
Makefile:235: make build -- download dependencies and build hledger executables (with stack)
|
|
||||||
Makefile:304: make hledgerdev -- quickly build the hledger executable (with ghc and -DDEVELOPMENT)
|
|
||||||
...
|
|
||||||
$ stack --help
|
|
||||||
Available commands:
|
|
||||||
build Build the project(s) in this directory/configuration
|
|
||||||
install Build executables and install to a user path
|
|
||||||
test Build and test the project(s) in this
|
|
||||||
directory/configuration
|
|
||||||
bench Build and benchmark the project(s) in this
|
|
||||||
directory/configuration
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
Old instructions:
|
Old instructions:
|
||||||
|
|
||||||
1. Get [GHC](https://www.haskell.org/ghc/) and [cabal-install](http://hackage.haskell.org/package/cabal-install) installed.
|
1. Get [GHC](https://www.haskell.org/ghc/) and [cabal-install](http://hackage.haskell.org/package/cabal-install) installed.
|
||||||
@ -235,75 +229,98 @@ Old instructions:
|
|||||||
and as quickly as possible, without optimizations (the "dev" suffix is a reminder of this).
|
and as quickly as possible, without optimizations (the "dev" suffix is a reminder of this).
|
||||||
I use and recommend this method for development, as it crosses package boundaries and ensures you are building the latest code.
|
I use and recommend this method for development, as it crosses package boundaries and ensures you are building the latest code.
|
||||||
However it needs some files generated by cabal build, which is why we did that first.
|
However it needs some files generated by cabal build, which is why we did that first.
|
||||||
|
|
||||||
|
|
||||||
### Get your changes accepted
|
|
||||||
|
|
||||||
Follow the usual github workflow:
|
|
||||||
|
|
||||||
- fork the main hledger repo on github,
|
|
||||||
- git clone it to your local machine,
|
|
||||||
- git commit, after (?) pulling and merging the latest upstream changes
|
|
||||||
- git push back to github,
|
|
||||||
- open a pull request on github,
|
|
||||||
- follow up on any discussion there.
|
|
||||||
|
|
||||||
If you're new to this process, [help.github.com](http://help.github.com) may be useful.
|
|
||||||
|
|
||||||
### 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: ")
|
|
||||||
|
|
||||||
### Use the REPL (GHCI)
|
|
||||||
|
|
||||||
These all work from the main hledger source directory (at least).
|
|
||||||
|
|
||||||
First, ensure all required dependencies are installed with these
|
|
||||||
commands. (You might also need to install some system libs like
|
|
||||||
terminfo or curses.)
|
|
||||||
|
|
||||||
```{.shell .bold}
|
|
||||||
$ stack test
|
|
||||||
$ stack bench
|
|
||||||
```
|
|
||||||
|
|
||||||
Get a GHCI prompt for hledger-lib:
|
|
||||||
```{.shell .bold}
|
|
||||||
$ stack ghci hledger-lib
|
|
||||||
```
|
|
||||||
|
|
||||||
Get a GHCI prompt for hledger:
|
|
||||||
```{.shell .bold}
|
|
||||||
$ stack ghci hledger
|
|
||||||
```
|
|
||||||
|
|
||||||
Get a GHCI prompt for hledger-web:
|
|
||||||
```{.shell .bold}
|
|
||||||
$ stack ghci hledger-web
|
|
||||||
```
|
|
||||||
hledger-web also needs to find some things in its current directory (like the static/ directory).
|
|
||||||
This normally just works, if not please [send details](https://github.com/simonmichael/hledger/issues/274).
|
|
||||||
|
|
||||||
Get a GHCI prompt for hledger and hledger-lib:
|
|
||||||
```{.shell .bold}
|
|
||||||
$ make ghci
|
|
||||||
```
|
|
||||||
|
|
||||||
Get a GHCI prompt for hledger-web, hledger and hledger-lib:
|
|
||||||
```{.shell .bold}
|
|
||||||
$ make ghci-web
|
|
||||||
```
|
|
||||||
|
|
||||||
<!--
|
|
||||||
For the dev.hs developer script:
|
|
||||||
```{.shell .bold}
|
|
||||||
$ make ghci-dev
|
|
||||||
```
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
### Use the Makefile
|
||||||
|
|
||||||
|
A Makefile is provided to make common developer tasks easy to remember,
|
||||||
|
and to insulate us a little from the ever-evolving Haskell tools ecosystem.
|
||||||
|
Using it is entirely optional, but recommended.
|
||||||
|
You'll need [GNU Make](http://www.gnu.org/software/make) installed.
|
||||||
|
|
||||||
|
The Makefile is self-documenting. Run `make` to see a list of the main make rules:
|
||||||
|
|
||||||
|
```{.shell}
|
||||||
|
$ make
|
||||||
|
Makefile:37: -------------------- hledger make rules --------------------
|
||||||
|
Makefile:39: make [help] -- list documented rules in this makefile. make -n RULE shows more detail.
|
||||||
|
Makefile:204: (INSTALLING:)
|
||||||
|
Makefile:206: make install -- download dependencies and install hledger executables to ~/.local/bin or equivalent (with stack)
|
||||||
|
Makefile:231: (BUILDING:)
|
||||||
|
Makefile:235: make build -- download dependencies and build hledger executables (with stack)
|
||||||
|
Makefile:304: make hledgerdev -- quickly build the hledger executable (with ghc and -DDEVELOPMENT)
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
To see what a make rule will do without actually doing it, use the `-n` flag:
|
||||||
|
|
||||||
|
```{.shell}
|
||||||
|
$ make build -n
|
||||||
|
stack build
|
||||||
|
```
|
||||||
|
```{.shell}
|
||||||
|
$ make test -n
|
||||||
|
(stack test \
|
||||||
|
&& echo pkgtest PASSED) || echo pkgtest FAILED
|
||||||
|
(stack exec hledger test \
|
||||||
|
&& echo builtintest PASSED) || echo builtintest FAILED
|
||||||
|
(COLUMNS=80 PATH=`pwd`/bin:/home/simon/src/hledger/bin:/home/simon/src/hledger/extra:/home/simon/.local/bin:/home/simon/.cabal/bin:/opt/ghc/7.10.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/var/lib/gems/1.9.1/bin stack exec -- shelltest --execdir -- -j16 --hide-successes tests \
|
||||||
|
&& echo functest PASSED) || echo functest FAILED
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build or install hledger
|
||||||
|
|
||||||
|
Run `make` to see a list of build rules. You probably want `build` or `install`.
|
||||||
|
|
||||||
|
`make build` runs stack build, which downloads required haskell
|
||||||
|
dependencies and builds all hledger packages.
|
||||||
|
The resulting executables will be somewhere under .stack-work, eg in
|
||||||
|
`.stack-work/install/i386-linux/lts-3.0/7.10.2/bin/`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ make build
|
||||||
|
stack build
|
||||||
|
hledger-lib-0.26.98: configure
|
||||||
|
hledger-lib-0.26.98: build
|
||||||
|
hledger-lib-0.26.98: install
|
||||||
|
hledger-0.26.98: configure
|
||||||
|
hledger-0.26.98: build
|
||||||
|
Progress: 1/4
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Note stack will install required haskell libraries, but not C
|
||||||
|
libraries such as curses or terminfo. If you get a build error, it is
|
||||||
|
likely because one of these is missing, in which case you must
|
||||||
|
identify and install it yourself using your system's package
|
||||||
|
manager. This is usually a bit harder on Windows.
|
||||||
|
|
||||||
|
`make install` runs stack install, which does everything stack build does and also
|
||||||
|
copies the executables to `~/.local/bin` or the Windows equivalent.
|
||||||
|
You should make sure this directory is in your `$PATH`, so that you can just type
|
||||||
|
`hledger` to run the latest.
|
||||||
|
```shell
|
||||||
|
$ make install
|
||||||
|
stack install
|
||||||
|
NOTE: the install command is functionally equivalent to 'build --copy-bins'
|
||||||
|
hledger-0.26.98: build
|
||||||
|
...
|
||||||
|
Copied executables to /Users/simon/.local/bin/:
|
||||||
|
- hledger-web
|
||||||
|
- hledger-ui
|
||||||
|
- hledger
|
||||||
|
```
|
||||||
|
|
||||||
|
You can save time and effort by building just the package(s) you're interested in.
|
||||||
|
To install just the hledger command-line tool, but not hledger-ui or (especially costly)
|
||||||
|
hledger-web, do:
|
||||||
|
```shell
|
||||||
|
$ stack install hledger
|
||||||
|
```
|
||||||
|
|
||||||
|
(This looks like the [download page](download) command for installing the latest hledger release from Stackage.
|
||||||
|
The difference is, here we are running it inside the hledger source tree, so the source version will be installed.)
|
||||||
|
|
||||||
### Run benchmarks
|
### Run benchmarks
|
||||||
|
|
||||||
Benchmarks are standard performance measurements,
|
Benchmarks are standard performance measurements,
|
||||||
@ -469,7 +486,7 @@ tools/generatejournal 10000 10000 10 >data/10000x10000x10.journal
|
|||||||
tools/generatejournal 100000 1000 10 >data/100000x1000x10.journal
|
tools/generatejournal 100000 1000 10 >data/100000x1000x10.journal
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run tests
|
### Run developer tests
|
||||||
|
|
||||||
This command will install haskell dependencies (you might need to
|
This command will install haskell dependencies (you might need to
|
||||||
install additional system dependencies yourself) and run the package
|
install additional system dependencies yourself) and run the package
|
||||||
@ -510,6 +527,60 @@ $ make haddocktest
|
|||||||
- write test, verify expected result
|
- write test, verify expected result
|
||||||
- get it committed
|
- get it committed
|
||||||
|
|
||||||
|
### Use the REPL (GHCI)
|
||||||
|
|
||||||
|
These all work from the main hledger source directory (at least).
|
||||||
|
|
||||||
|
First, ensure all required dependencies are installed with these
|
||||||
|
commands. (You might also need to install some system libs like
|
||||||
|
terminfo or curses.)
|
||||||
|
|
||||||
|
```{.shell .bold}
|
||||||
|
$ stack test
|
||||||
|
$ stack bench
|
||||||
|
```
|
||||||
|
|
||||||
|
Get a GHCI prompt for hledger-lib:
|
||||||
|
```{.shell .bold}
|
||||||
|
$ stack ghci hledger-lib
|
||||||
|
```
|
||||||
|
|
||||||
|
Get a GHCI prompt for hledger:
|
||||||
|
```{.shell .bold}
|
||||||
|
$ stack ghci hledger
|
||||||
|
```
|
||||||
|
|
||||||
|
Get a GHCI prompt for hledger-web:
|
||||||
|
```{.shell .bold}
|
||||||
|
$ stack ghci hledger-web
|
||||||
|
```
|
||||||
|
hledger-web also needs to find some things in its current directory (like the static/ directory).
|
||||||
|
This normally just works, if not please [send details](https://github.com/simonmichael/hledger/issues/274).
|
||||||
|
|
||||||
|
Get a GHCI prompt for hledger and hledger-lib:
|
||||||
|
```{.shell .bold}
|
||||||
|
$ make ghci
|
||||||
|
```
|
||||||
|
|
||||||
|
Get a GHCI prompt for hledger-web, hledger and hledger-lib:
|
||||||
|
```{.shell .bold}
|
||||||
|
$ make ghci-web
|
||||||
|
```
|
||||||
|
|
||||||
|
<!--
|
||||||
|
For the dev.hs developer script:
|
||||||
|
```{.shell .bold}
|
||||||
|
$ make ghci-dev
|
||||||
|
```
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Improve the documentation
|
||||||
|
|
||||||
|
- get familiar with the website and documentation online, review and test
|
||||||
|
- get familiar with the site/doc source files (see Makefile)
|
||||||
|
- get the latest hledger source
|
||||||
|
- send patches with names prefixed with "doc: " (or "site: ")
|
||||||
|
|
||||||
### Fix a bug or add a feature
|
### Fix a bug or add a feature
|
||||||
|
|
||||||
- research, discuss, validate the issue/feature on irc/list/bug tracker
|
- research, discuss, validate the issue/feature on irc/list/bug tracker
|
||||||
@ -519,6 +590,19 @@ $ make haddocktest
|
|||||||
- include any related issue numbers in the patch name, eg: "fix for blah blah (#NNN)"
|
- include any related issue numbers in the patch name, eg: "fix for blah blah (#NNN)"
|
||||||
- get it committed
|
- get it committed
|
||||||
|
|
||||||
|
### Get your changes accepted
|
||||||
|
|
||||||
|
Follow the usual github workflow:
|
||||||
|
|
||||||
|
- fork the main hledger repo on github,
|
||||||
|
- git clone it to your local machine,
|
||||||
|
- git commit, after (?) pulling and merging the latest upstream changes
|
||||||
|
- git push back to github,
|
||||||
|
- open a pull request on github,
|
||||||
|
- follow up on any discussion there.
|
||||||
|
|
||||||
|
If you're new to this process, [help.github.com](http://help.github.com) may be useful.
|
||||||
|
|
||||||
### Become a contributor
|
### Become a contributor
|
||||||
|
|
||||||
- after getting one or more patches committed, read and sign the [contributor list & agreement](contributors.html)
|
- after getting one or more patches committed, read and sign the [contributor list & agreement](contributors.html)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user