186d9143fSBen# How to contribute 286d9143fSBen 386d9143fSBenThanks for taking the time to contribute! 486d9143fSBen 586d9143fSBenThe following is a set of guidelines for contributing to Webtrees. These are mostly guidelines, not rules. 686d9143fSBenUse your best judgment, and feel free to propose changes to this document in a pull request. 786d9143fSBen 886d9143fSBen## How to submit a patch or feature 986d9143fSBen 1086d9143fSBenIf you want to submit a patch or feature, please create a pull request on Github. There are different branches for different versions of webtrees: 1186d9143fSBen 1210cdb299SGreg Roach* For the current version (2.1), use the `main` branch 1310cdb299SGreg Roach* For 2.0, use the `2.0` branch (security issues only) 1410cdb299SGreg Roach* For 1.7, use the `1.7` branch (security issues only) 1586d9143fSBen 1686d9143fSBenBefore submitting a pull request make sure you have [tested the code](#how-to-test) 1786d9143fSBenand [followed the coding conventions](#coding-conventions). 1886d9143fSBen 19d3fe06a8SGreg RoachPlease read more about [setting up your environment](#how-to-setup-a-development-environment) for development. 2086d9143fSBen 2186d9143fSBen## How to start 2286d9143fSBen 2386d9143fSBenYou can start contributing by 2486d9143fSBen 2586d9143fSBen* submitting patches or features 2686d9143fSBen* writing tests to [increase the test coverage](https://coveralls.io/github/fisharebest/webtrees?branch=master) 2786d9143fSBen* creating or updating [translations](#translations) 2886d9143fSBen* Join our slack. The invitation link will be updated on this line. 2986d9143fSBen* Help us maintaining our github page from the repository [webtrees.github.io](https://github.com/webtrees/webtrees.github.io). 3086d9143fSBen 3186d9143fSBen## How to setup a development environment 3286d9143fSBen 3386d9143fSBenYou will need three tools, in addition to the requirements of a live installation. 3486d9143fSBen 3586d9143fSBen* `git` - to fetch the latest development code, merge changes, create pull requests, etc. 3686d9143fSBen* [`composer`](https://getcomposer.org) - to install PHP dependencies, build releases, and run tests. 3786d9143fSBen* [`npm`](https://nodejs.org/en/download/package-manager) - to install CSS/JS dependencies and create portable/minified `.css` / `.js` files. 3886d9143fSBen 3986d9143fSBenYou 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. 4086d9143fSBen 4186d9143fSBenIf 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". 4286d9143fSBen 4386d9143fSBen### GIT 4486d9143fSBen 4586d9143fSBenThe project has been running for many years, and has a lot of history. 4686d9143fSBenThis means that the full repository is over 600MB. 4786d9143fSBen 4886d9143fSBenIf you are only interested in the latest version of the code, you can use a 4986d9143fSBen"shallow clone", which is about 30MB. 5086d9143fSBen 5186d9143fSBenUse `git clone --depth 1 https://github.com/fisharebest/webtrees`. 5286d9143fSBen 5386d9143fSBen### Composer 5486d9143fSBen 5586d9143fSBenThe instructions below assume you have created an alias/shortcut for `composer`. 5686d9143fSBenIf not, you'll need to replace `composer` with `php /path/to/your/copy/of/composer.phar`. 5786d9143fSBen 58*e63974caSStefan Weil* You would usually run `composer install` before starting any development. 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. 5986d9143fSBen 6086d9143fSBen* 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`. 6186d9143fSBen 6286d9143fSBen### NPM 6386d9143fSBen 6486d9143fSBen* 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`. 6586d9143fSBen 6686d9143fSBen## Third-party libraries and compiled files in the source tree 6786d9143fSBen 6886d9143fSBenFor historic reasons, we include certain third-party libraries and compiled 6986d9143fSBenfiles in our source tree. This is usually considered to be bad practice. 7086d9143fSBenWe do it because we have a large number of testers and users who have become 7186d9143fSBenaccustomed to downloading the latest source code and running it without any build step. 7286d9143fSBen 7386d9143fSBenWe include the non-development PHP libraries from `/vendor`. 7486d9143fSBenThese are created using the command `composer install --no-dev`. 7586d9143fSBen 7686d9143fSBenWe include the compiled JS and CSS assets from `/public/{css,js}`). 7786d9143fSBenThese are created using the command `npm run production`. 7886d9143fSBen 7986d9143fSBen 8086d9143fSBen## Creating a pull request 8186d9143fSBen 8286d9143fSBen[TODO] 8386d9143fSBen 8486d9143fSBen 8586d9143fSBen 8686d9143fSBen1. Fork and clone the repository 8786d9143fSBen2. Run `composer install` to update the PHP dependencies. 8886d9143fSBen3. Run `npm install` to update the JS and HTML files. 8986d9143fSBen4. Run `php -S localhost:8080` and open your browser at [localhost:8080](http://localhost:8080) 9086d9143fSBen5. Go through the install process 9186d9143fSBen 9286d9143fSBen## How to test 9386d9143fSBen 9486d9143fSBenInstall PHPUnit by running `composer install` 9586d9143fSBen 9686d9143fSBenThen run the tests with `vendor/bin/phpunit` 9786d9143fSBen 9886d9143fSBen## Coding conventions 9986d9143fSBen 10086d9143fSBenYour code should follow the [PSR-12](https://www.php-fig.org/psr/psr-12/) Extended coding style guide. 10186d9143fSBen 10286d9143fSBenPlease do not contribute your IDE directories (e.g. `.idea` or `.vscode`). 10386d9143fSBen 10486d9143fSBen## Translations 10586d9143fSBen 10686d9143fSBenThere is a [translators forum](http://webtrees.net/index.php/en/forum/8-translation) where you can discuss any issues relating to translation. 10786d9143fSBen 10886d9143fSBenUpdates to translations should be made at [translate.webtrees.net](https://translate.webtrees.net). 10986d9143fSBenChanges made there will be pushed to webtrees git repository periodically and will be available 11086d9143fSBenon the development version of webtrees. They will be included in the next release of webtrees. 11186d9143fSBen 112