xref: /webtrees/CONTRIBUTING.md (revision 86d9143ff4ed3b15d591ab35a5332b1ff839f763)
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