/usr/share/perl5/Dancer/Development.pod is in libdancer-perl 1.3091+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 | =head1 NAME
Dancer::Development - guide for developers interested in contributing
=head1 DESCRIPTION
This guide has been written to help anyone interested in contributing to the
development of Dancer.
First of all - thank you for your interest in the project! It's the community
of helpful contributors who've helped Dancer experience phenomenal growth to get
to where it is today.
Please read this guide before contributing to Dancer, to avoid wasted effort and
maximizing the chances of your contributions being used.
=head1 WAYS TO CONTRIBUTE
There are many ways to contribute to the project. Dancer is a young yet active
project and any kind of help is very much appreciated!
=head2 Publicity
You don't have to start by hacking the code, spreading the word is very
valuable as well!
If you have a blog, just feel free to speak about Dancer.
If you're a Twitter user, you can tweet about it with the hashtag C<#perl> (and
feel free to follow C<@PerlDancer> for news and updates on Dancer!).
Of course, it doesn't have to be limited to blogs or Twitter.
Feel free to spread the word in whatever way you consider fit and drop us a
line on the Dancer user mailing list noted below.
Also, if you're using and enjoying Dancer,
L<http://cpanratings.perl.org/dist/Dancer|rating us on cpanratings.perl.org>,
explaining what you like about Dancer is another very valuable contribution that
helps other new users find us!
=head2 Mailing list / IRC community
Subscribing to the mailing list and/or hanging out on our IRC channel and
providing assistance to new users is incredibly valuable.
=over 4
=item *
Mailing list: L<http://lists.perldancer.org/cgi-bin/listinfo/dancer-users> to
subscribe or view archives
=item *
IRC: C<#dancer> on C<irc.perl.org>, or L<http://www.perldancer.org/irc> for
a quick web client.
=back
=head2 Documentation
While we value documentation very much, it's difficult to keep it up-to-date.
If you find a typo or an error in the documentation please do let us know -
ideally by submitting a patch with your fix (see "Patch Submission").
=head2 Contribute to CPAN Testers
If you have access to perl on rare operating systems, please
consider contributing tests. See
L<http://wiki.cpantesters.org/wiki/TestDuringInstall> for more information.
=head2 Code
You can write extensions (plugins) for Dancer extending Dancer's core
functionality or contribute to Dancer's core code, see "Patch Submission" below.
=head1 GENERAL DEVELOPMENT GUIDELINES
This section lists high-level recommendations for developing Dancer, for more
detailed guidelines, see "Coding Guidelines" below.
=head2 Quality Assurance
Dancer should be able to install for all Perl versions since 5.8, on any
platform for which Perl exists. We focus mainly on GNU/Linux (any distribution),
*BSD and Windows (native and Cygwin).
We should avoid regressions as much as possible and keep backwards
compatibility in mind when refactoring. Stable releases should not break
functionality and new releases should provide an upgrade path and upgrade tips
such as warning the user about deprecated functionality.
=head2 Quality Supervision
We can measure our quality using the CPAN testers platform:
L<http://www.cpantesters.org>.
A good way to help the project is to find a failing build log on the CPAN
testers: L<http://www.cpantesters.org/distro/D/Dancer.html>
If you find a failing test report, feel free to report it as a GitHub issue:
L<http://github.com/sukria/Dancer/issues>.
=head2 Reporting Bugs
We prefer to have all our bug reports on GitHub, in the issues section:
L<http://github.com/sukria/Dancer/issues>. It's possible though to report bugs
on RT as well: L<https://rt.cpan.org/Dist/Display.html?Queue=Dancer>
Please make sure the bug you're reporting does not yet exist. In doubt please
ask on IRC.
=head2 Patch Submission
The Dancer development team uses GitHub to collaborate. We greatly appreciate
contributions submitted via GitHub, as it makes tracking these contributions and
applying them much, much easier. This gives your contribution a much better
chance of being integrated into Dancer quickly!
To help us achieve high-quality, stable releases, git-flow workflow is used to
handle pull-requests, that means contributors must work on their C<devel> branch
rather than on their C<master>. (Master should be touched only by the core dev
team when preparing a release to CPAN; all ongoing development happens in
branches which are merged to the C<devel> branch.)
Here is the workflow for submitting a patch:
=over 4
=item *
Fork the repository L<http://github.com/sukria/Dancer> (click "Fork")
=item *
Clone your fork to have a local copy using the following command:
$ git clone git://github.com/myname/Dancer.git
=item *
As a contributor, you should B<always> work on the C<devel> branch of
your clone (C<master> is used only for building releases).
$ git remote add upstream https://github.com/sukria/Dancer.git
$ git fetch upstream
$ git checkout -b devel upstream/devel
This will create a local branch in your clone named C<devel> and that
will track the official C<devel> branch. That way, if you have more or
less commits than the upstream repo, you'll be immediately notified by git.
=item *
You want to isolate all your commits in a I<topic> branch, this will make the
reviewing much easier for the core team and will allow you to continue working
on your clone without worrying about different commits mixing together.
To do that, first create a local branch to build your pull request:
# you should be in devel here
git checkout -b pr/$name
Now you have created a local branch named I<pr/$name> where I<$name> is the
name you want (it should describe the purpose of the pull request you're
preparing).
In that branch, do all the commits you need (the more the better) and when
done, push the branch to your fork:
# ... commits ...
git push origin pr/$name
You are now ready to send a pull request.
=item *
Send a I<pull request> via the GitHub interface. Make sure your pull request is
based on the I<pr/$name> branch you've just pushed, so that it incorporates the
appropriate commits only.
It's also a good idea to summarize your work in a report sent to the users
mailing list (see below), in order to make sure the team is aware of it.
You could also notify the core team on IRC, on C<irc.perl.org>, channel
C<#dancer> or L<http://www.perldancer.org/irc>.
=item *
When the core team reviews your pull request, it will either accept (and
then merge into I<devel>) or refuse your request.
If it's refused, try to understand the reasons explained by the team for
the denial. Most of the time, communicating with the core team is enough to
understand what the mistake was. Above all, please don't be offended.
If your pull-request is merged into I<devel>, then all you have to do is to
remove your local and remote I<pr/$name> branch:
git checkout devel
git branch -D pr/$name
git push origin :pr/$name
And then, of course, you need to sync your local devel branch with the upstream:
git pull upstream devel
git push origin devel
You're now ready to start working on a new pull request!
=back
=head1 About the Release Cycle
Since version 1.2, the team has decided to take a step further toward
production concerns: Dancer now promises to provide an API-stable and
feature frozen release, whose updates will only be about bugfixes and
documentation updates.
After some discussion with the core-team members, it has been agreed
that the 1.2xx release series will be the first of this kind, and will
live as long as 1.3xx lives.
As soon as the last 1.3xx release is mature enough and the core
team is happy with, it will be uploaded as the first version of the
1.4xx series, and 1.2xx will become obsolete.
This lets us evolve quickly in our main track (devel in GitHub will
contain all the daily work we want to make 1.3xx better) but as well,
it lets us assure maintainability for the 1.2 series, as we will
probably have to fix a bug somewhere in 1.2 without merging with new
stuff contained in the devel branch.
That's why a maintenance branch is added to the repo. To be very
clear, this branch is named "I<frozen>", to reflect the idea that the
source-code in this branch is not meant to evolve regarding features.
It should only contains fixes for bug or documentation updates.
If you want to submit a pull-request to the frozen branch (that means
1.3xx is out and you've found a bug in 1.2xx) you need to base your
work on the C<frozen> branch. Use the same procedure explained before,
but with the C<frozen> branch.
=head1 RESOURCES FOR DEVELOPERS
=head2 Mailing Lists
A mailing list is available here:
L<http://lists.perldancer.org/cgi-bin/listinfo/dancer-users>
=head2 IRC Channels
You can reach the development team on irc.perl.org, channel #dancer or via a web
chat interface at L<http://www.perldancer.org/irc>. We're always happy to hear
from users and contributors.
=head2 Repositories
The official repository is hosted on GitHub at the following location:
L<http://github.com/sukria/Dancer>.
Official developers have write access to this repository, contributors are
invited to fork it if they want to submit patches, as explained in the
I<Patch submission> section.
The repository layout is organized as follows:
=over 4
=item * C<master>
This branch is dedicated to prepare CPAN releases. We push to that branch only
for packaging a new release. Every CPAN version are made from this branch.
=item * C<devel>
This is the development branch. New features are pushed here, and will be merged
to master when the next release is being prepared.
=back
=head1 CODING GUIDELINES
This section describes standards and requirements for coding. For more broad
guidelines, see "GENERAL DEVELOPMENT GUIDELINES" above.
=head2 About Dependencies
Dancer is intended to be a micro-framework. That means among other things that
it should remain lightweight. For this reason we try very hard to keep the
dependencies as low as possible. On the other hand, we don't want to reinvent
the wheel either.
We not likely to accept a new dependency to the core unless there is a
very good reason.
If a patch provides a new feature that depends on a module, the solution is to
perform a dynamic loading. Dancer has a class dedicated to that job:
L<Dancer::ModuleLoader>. Here is an example of how to use it:
package Dancer::Some::Thing;
use Carp;
sub init {
Dancer::ModuleLoader->load('Some::Deps')
or croak "the feature provided by Dancer::Some::Thing needs Some::Deps";
}
That way, an optional feature doesn't block Dancer from being installed since
the dependency check is performed at runtime.
=head2 Perltidy
=head2 Tests
=head1 RELEASING
=head2 Public Releases
Public and stable releases are those without an underline ('_') in the version
number. The latest stable release can be downloaded from CPAN and github.com.
=head2 Developer Releases
Developer releases are those which include an underline ('_') in the version
number. Whenever the devel branch has been merged into the master branch, the
CPAN release built must be a developer version (the version number contains a
'_').
Before a new release is made, the uploaders must wait for the CPAN testers
reports. This is done to make sure the new merge doesn't bring regressions.
=head2 Roadmap
For current information on Dancer's plans for the future, see the file TODO at
L<https://github.com/sukria/Dancer/blob/master/TODO>.
=head1 AUTHOR
This document has been written by Alexis Sukrieh L<sukria@cpan.org>
|