doc: contributing: move workflows to the end
[ci skip]
This commit is contained in:
		
							parent
							
								
									6f4bb29734
								
							
						
					
					
						commit
						43be7c1381
					
				
							
								
								
									
										446
									
								
								CONTRIBUTING.md
									
									
									
									
									
								
							
							
						
						
									
										446
									
								
								CONTRIBUTING.md
									
									
									
									
									
								
							| @ -239,231 +239,6 @@ See help: | |||||||
|     ./Shake |     ./Shake | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ## Developer workflows |  | ||||||
| 
 |  | ||||||
| ### Get developer tools |  | ||||||
| 
 |  | ||||||
| Ensure [`stack`](https://haskell-lang.org/get-started) is installed |  | ||||||
| (or if you’re a [cabal](https://www.haskell.org/cabal/) expert, feel free to use that.) |  | ||||||
| 
 |  | ||||||
| Ensure [`git`](http://git-scm.com) is installed. On Windows, it comes with stack. |  | ||||||
| 
 |  | ||||||
| Here are some useful optional tools: |  | ||||||
| 
 |  | ||||||
| - [GNU Make](http://www.gnu.org/software/make): to use the convenient [Make rules](#make). |  | ||||||
| - [`entr`](http://www.entrproject.org/) runs arbitrary commands when files change. |  | ||||||
| - [`ghcid`](http://hackage.haskell.org/package/ghcid) gives real-time GHC feedback as you make code changes. |  | ||||||
| - [`shelltestrunner`](http://hackage.haskell.org/package/shelltestrunner) runs hledger's functional tests. |  | ||||||
| - [`quickbench`](http://hackage.haskell.org/package/quickbench) measures and reports time taken by commands. |  | ||||||
| - [`hasktags`](http://hackage.haskell.org/package/hasktags) generates tag files for quick code navigation in editors like Emacs and vim. |  | ||||||
| - For browsing and editing Haskell code, popular tools include: Emacs, Vim, IDEA, VS Code, Atom.. |  | ||||||
| 
 |  | ||||||
| Eg: |  | ||||||
| 
 |  | ||||||
|     stack install ghcid shelltestrunner quickbench hasktags |  | ||||||
|     brew install entr |  | ||||||
| 
 |  | ||||||
| ### Get the code |  | ||||||
| 
 |  | ||||||
|     git clone https://github.com/simonmichael/hledger |  | ||||||
|     cd hledger |  | ||||||
| 
 |  | ||||||
| ### Review code |  | ||||||
| 
 |  | ||||||
| - review and discuss new [pull requests](http://prs.hledger.org) and commits on github |  | ||||||
| - build hledger and test the latest changes in your own repo |  | ||||||
| - read the existing [code docs and source](#quick-links) |  | ||||||
| - send feedback or discuss via [IRC or mail list](/docs.html#helpfeedback) |  | ||||||
| 
 |  | ||||||
| ### Build in place |  | ||||||
| 
 |  | ||||||
| See also http://hledger.org/download.html#c.-build-the-development-version . |  | ||||||
| 
 |  | ||||||
|     stack build    # hledger hledger-ui ... |  | ||||||
| 
 |  | ||||||
| This fetches the required GHC version and haskell dependencies from the default stackage snapshot (configured in `stack.yaml`),  |  | ||||||
| then builds all hledger packages. |  | ||||||
| This can take a while! To save time, you can build individual packages, eg just the CLI and TUI. |  | ||||||
| 
 |  | ||||||
| Note stack does not fetch C libraries such as curses or terminfo, which you might need to install yourself, using your system's package manager. |  | ||||||
| In case of trouble, see [download](/download.html#link-errors). |  | ||||||
| 
 |  | ||||||
| If you want to use an older snapshot/GHC for some reason, specify one of the older stack-ghc*.yaml files: |  | ||||||
| 
 |  | ||||||
|     stack --stack-yaml stack-ghc8.2.yaml build |  | ||||||
|      |  | ||||||
| ### Run in place |  | ||||||
| 
 |  | ||||||
|     stack exec -- hledger     # ARGS... |  | ||||||
|     stack exec -- hledger-ui  # ARGS... |  | ||||||
|     stack exec -- which hledger |  | ||||||
| 
 |  | ||||||
| ### Build and install |  | ||||||
| 
 |  | ||||||
| This builds and also copies the hledger executables to `~/.local/bin` or the Windows equivalent |  | ||||||
| (which you should  [add to your `$PATH`](/download.html#b)). |  | ||||||
| 
 |  | ||||||
|     stack install    # hledger hledger-ui ... |  | ||||||
| 
 |  | ||||||
| ### Run package tests |  | ||||||
| 
 |  | ||||||
| Runs any HUnit/doctest/easytest tests defined by each hledger package. |  | ||||||
| 
 |  | ||||||
|     stack test    # hledger ... |  | ||||||
| 
 |  | ||||||
| ### Run package benchmarks |  | ||||||
| 
 |  | ||||||
| Runs any performance reports defined by each hledger package. |  | ||||||
| 
 |  | ||||||
|     stack bench    # hledger ... |  | ||||||
| 
 |  | ||||||
| ### Run quickbench benchmarks |  | ||||||
| 
 |  | ||||||
| Times the end-user commands in `bench.sh` using quickbench. |  | ||||||
| 
 |  | ||||||
|     make bench |  | ||||||
| 
 |  | ||||||
| ### Run functional tests |  | ||||||
| 
 |  | ||||||
| Runs the shelltestrunner tests defined in tests/, which test the hledger CLI. |  | ||||||
| 
 |  | ||||||
|     stack build hledger |  | ||||||
|     make functest |  | ||||||
| 
 |  | ||||||
| ### Run haddock tests |  | ||||||
| 
 |  | ||||||
| Checks for anything that would break haddock doc generation. |  | ||||||
| 
 |  | ||||||
|     make haddocktest |  | ||||||
| 
 |  | ||||||
| Checks for the unit-tests embedded in documentation. |  | ||||||
| 
 |  | ||||||
|     make doctest |  | ||||||
| 
 |  | ||||||
| ### Simulate Travis tests |  | ||||||
| 
 |  | ||||||
| Locally runs tests similar to what we run on Travis CI. |  | ||||||
| 
 |  | ||||||
|     make travistest |  | ||||||
| 
 |  | ||||||
| ### Test with all supported GHC versions/stackage snapshots |  | ||||||
| 
 |  | ||||||
|     make allsnapshotstest |  | ||||||
| 
 |  | ||||||
| ### Use GHCI |  | ||||||
| 
 |  | ||||||
| GHCI is GHC's REPL, useful for exploring and calling code interactively. |  | ||||||
| 
 |  | ||||||
| #### Get a GHCI prompt for hledger-lib: |  | ||||||
| 
 |  | ||||||
|     cd hledger-lib; stack ghci hledger-lib |  | ||||||
| 
 |  | ||||||
| Changing into the package directory isn't actually needed, but it |  | ||||||
| enables a custom .ghci script which sets a more useful short prompt. |  | ||||||
| 
 |  | ||||||
| #### Get a GHCI prompt for hledger: |  | ||||||
| 
 |  | ||||||
|     cd hledger; stack ghci hledger |  | ||||||
| 
 |  | ||||||
| #### Get a GHCI prompt for hledger-ui: |  | ||||||
| 
 |  | ||||||
|     cd hledger-ui; stack ghci hledger-ui |  | ||||||
| 
 |  | ||||||
| #### Get a GHCI prompt for hledger-web: |  | ||||||
| 
 |  | ||||||
|     cd hledger-web; 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). |  | ||||||
| 
 |  | ||||||
| ### 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 |  | ||||||
| 
 |  | ||||||
| ### 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 |  | ||||||
| 
 |  | ||||||
| ### 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. |  | ||||||
| 
 |  | ||||||
| ### Add yourself to the contributor list |  | ||||||
| 
 |  | ||||||
| - after getting something into the master branch, read and sign the [contributor list & agreement](contributors.html). Or, [ask](/docs.html#helpfeedback) to be added. |  | ||||||
| - give yourself a high five! |  | ||||||
| 
 |  | ||||||
| ### Work on docs |  | ||||||
| 
 |  | ||||||
| Most docs tasks are handled by [[Shake]].  |  | ||||||
| 
 |  | ||||||
| #### List Shake rules: |  | ||||||
| 
 |  | ||||||
|     ./Shake |  | ||||||
| 
 |  | ||||||
| #### Generate man/info/txt manuals (in hledger*/) and embed in hledger executables: |  | ||||||
| 
 |  | ||||||
|     ./Shake manuals |  | ||||||
|     stack build |  | ||||||
| 
 |  | ||||||
| #### Generate html manuals and the hledger website (in site/_site/): |  | ||||||
| 
 |  | ||||||
|     ./Shake website |  | ||||||
| 
 |  | ||||||
| #### To remove all files generated by Shake: |  | ||||||
| 
 |  | ||||||
|     ./Shake Clean |  | ||||||
| 
 |  | ||||||
| ### Use ghcid for watching GHC/GHCI |  | ||||||
| 
 |  | ||||||
| [ghcid](http://hackage.haskell.org/package/ghcid) is the most reliable and fastest way to see GHC's feedback, and optionally run tests or a GHCI command, as you edit. We run it via make, for convenience and to watch multiple packages rather than just one. Run `make help-ghcid` to list related rules. |  | ||||||
| 
 |  | ||||||
| #### Watch for compile errors in hledger-lib and hledger: |  | ||||||
| 
 |  | ||||||
|     make ghcid |  | ||||||
| 
 |  | ||||||
| #### Watch compile errors and the output of some hledger command: |  | ||||||
| 
 |  | ||||||
|     ghcid -c 'make ghci' -T ':main -f a.j bal --budget -N' |  | ||||||
| 
 |  | ||||||
| ### Use --file-watch for watching stack |  | ||||||
| 
 |  | ||||||
| stack's --file-watch flag will re-run build/test/bench when source files or package.yaml/cabal files change. Eg: |  | ||||||
| 
 |  | ||||||
|     stack test hledger --file-watch |  | ||||||
| 
 |  | ||||||
| If you find that adding --fast makes this any faster, please update this. |  | ||||||
| 
 |  | ||||||
| ### Use entr for watching arbitrary commands |  | ||||||
| 
 |  | ||||||
| [entr](http://entrproject.org/) is the most robust cross-platform tool for watching files and running a command when they change. Note its first argument must be an executable program, to run a shell command or multiple commands use `bash -c "..."`. |  | ||||||
| 
 |  | ||||||
| #### Rerun a single functional test as you change it: |  | ||||||
| 
 |  | ||||||
|     ls tests/budget/budget.test | entr bash -c 'clear; COLUMNS=80 stack exec -- shelltest --execdir tests/budget/budget.test -i12' |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ## Code | ## Code | ||||||
| 
 | 
 | ||||||
| hledger is a suite of applications, tools and libraries. | hledger is a suite of applications, tools and libraries. | ||||||
| @ -1505,3 +1280,224 @@ and help us to experiment. | |||||||
| You are encouraged to claim your bounties, | You are encouraged to claim your bounties, | ||||||
| though you can also choose to transfer them to a new issue of your choice. | though you can also choose to transfer them to a new issue of your choice. | ||||||
| 
 | 
 | ||||||
|  | ## Developer workflows | ||||||
|  | 
 | ||||||
|  | ### Get developer tools | ||||||
|  | 
 | ||||||
|  | Ensure [`stack`](https://haskell-lang.org/get-started) is installed | ||||||
|  | (or if you’re a [cabal](https://www.haskell.org/cabal/) expert, feel free to use that.) | ||||||
|  | 
 | ||||||
|  | Ensure [`git`](http://git-scm.com) is installed. On Windows, it comes with stack. | ||||||
|  | 
 | ||||||
|  | Here are some useful optional tools: | ||||||
|  | 
 | ||||||
|  | - [GNU Make](http://www.gnu.org/software/make): to use the convenient [Make rules](#make). | ||||||
|  | - [`entr`](http://www.entrproject.org/) runs arbitrary commands when files change. | ||||||
|  | - [`ghcid`](http://hackage.haskell.org/package/ghcid) gives real-time GHC feedback as you make code changes. | ||||||
|  | - [`shelltestrunner`](http://hackage.haskell.org/package/shelltestrunner) runs hledger's functional tests. | ||||||
|  | - [`quickbench`](http://hackage.haskell.org/package/quickbench) measures and reports time taken by commands. | ||||||
|  | - [`hasktags`](http://hackage.haskell.org/package/hasktags) generates tag files for quick code navigation in editors like Emacs and vim. | ||||||
|  | - For browsing and editing Haskell code, popular tools include: Emacs, Vim, IDEA, VS Code, Atom.. | ||||||
|  | 
 | ||||||
|  | Eg: | ||||||
|  | 
 | ||||||
|  |     stack install ghcid shelltestrunner quickbench hasktags | ||||||
|  |     brew install entr | ||||||
|  | 
 | ||||||
|  | ### Get the code | ||||||
|  | 
 | ||||||
|  |     git clone https://github.com/simonmichael/hledger | ||||||
|  |     cd hledger | ||||||
|  | 
 | ||||||
|  | ### Review code | ||||||
|  | 
 | ||||||
|  | - review and discuss new [pull requests](http://prs.hledger.org) and commits on github | ||||||
|  | - build hledger and test the latest changes in your own repo | ||||||
|  | - read the existing [code docs and source](#quick-links) | ||||||
|  | - send feedback or discuss via [IRC or mail list](/docs.html#helpfeedback) | ||||||
|  | 
 | ||||||
|  | ### Build in place | ||||||
|  | 
 | ||||||
|  | See also http://hledger.org/download.html#c.-build-the-development-version . | ||||||
|  | 
 | ||||||
|  |     stack build    # hledger hledger-ui ... | ||||||
|  | 
 | ||||||
|  | This fetches the required GHC version and haskell dependencies from the default stackage snapshot (configured in `stack.yaml`),  | ||||||
|  | then builds all hledger packages. | ||||||
|  | This can take a while! To save time, you can build individual packages, eg just the CLI and TUI. | ||||||
|  | 
 | ||||||
|  | Note stack does not fetch C libraries such as curses or terminfo, which you might need to install yourself, using your system's package manager. | ||||||
|  | In case of trouble, see [download](/download.html#link-errors). | ||||||
|  | 
 | ||||||
|  | If you want to use an older snapshot/GHC for some reason, specify one of the older stack-ghc*.yaml files: | ||||||
|  | 
 | ||||||
|  |     stack --stack-yaml stack-ghc8.2.yaml build | ||||||
|  |      | ||||||
|  | ### Run in place | ||||||
|  | 
 | ||||||
|  |     stack exec -- hledger     # ARGS... | ||||||
|  |     stack exec -- hledger-ui  # ARGS... | ||||||
|  |     stack exec -- which hledger | ||||||
|  | 
 | ||||||
|  | ### Build and install | ||||||
|  | 
 | ||||||
|  | This builds and also copies the hledger executables to `~/.local/bin` or the Windows equivalent | ||||||
|  | (which you should  [add to your `$PATH`](/download.html#b)). | ||||||
|  | 
 | ||||||
|  |     stack install    # hledger hledger-ui ... | ||||||
|  | 
 | ||||||
|  | ### Run package tests | ||||||
|  | 
 | ||||||
|  | Runs any HUnit/doctest/easytest tests defined by each hledger package. | ||||||
|  | 
 | ||||||
|  |     stack test    # hledger ... | ||||||
|  | 
 | ||||||
|  | ### Run package benchmarks | ||||||
|  | 
 | ||||||
|  | Runs any performance reports defined by each hledger package. | ||||||
|  | 
 | ||||||
|  |     stack bench    # hledger ... | ||||||
|  | 
 | ||||||
|  | ### Run quickbench benchmarks | ||||||
|  | 
 | ||||||
|  | Times the end-user commands in `bench.sh` using quickbench. | ||||||
|  | 
 | ||||||
|  |     make bench | ||||||
|  | 
 | ||||||
|  | ### Run functional tests | ||||||
|  | 
 | ||||||
|  | Runs the shelltestrunner tests defined in tests/, which test the hledger CLI. | ||||||
|  | 
 | ||||||
|  |     stack build hledger | ||||||
|  |     make functest | ||||||
|  | 
 | ||||||
|  | ### Run haddock tests | ||||||
|  | 
 | ||||||
|  | Checks for anything that would break haddock doc generation. | ||||||
|  | 
 | ||||||
|  |     make haddocktest | ||||||
|  | 
 | ||||||
|  | Checks for the unit-tests embedded in documentation. | ||||||
|  | 
 | ||||||
|  |     make doctest | ||||||
|  | 
 | ||||||
|  | ### Simulate Travis tests | ||||||
|  | 
 | ||||||
|  | Locally runs tests similar to what we run on Travis CI. | ||||||
|  | 
 | ||||||
|  |     make travistest | ||||||
|  | 
 | ||||||
|  | ### Test with all supported GHC versions/stackage snapshots | ||||||
|  | 
 | ||||||
|  |     make allsnapshotstest | ||||||
|  | 
 | ||||||
|  | ### Use GHCI | ||||||
|  | 
 | ||||||
|  | GHCI is GHC's REPL, useful for exploring and calling code interactively. | ||||||
|  | 
 | ||||||
|  | #### Get a GHCI prompt for hledger-lib: | ||||||
|  | 
 | ||||||
|  |     cd hledger-lib; stack ghci hledger-lib | ||||||
|  | 
 | ||||||
|  | Changing into the package directory isn't actually needed, but it | ||||||
|  | enables a custom .ghci script which sets a more useful short prompt. | ||||||
|  | 
 | ||||||
|  | #### Get a GHCI prompt for hledger: | ||||||
|  | 
 | ||||||
|  |     cd hledger; stack ghci hledger | ||||||
|  | 
 | ||||||
|  | #### Get a GHCI prompt for hledger-ui: | ||||||
|  | 
 | ||||||
|  |     cd hledger-ui; stack ghci hledger-ui | ||||||
|  | 
 | ||||||
|  | #### Get a GHCI prompt for hledger-web: | ||||||
|  | 
 | ||||||
|  |     cd hledger-web; 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). | ||||||
|  | 
 | ||||||
|  | ### 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 | ||||||
|  | 
 | ||||||
|  | ### 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 | ||||||
|  | 
 | ||||||
|  | ### 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. | ||||||
|  | 
 | ||||||
|  | ### Add yourself to the contributor list | ||||||
|  | 
 | ||||||
|  | - after getting something into the master branch, read and sign the [contributor list & agreement](contributors.html). Or, [ask](/docs.html#helpfeedback) to be added. | ||||||
|  | - give yourself a high five! | ||||||
|  | 
 | ||||||
|  | ### Work on docs | ||||||
|  | 
 | ||||||
|  | Most docs tasks are handled by [[Shake]].  | ||||||
|  | 
 | ||||||
|  | #### List Shake rules: | ||||||
|  | 
 | ||||||
|  |     ./Shake | ||||||
|  | 
 | ||||||
|  | #### Generate man/info/txt manuals (in hledger*/) and embed in hledger executables: | ||||||
|  | 
 | ||||||
|  |     ./Shake manuals | ||||||
|  |     stack build | ||||||
|  | 
 | ||||||
|  | #### Generate html manuals and the hledger website (in site/_site/): | ||||||
|  | 
 | ||||||
|  |     ./Shake website | ||||||
|  | 
 | ||||||
|  | #### To remove all files generated by Shake: | ||||||
|  | 
 | ||||||
|  |     ./Shake Clean | ||||||
|  | 
 | ||||||
|  | ### Use ghcid for watching GHC/GHCI | ||||||
|  | 
 | ||||||
|  | [ghcid](http://hackage.haskell.org/package/ghcid) is the most reliable and fastest way to see GHC's feedback, and optionally run tests or a GHCI command, as you edit. We run it via make, for convenience and to watch multiple packages rather than just one. Run `make help-ghcid` to list related rules. | ||||||
|  | 
 | ||||||
|  | #### Watch for compile errors in hledger-lib and hledger: | ||||||
|  | 
 | ||||||
|  |     make ghcid | ||||||
|  | 
 | ||||||
|  | #### Watch compile errors and the output of some hledger command: | ||||||
|  | 
 | ||||||
|  |     ghcid -c 'make ghci' -T ':main -f a.j bal --budget -N' | ||||||
|  | 
 | ||||||
|  | ### Use --file-watch for watching stack | ||||||
|  | 
 | ||||||
|  | stack's --file-watch flag will re-run build/test/bench when source files or package.yaml/cabal files change. Eg: | ||||||
|  | 
 | ||||||
|  |     stack test hledger --file-watch | ||||||
|  | 
 | ||||||
|  | If you find that adding --fast makes this any faster, please update this. | ||||||
|  | 
 | ||||||
|  | ### Use entr for watching arbitrary commands | ||||||
|  | 
 | ||||||
|  | [entr](http://entrproject.org/) is the most robust cross-platform tool for watching files and running a command when they change. Note its first argument must be an executable program, to run a shell command or multiple commands use `bash -c "..."`. | ||||||
|  | 
 | ||||||
|  | #### Rerun a single functional test as you change it: | ||||||
|  | 
 | ||||||
|  |     ls tests/budget/budget.test | entr bash -c 'clear; COLUMNS=80 stack exec -- shelltest --execdir tests/budget/budget.test -i12' | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user