How to publish to CPAN
- Create a PAUSE.perl.org account
- Use Minilla to create a distribution (.tar.gz)
- Use Carton to manage dependencies for your code
- Use Minilla to upload your distribution (.tar.gz) to PAUSE
How to publish to CPAN
- Create a PAUSE.perl.org account
- Use Minilla to create a distribution (.tar.gz)
- Use Carton to manage dependencies for your code
- Use Minilla to upload your distribution (.tar.gz) to PAUSE
PAUSE
- PAUSE is the Perl Authors Upload SErver
- You need a PAUSE account to upload/manage CPAN modules
- MetaCPAN.org uses PAUSE accounts for authentication
- When you upload a module, you will upload it to PAUSE
- After you upload a module to PAUSE, its indexed, and then distributed to CPAN mirrors
Create a PAUSE account
Go to pause.perl.org
- Click 'Create account'
- Do the things
Save your credentials in ~/.pause
user <YOUR-PAUSE-ID>
password <your-password>
This will be used by Minilla to upload your code to CPAN
How to publish to CPAN
- Create a PAUSE.perl.org account
- Use Minilla to create a distribution (.tar.gz)
- Use Carton to manage dependencies for your code
- Use Minilla to upload your distribution (.tar.gz) to PAUSE
Minilla
- Minilla is a kiaju -- the first of several young Godzillas
- A simple alternative to Dist::Zilla
- Not extensible
- Created by Tokuhirom
Create a new project with Minilla
cpanm Minilla
minil new Space::Cowboy
minil new
generated 9 boiler plate files
$ tree Space-Cowboy
.
├── Build.PL # script to install Space::Cowboy
├── Changes # changes for each release
├── cpanfile # dependencies
├── lib
│ └── Space
│ └── Cowboy.pm
├── LICENSE
├── META.json # meta data about the module for metacpan
├── minil.toml # config file for minilla
├── README.md # used by Github
└── t
└── 00_compile.t
3 directories, 9 files
How to publish to CPAN
- Create a PAUSE.perl.org account
- Use Minilla to create a distribution (.tar.gz)
- Use Carton to manage dependencies for your code
- Use Minilla to upload your distribution (.tar.gz) to PAUSE
Carton
- Created by Miyagawa
- Carton installs and tracks dependencies
- Similar to bundler (ruby) or pip (python)
- Installs dependencies to the './local' directory
- You create a cpanfile to list your dependencies
- Carton generates a cpanfile.snapshot which enables other developers to use the exact same deps
Install Carton
cpanm Carton
cpanfile example
requires Moo, '0.2000';
requires Plack, '== 0.9980';
requires Starman, '>= 0.2000';
on test => sub {
requires 'Test::More';
};
on develop => sub {
recommends 'Dist::Zilla';
};
- You can specify minimum versions
- You can pin a version
Using Carton
carton # installs dependencies to ./local
carton exec bin/space-cowboy # adds ./local to $PERL5LIB
Bash environment shortcuts
export PERL5LIB=./local/lib/perl5:./lib:$PERL5LIB
export PATH=./local/bin:$PATH
How to publish to CPAN
- Create a PAUSE.perl.org account
- Use Minilla to create a distribution (.tar.gz)
- Use Carton to manage dependencies for your code
- Use Minilla to upload your distribution (.tar.gz) to PAUSE
Write your code, then release
# hack
# hack
# hack
vi lib/Space/Cowboy.pm t/space-cowboy.t cpanfile
git commit -a
# release
carton exec minil release
minil release
...does the following awesome things
- checks if you forgot to check in any files
- runs your tests
- runs extra tests
- generates a README.md from your pod
- generates a META.json file for MetaCPAN.org
- generates a BUILD.pl file for MetaCPAN.org
- bumps the version number
- builds a distribution (tar.gz)
- uploads your distribution (tar.gz) to CPAN using credentials from ~/.pause
- tags your release in git
- pushes your code and tags to github
Quick summary of everything in this talk
Quick summary: Setup
Install stuff
cpanm Carton
cpanm Minilla
Add your pause credentials to ~/.pause
user <YOUR-PAUSE-ID>
password <your-password>
Quick summary: First release
# create a new project with Minilla
minil new Space::Cowboy
cd Space-Cowboy
# write your code
vi lib/Space/Cowboy.pm t/space-cowboy.t
# manage your dependencies with Carton
vi cpanfile
# release
git commit -a
carton exec minil release
Quick summary: Followup releases
# hack, hack, hack
vi ...
git commit ...
# release
carton exec minil release