WWW::Mechanize::Chrome::Contributing
Welcome!
This is the documentation for how to contribute to WWW::Mechanize::Chrome, shamelessly copied from Zilla::Dist::Contributing.
This Project is targeted to ship to CPAN and uses a plain Makefile.PL
setup to do that. This means that things are laid out mostly in the traditional way "normal" Perl module repositories look. The distribution directory looks like this at the top level:
Changes
-
A changelog history, formatted in a way that CPAN::Changes can read.
Contributing
-
This file
README
-
A short file with installation instructions.
README.mkdn
-
Top level doc in a format for GitHub
runtests.pl
-
A helper to run the test suite across a set of Chrome versions.
.travis.yml
-
A Travis-CI instruction file for automatically running the test suite across OSX and Ubuntu and various versions of Perl.
examples/
-
A directory of Project examples.
lib/
-
Project library code.
t/
-
Project test suite.
Development
This module uses git
for development.
Installation
Installation for development is fairly straightforward:
- 1 Check out the repository
-
git clone https://github.com/Corion/WWW-Mechanize-Chrome.git
- 2 Install the prerequisites
-
cd WWW-Mechanize-Chrome cpanm --notest --installdeps .
Testing
The test suite can be run in two ways, depending on whether you want to run a matrix of combinations of backends and browser versions or not.
Running a single test
To run a single test during development of a new feature, run that test as follows:
perl -Ilib -w t/50-form2.t
Running the complete test suite
To run the complete test suite, use make
/ gmake
:
perl Makefile.PL
make test
Alternatively, you can use the prove
tool:
perl Makefile.PL
make
prove -wl
Running tests with different transport backends
To run a test program with the different backends, Mojolicious, AnyEvent and IO::Async, use the runtests.pl
program:
perl Makefile.PL
perl -w runtests.pl -t t/50-form2.t
Author Tests
The author tests live in xt/
. These mostly cover problems that I encountered when engineering a release. These must pass before making a release.
Installing Dependencies
There are no hard dependencies that need to be installed for development outside of the normal dependencies picked up by the CPAN installation process. Just run the following command in the git
checkout directory:
cpanm --installdeps .
OSX
The suggested environment for OSX is the Homebrew environment. This environment provides a libpng
libraries and Perl binary that are compatible with each other. Using the system perl
did not work out for me, as Imager::File::PNG does not install for the system perl
. If you do not use any of the screenshot features, you can also develop using the system perl
with a local::lib setup for the dependencies.
Workflow
The development workflow described here is mostly geared towards Github. If you want to send your patches by mail or other means, they are still very welcome.
Create a new branch
git checkout -b my-new-feature
Develop the new feature
The new feature ideally has at least one test file that exercises it. The new feature should have documentation. An entry in the Changes
file is welcome so your feature doesn't get lost in the mists of release engineering.
Run the new feature test
Ideally the new feature test you added passes on your machine.
Run the test suite
Ideally the test suite passes without failure on your machine.
Rebase your changes to clean up your commit history
Not every commit is perfect, so here you get the chance to rewrite history a bit.
git rebase -i github/master
Note that even if you pushed your changes to Github already, it's still OK to rebase even published commits. That's why you do your development in a separate feature branch.
Please don't make such changes to the master
branch.
Push the changes to Github
git push github my-new-feature
Push the changes to Github to enable Travis CI to run the test suite across some other architectures and versions of Perl.
Rebase your changes to the master branch
git rebase github/master
git push github --force my-new-feature
Yes, this will ruin the "immutable" history of your branch. That's OK - a feature branch is allowed to have its history rewritten.
Open a Github pull request
Opening the pull request will notify me, and Travis CI and AppVeyor will automatically run the test suite for the change.
Send a change set via mail
If you don't want to use Github, you can use git to send the changes via mail:
git send-email --compose --to corion@cpan.org
If you want to use a separate mail client, just format your changes as files and attach them to the mail manually:
git format-patch master..my-new-feature
Coding style
Ideally your code mimics the existing style.
The important style points of this module are:
- Perl Version
-
Be compatible with Perl 5.10.
If you need features from a newer version of Perl, this should be discussed before you invest too much work in it.
- Use function signatures
-
Use the function signatures feature, as provided by Filter::signatures.
- Structure your code as testable units
-
Ideally, your code is not one huge method but a set of methods that can be tested in isolation.
- Strike a balance when introducing new dependencies
-
Ideally, your change only pulls in the bare dependencies necessary. If you think you need an object system, Moo is already there, so any module that relies on another object system should be avoided.