1*86d9143fSBen# How to contribute 2*86d9143fSBen 3*86d9143fSBenThanks for taking the time to contribute! 4*86d9143fSBen 5*86d9143fSBenThe following is a set of guidelines for contributing to Webtrees. These are mostly guidelines, not rules. 6*86d9143fSBenUse your best judgment, and feel free to propose changes to this document in a pull request. 7*86d9143fSBen 8*86d9143fSBen## How to submit a patch or feature 9*86d9143fSBen 10*86d9143fSBenIf you want to submit a patch or feature, please create a pull request on Github. There are different branches for different versions of webtrees: 11*86d9143fSBen 12*86d9143fSBen* For webtrees 2.0, use the `master` branch 13*86d9143fSBen* For the latest webtrees 1.7.*, use the `1.7` branch 14*86d9143fSBen 15*86d9143fSBenBefore submitting a pull request make sure you have [tested the code](#how-to-test) 16*86d9143fSBenand [followed the coding conventions](#coding-conventions). 17*86d9143fSBen 18*86d9143fSBenPlease read more about [setting up your environment](#how-to-setup-the-environment) for development. 19*86d9143fSBen 20*86d9143fSBen## How to start 21*86d9143fSBen 22*86d9143fSBenYou can start contributing by 23*86d9143fSBen 24*86d9143fSBen* submitting patches or features 25*86d9143fSBen* writing tests to [increase the test coverage](https://coveralls.io/github/fisharebest/webtrees?branch=master) 26*86d9143fSBen* creating or updating [translations](#translations) 27*86d9143fSBen* Join our slack. The invitation link will be updated on this line. 28*86d9143fSBen* Help us maintaining our github page from the repository [webtrees.github.io](https://github.com/webtrees/webtrees.github.io). 29*86d9143fSBen 30*86d9143fSBen## How to setup a development environment 31*86d9143fSBen 32*86d9143fSBenYou will need three tools, in addition to the requirements of a live installation. 33*86d9143fSBen 34*86d9143fSBen* `git` - to fetch the latest development code, merge changes, create pull requests, etc. 35*86d9143fSBen* [`composer`](https://getcomposer.org) - to install PHP dependencies, build releases, and run tests. 36*86d9143fSBen* [`npm`](https://nodejs.org/en/download/package-manager) - to install CSS/JS dependencies and create portable/minified `.css` / `.js` files. 37*86d9143fSBen 38*86d9143fSBenYou do not need to understand the details of `composer` and `npm`. You just need to be able to type a few commands at a console. 39*86d9143fSBen 40*86d9143fSBenIf you are going to submit your work to the project, you will need a basic understanding of `git`. The workflow for using git is covered below in the section on "Pull Requests". 41*86d9143fSBen 42*86d9143fSBen### GIT 43*86d9143fSBen 44*86d9143fSBenThe project has been running for many years, and has a lot of history. 45*86d9143fSBenThis means that the full repository is over 600MB. 46*86d9143fSBen 47*86d9143fSBenIf you are only interested in the latest version of the code, you can use a 48*86d9143fSBen"shallow clone", which is about 30MB. 49*86d9143fSBen 50*86d9143fSBenUse `git clone --depth 1 https://github.com/fisharebest/webtrees`. 51*86d9143fSBen 52*86d9143fSBen### Composer 53*86d9143fSBen 54*86d9143fSBenThe instructions below assume you have created an alias/shortcut for `composer`. 55*86d9143fSBenIf not, you'll need to replace `composer` with `php /path/to/your/copy/of/composer.phar`. 56*86d9143fSBen 57*86d9143fSBen* You would usually run `composer install` before starting any develoment. This loads all the development tools, including the PHP debug bar, the build scripts, the analysis and testing tools. You would then run `composer install --no-dev` before committing any changes. 58*86d9143fSBen 59*86d9143fSBen* The PHP Debug Bar can set a large number of HTTP headers, and you may need to increase the size of buffers in your webserver configuration. There are some notes in the file `app/Http/Middleware/UseDebugbar.php`. 60*86d9143fSBen 61*86d9143fSBen* You can use a "pre-commit hook" to run checks on your code before you commit them to your local repository. To do this, rename the file `.git/hooks/pre-commit.sample` to `.git/hooks/pre-commit` and then add this line at the end of the file: `composer webtrees:pre-commit-hook`. 62*86d9143fSBen 63*86d9143fSBen### NPM 64*86d9143fSBen 65*86d9143fSBen* After modifying any CSS or JS files, you'll need to rebuild the files in `public/js` and `public/css`. You do this with the command `npm run production`. 66*86d9143fSBen 67*86d9143fSBen## Third-party libraries and compiled files in the source tree 68*86d9143fSBen 69*86d9143fSBenFor historic reasons, we include certain third-party libraries and compiled 70*86d9143fSBenfiles in our source tree. This is usually considered to be bad practice. 71*86d9143fSBenWe do it because we have a large number of testers and users who have become 72*86d9143fSBenaccustomed to downloading the latest source code and running it without any build step. 73*86d9143fSBen 74*86d9143fSBenWe include the non-development PHP libraries from `/vendor`. 75*86d9143fSBenThese are created using the command `composer install --no-dev`. 76*86d9143fSBen 77*86d9143fSBenWe include the compiled JS and CSS assets from `/public/{css,js}`). 78*86d9143fSBenThese are created using the command `npm run production`. 79*86d9143fSBen 80*86d9143fSBen 81*86d9143fSBen## Creating a pull request 82*86d9143fSBen 83*86d9143fSBen[TODO] 84*86d9143fSBen 85*86d9143fSBen 86*86d9143fSBen 87*86d9143fSBen1. Fork and clone the repository 88*86d9143fSBen2. Run `composer install` to update the PHP dependencies. 89*86d9143fSBen3. Run `npm install` to update the JS and HTML files. 90*86d9143fSBen4. Run `php -S localhost:8080` and open your browser at [localhost:8080](http://localhost:8080) 91*86d9143fSBen5. Go through the install process 92*86d9143fSBen 93*86d9143fSBen## How to test 94*86d9143fSBen 95*86d9143fSBenInstall PHPUnit by running `composer install` 96*86d9143fSBen 97*86d9143fSBenThen run the tests with `vendor/bin/phpunit` 98*86d9143fSBen 99*86d9143fSBen## Coding conventions 100*86d9143fSBen 101*86d9143fSBenYour code should follow the [PSR-12](https://www.php-fig.org/psr/psr-12/) Extended coding style guide. 102*86d9143fSBen 103*86d9143fSBenPlease do not contribute your IDE directories (e.g. `.idea` or `.vscode`). 104*86d9143fSBen 105*86d9143fSBen## Translations 106*86d9143fSBen 107*86d9143fSBenPlease refer to the guide from the [official wiki](https://wiki.webtrees.net/en/Category:Translation_Guidelines). 108*86d9143fSBen 109*86d9143fSBenThere is a [translators forum](http://webtrees.net/index.php/en/forum/8-translation) where you can discuss any issues relating to translation. 110*86d9143fSBen 111*86d9143fSBenUpdates to translations should be made at [translate.webtrees.net](https://translate.webtrees.net). 112*86d9143fSBenChanges made there will be pushed to webtrees git repository periodically and will be available 113*86d9143fSBenon the development version of webtrees. They will be included in the next release of webtrees. 114*86d9143fSBen 115