Chris@0
|
1 # CONTRIBUTING
|
Chris@0
|
2
|
Chris@0
|
3 ## RESOURCES
|
Chris@0
|
4
|
Chris@0
|
5 If you wish to contribute to Zend Framework, please be sure to
|
Chris@0
|
6 read/subscribe to the following resources:
|
Chris@0
|
7
|
Chris@0
|
8 - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
|
Chris@0
|
9 - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
|
Chris@0
|
10 - ZF Contributor's mailing list:
|
Chris@0
|
11 Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
|
Chris@0
|
12 Subscribe: zf-contributors-subscribe@lists.zend.com
|
Chris@0
|
13 - ZF Contributor's IRC channel:
|
Chris@0
|
14 #zftalk.dev on Freenode.net
|
Chris@0
|
15
|
Chris@0
|
16 If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-diactoros/issues/new).
|
Chris@0
|
17
|
Chris@0
|
18 ## Reporting Potential Security Issues
|
Chris@0
|
19
|
Chris@0
|
20 If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
|
Chris@0
|
21 issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
|
Chris@0
|
22 We will work with you to verify the vulnerability and patch it as soon as possible.
|
Chris@0
|
23
|
Chris@0
|
24 When reporting issues, please provide the following information:
|
Chris@0
|
25
|
Chris@0
|
26 - Component(s) affected
|
Chris@0
|
27 - A description indicating how to reproduce the issue
|
Chris@0
|
28 - A summary of the security vulnerability and impact
|
Chris@0
|
29
|
Chris@0
|
30 We request that you contact us via the email address above and give the project
|
Chris@0
|
31 contributors a chance to resolve the vulnerability and issue a new release prior
|
Chris@0
|
32 to any public exposure; this helps protect users and provides them with a chance
|
Chris@0
|
33 to upgrade and/or update in order to protect their applications.
|
Chris@0
|
34
|
Chris@0
|
35 For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
|
Chris@0
|
36
|
Chris@0
|
37 ## Documentation
|
Chris@0
|
38
|
Chris@0
|
39 Documentation is in [GitHub Flavored Markdown](https://help.github.com/articles/github-flavored-markdown/),
|
Chris@0
|
40 and rendered using [bookdown](http://bookdown.io). Please read and follow the [general documentation
|
Chris@0
|
41 guidelines](https://github.com/zendframework/documentation/blob/master/CONTRIBUTING.md) when
|
Chris@0
|
42 providing documentation.
|
Chris@0
|
43
|
Chris@0
|
44 All new features **must** include documentation before they may be accepted and merged.
|
Chris@0
|
45
|
Chris@0
|
46 ## RUNNING TESTS
|
Chris@0
|
47
|
Chris@0
|
48 To run tests:
|
Chris@0
|
49
|
Chris@0
|
50 - Clone the repository:
|
Chris@0
|
51
|
Chris@0
|
52 ```console
|
Chris@0
|
53 $ git clone git@github.com:zendframework/zend-diactoros.git
|
Chris@0
|
54 $ cd
|
Chris@0
|
55 ```
|
Chris@0
|
56
|
Chris@0
|
57 - Install dependencies via composer:
|
Chris@0
|
58
|
Chris@0
|
59 ```console
|
Chris@0
|
60 $ curl -sS https://getcomposer.org/installer | php --
|
Chris@0
|
61 $ ./composer.phar install
|
Chris@0
|
62 ```
|
Chris@0
|
63
|
Chris@0
|
64 If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
|
Chris@0
|
65
|
Chris@0
|
66 - Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
|
Chris@0
|
67
|
Chris@0
|
68 ```console
|
Chris@0
|
69 $ ./vendor/bin/phpunit
|
Chris@0
|
70 ```
|
Chris@0
|
71
|
Chris@0
|
72 ## Running Coding Standards Checks
|
Chris@0
|
73
|
Chris@0
|
74 This component uses [phpcs](https://github.com/squizlabs/PHP_CodeSniffer) for coding
|
Chris@0
|
75 standards checks, and provides configuration for our selected checks.
|
Chris@0
|
76 `phpcs` is installed by default via Composer.
|
Chris@0
|
77
|
Chris@0
|
78 To run checks only:
|
Chris@0
|
79
|
Chris@0
|
80 ```console
|
Chris@0
|
81 $ composer cs-check
|
Chris@0
|
82 ```
|
Chris@0
|
83
|
Chris@0
|
84 `phpcs` also installs a tool named `phpcbf` which can attempt to fix problems
|
Chris@0
|
85 for you:
|
Chris@0
|
86
|
Chris@0
|
87 ```console
|
Chris@0
|
88 $ composer cs-fix
|
Chris@0
|
89 ```
|
Chris@0
|
90
|
Chris@0
|
91 If you allow phpcbf to fix CS issues, please re-run the tests to ensure
|
Chris@0
|
92 they pass, and make sure you add and commit the changes after verification.
|
Chris@0
|
93
|
Chris@0
|
94 ## Recommended Workflow for Contributions
|
Chris@0
|
95
|
Chris@0
|
96 Your first step is to establish a public repository from which we can
|
Chris@0
|
97 pull your work into the master repository. We recommend using
|
Chris@0
|
98 [GitHub](https://github.com), as that is where the component is already hosted.
|
Chris@0
|
99
|
Chris@0
|
100 1. Setup a [GitHub account](http://github.com/), if you haven't yet
|
Chris@0
|
101 2. Fork the repository (http://github.com/zendframework/zend-diactoros)
|
Chris@0
|
102 3. Clone the canonical repository locally and enter it.
|
Chris@0
|
103
|
Chris@0
|
104 ```console
|
Chris@0
|
105 $ git clone git://github.com/zendframework/zend-diactoros.git
|
Chris@0
|
106 $ cd zend-diactoros
|
Chris@0
|
107 ```
|
Chris@0
|
108
|
Chris@0
|
109 4. Add a remote to your fork; substitute your GitHub username in the command
|
Chris@0
|
110 below.
|
Chris@0
|
111
|
Chris@0
|
112 ```console
|
Chris@0
|
113 $ git remote add {username} git@github.com:{username}/zend-diactoros.git
|
Chris@0
|
114 $ git fetch {username}
|
Chris@0
|
115 ```
|
Chris@0
|
116
|
Chris@0
|
117 ### Keeping Up-to-Date
|
Chris@0
|
118
|
Chris@0
|
119 Periodically, you should update your fork or personal repository to
|
Chris@0
|
120 match the canonical repository. Assuming you have setup your local repository
|
Chris@0
|
121 per the instructions above, you can do the following:
|
Chris@0
|
122
|
Chris@0
|
123
|
Chris@0
|
124 ```console
|
Chris@0
|
125 $ git checkout master
|
Chris@0
|
126 $ git fetch origin
|
Chris@0
|
127 $ git rebase origin/master
|
Chris@0
|
128 # OPTIONALLY, to keep your remote up-to-date -
|
Chris@0
|
129 $ git push {username} master:master
|
Chris@0
|
130 ```
|
Chris@0
|
131
|
Chris@0
|
132 If you're tracking other branches -- for example, the "develop" branch, where
|
Chris@0
|
133 new feature development occurs -- you'll want to do the same operations for that
|
Chris@0
|
134 branch; simply substitute "develop" for "master".
|
Chris@0
|
135
|
Chris@0
|
136 ### Working on a patch
|
Chris@0
|
137
|
Chris@0
|
138 We recommend you do each new feature or bugfix in a new branch. This simplifies
|
Chris@0
|
139 the task of code review as well as the task of merging your changes into the
|
Chris@0
|
140 canonical repository.
|
Chris@0
|
141
|
Chris@0
|
142 A typical workflow will then consist of the following:
|
Chris@0
|
143
|
Chris@0
|
144 1. Create a new local branch based off either your master or develop branch.
|
Chris@0
|
145 2. Switch to your new local branch. (This step can be combined with the
|
Chris@0
|
146 previous step with the use of `git checkout -b`.)
|
Chris@0
|
147 3. Do some work, commit, repeat as necessary.
|
Chris@0
|
148 4. Push the local branch to your remote repository.
|
Chris@0
|
149 5. Send a pull request.
|
Chris@0
|
150
|
Chris@0
|
151 The mechanics of this process are actually quite trivial. Below, we will
|
Chris@0
|
152 create a branch for fixing an issue in the tracker.
|
Chris@0
|
153
|
Chris@0
|
154 ```console
|
Chris@0
|
155 $ git checkout -b hotfix/9295
|
Chris@0
|
156 Switched to a new branch 'hotfix/9295'
|
Chris@0
|
157 ```
|
Chris@0
|
158
|
Chris@0
|
159 ... do some work ...
|
Chris@0
|
160
|
Chris@0
|
161
|
Chris@0
|
162 ```console
|
Chris@0
|
163 $ git commit
|
Chris@0
|
164 ```
|
Chris@0
|
165
|
Chris@0
|
166 ... write your log message ...
|
Chris@0
|
167
|
Chris@0
|
168
|
Chris@0
|
169 ```console
|
Chris@0
|
170 $ git push {username} hotfix/9295:hotfix/9295
|
Chris@0
|
171 Counting objects: 38, done.
|
Chris@0
|
172 Delta compression using up to 2 threads.
|
Chris@0
|
173 Compression objects: 100% (18/18), done.
|
Chris@0
|
174 Writing objects: 100% (20/20), 8.19KiB, done.
|
Chris@0
|
175 Total 20 (delta 12), reused 0 (delta 0)
|
Chris@0
|
176 To ssh://git@github.com/{username}/zend-diactoros.git
|
Chris@0
|
177 b5583aa..4f51698 HEAD -> master
|
Chris@0
|
178 ```
|
Chris@0
|
179
|
Chris@0
|
180 To send a pull request, you have two options.
|
Chris@0
|
181
|
Chris@0
|
182 If using GitHub, you can do the pull request from there. Navigate to
|
Chris@0
|
183 your repository, select the branch you just created, and then select the
|
Chris@0
|
184 "Pull Request" button in the upper right. Select the user/organization
|
Chris@0
|
185 "zendframework" as the recipient.
|
Chris@0
|
186
|
Chris@0
|
187 If using your own repository - or even if using GitHub - you can use `git
|
Chris@0
|
188 format-patch` to create a patchset for us to apply; in fact, this is
|
Chris@0
|
189 **recommended** for security-related patches. If you use `format-patch`, please
|
Chris@0
|
190 send the patches as attachments to:
|
Chris@0
|
191
|
Chris@0
|
192 - zf-devteam@zend.com for patches without security implications
|
Chris@0
|
193 - zf-security@zend.com for security patches
|
Chris@0
|
194
|
Chris@0
|
195 #### What branch to issue the pull request against?
|
Chris@0
|
196
|
Chris@0
|
197 Which branch should you issue a pull request against?
|
Chris@0
|
198
|
Chris@0
|
199 - For fixes against the stable release, issue the pull request against the
|
Chris@0
|
200 "master" branch.
|
Chris@0
|
201 - For new features, or fixes that introduce new elements to the public API (such
|
Chris@0
|
202 as new public methods or properties), issue the pull request against the
|
Chris@0
|
203 "develop" branch.
|
Chris@0
|
204
|
Chris@0
|
205 ### Branch Cleanup
|
Chris@0
|
206
|
Chris@0
|
207 As you might imagine, if you are a frequent contributor, you'll start to
|
Chris@0
|
208 get a ton of branches both locally and on your remote.
|
Chris@0
|
209
|
Chris@0
|
210 Once you know that your changes have been accepted to the master
|
Chris@0
|
211 repository, we suggest doing some cleanup of these branches.
|
Chris@0
|
212
|
Chris@0
|
213 - Local branch cleanup
|
Chris@0
|
214
|
Chris@0
|
215 ```console
|
Chris@0
|
216 $ git branch -d <branchname>
|
Chris@0
|
217 ```
|
Chris@0
|
218
|
Chris@0
|
219 - Remote branch removal
|
Chris@0
|
220
|
Chris@0
|
221 ```console
|
Chris@0
|
222 $ git push {username} :<branchname>
|
Chris@0
|
223 ```
|
Chris@0
|
224
|
Chris@0
|
225
|
Chris@0
|
226 ## Conduct
|
Chris@0
|
227
|
Chris@0
|
228 Please see our [CONDUCT.md](CONDUCT.md) to understand expected behavior when interacting with others in the project.
|