Newer Older
195 lines | 7.197kb
add files
Yuki Kimoto authored on 2014-03-26
1

            
2
=encoding utf8
3

            
4
=head1 NAME
5

            
6
Mojolicious::Guides::Contributing - Contributing to Mojolicious
7

            
8
=head1 OVERVIEW
9

            
10
There are many ways to contribute to L<Mojolicious>, this guide will show you
11
a few of them.
12

            
13
=head1 REPORTING BUGS
14

            
15
We use the L<GitHub issue tracker|https://github.com/kraih/mojo/issues>, so
16
you'll need to create a (free) GitHub account to be able to submit issues,
17
comments and pull requests.
18

            
19
First of all, make sure you are using the latest version of L<Mojolicious>, it
20
is quite likely that your bug has already been fixed. If that doesn't help,
21
take a look at the list of currently open issues, perhaps it has already been
22
reported by someone else and you can just add a comment confirming it.
23

            
24
If it hasn't been reported yet, try to prepare a test case demonstrating the
25
bug, you are not expected to fix it yourself, but you'll have to make sure the
26
developers can replicate your problem. Sending in your whole application
27
generally does more harm than good, the C<t> directory of this distribution
28
has many good examples for how to do it right. Writing a test is usually the
29
hardest part of fixing a bug, so the better your test case the faster it can
30
be fixed. ;)
31

            
32
And don't forget to add a descriptive title and text when you create a new
33
issue.
34

            
35
=head2 Reporting security issues
36

            
37
Please report security issues directly to the CPAN email address of the
38
pumpking, which is currently C<sri@cpan.org>, and give us a few days to
39
develop and release a proper fix.
40

            
41
=head2 Feature requests
42

            
43
Please do not open GitHub issues for feature requests, if there's something
44
you would like to see in a future version of L<Mojolicious>, you have to write
45
the code yourself.
46

            
47
If you're looking for feedback on your ideas, you're welcome to discuss them
48
on the L<mailing-list|http://groups.google.com/group/mojolicious> or the
49
official IRC channel C<#mojo> on C<irc.perl.org>.
50

            
51
=head1 RESOLVING ISSUES
52

            
53
There are many ways in which you can help us resolve existing issues on the
54
L<GitHub issue tracker|https://github.com/kraih/mojo/issues>.
55

            
56
Can you replicate the problem on your computer? Add a comment saying that
57
you're seeing the same. Perhaps you can provide additional information that
58
will make it easier for others to replicate the problem, maybe even contribute
59
a better test case.
60

            
61
And for all code contributions we very much appreciate additional testing and
62
code review, just add a comment to show your approval or to point out flaws
63
that need to be addressed.
64

            
65
=head1 CONTRIBUTING DOCUMENTATION
66

            
67
One of the easiest ways to contribute to L<Mojolicious> is through
68
documentation improvements. While the L<Mojolicious::Guides> are carefully
69
curated by the core team, everybody with a (free) GitHub account can make
70
changes and add new information to the
71
L<Mojolicious wiki|http://github.com/kraih/mojo/wiki>.
72

            
73
=head1 CONTRIBUTING CODE
74

            
75
All code contributions should be sent as
76
L<GitHub pull requests|https://help.github.com/articles/using-pull-requests>.
77

            
78
An expressive title and detailed description are invaluable during the review
79
process, which usually ends when members of the community have voiced their
80
opinions and the core team voted for or against a change. All code changes
81
should emulate the style of the surrounding code, include tests that fail
82
without them, and update relevant documentation.
83

            
84
While the L<Mojolicious> distribution covers a wide range of features, we are
85
rather conservative when it comes to adding new ones. So if your contribution
86
is not a bugfix, you can drastically increase its chances of getting accepted
87
by discussing it in advance on the
88
L<mailing-list|http://groups.google.com/group/mojolicious> or the official IRC
89
channel C<#mojo> on C<irc.perl.org>.
90

            
91
The following mission statement and rules are the foundation of all L<Mojo>
92
and L<Mojolicious> development. Please make sure that your contribution aligns
93
well with them before sending a pull request.
94

            
95
=head2 Mission statement
96

            
97
L<Mojo> is a runtime environment for Perl real-time web frameworks. It
98
provides all the basic tools and helpers needed to write simple web
99
applications and higher level web frameworks, such as L<Mojolicious>.
100

            
101
All components should be reusable in other projects, and in a UNIXish way only
102
loosely coupled.
103

            
104
Especially for people new to Perl it should be as easy as possible to install
105
L<Mojolicious> and get started. Writing web applications can be one of the
106
most fun ways to learn a language!
107

            
108
For developers of other web frameworks, it should be possible to reuse all the
109
infrastructure and just consider the higher levels of the L<Mojolicious>
110
distribution an example application.
111

            
112
=head2 Rules
113

            
114
=over 2
115

            
116
Web development should be easy and fun, this is what we optimize for.
117

            
118
The web is a moving target, to stay relevant we have to stay in motion too.
119

            
120
Keep it simple, no magic unless absolutely necessary.
121

            
122
The installation process should be as fast and painless as possible. (Less
123
than a minute on most common hardware is a good rule of thumb)
124

            
125
The addition and modification of features is decided by majority vote or the
126
pumpking.
127

            
128
Any core developer may nominate a new one, who must then be accepted by a 2/3
129
majority vote.
130

            
131
The pumpking has veto rights and may select his successor.
132

            
133
It's not a feature without a test and documentation.
134

            
135
A feature is only needed when the majority of the user base benefits from it.
136

            
137
Features may only be changed in a major release or after being deprecated for
138
at least 3 months.
139

            
140
Refactoring and deprecations should be avoided if no important feature depends
141
on it.
142

            
143
New features can be marked as experimental to be excluded from deprecation
144
policies.
145

            
146
A major release is signaled by a new major version number and a unique code
147
name based on a Unicode character.
148

            
149
Only add dependencies if absolutely necessary and make them optional if
150
possible.
151

            
152
Domain specific languages should be avoided in favor of Perl-ish solutions.
153

            
154
No inline POD.
155

            
156
Documentation belongs to the guides, module POD is just an API reference.
157

            
158
The main focus of the included documentation should be on examples, no walls
159
of text. (An example for every one or two sentences is a good rule of thumb)
160

            
161
Everything should be ordered alphabetically if possible.
162

            
163
The master source code repository should always be kept in a stable state, use
164
feature branches for actual development.
165

            
166
Code has to be run through L<Perl::Tidy> with the included C<.perltidyrc>, and
167
everything should look like it was written by a single person.
168

            
169
Functions and methods should be as short as possible, no spaghetti code.
170

            
171
Comments should be correctly capitalized, and funny if possible, punctuation
172
is optional if it doesn't increase readability.
173

            
174
No names outside of C<Mojolicious.pm>.
175

            
176
No Elitism.
177

            
178
Peace!
179

            
180
=back
181

            
182
=head1 MORE
183

            
184
You can continue with L<Mojolicious::Guides> now or take a look at the
185
L<Mojolicious wiki|http://github.com/kraih/mojo/wiki>, which contains a lot
186
more documentation and examples by many different authors.
187

            
188
=head1 SUPPORT
189

            
190
If you have any questions the documentation might not yet answer, don't
191
hesitate to ask on the
192
L<mailing-list|http://groups.google.com/group/mojolicious> or the official IRC
193
channel C<#mojo> on C<irc.perl.org>.
194

            
195
=cut