Managing Complexity with Module::Release

3,181 views
3,043 views

Published on

Automating Perl module release with Module::Release, including distribution verification, automating testing, and anything else you need to check before you release your module on the world.

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,181
On SlideShare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Managing Complexity with Module::Release

  1. 1. Managing Complexity with Module::Release brian d foy, Stonehenge Consulting Ser vices brian@stonehenge.com Nordic Perl Workshop June 16, 2006 www.stonehenge.com
  2. 2. Releasing code is hard...
  3. 3. actually, it’s too easy...
  4. 4. Releasing good code is hard...
  5. 5. Did I ... ? test everything disttest everything check in the sources include new files in MANIFEST update Changes and README
  6. 6. Then I have to... upload to PAUSE claim in PAUSE upload to Sourceforge overly-complicated Sourceforge file release tag the release in source control announce the release
  7. 7. When I find out... what the PAUSE indexer thinks what CPAN Testers think if I’m missing something in PREREQ_PM if I’ve included too little or too much how poor my kwalitee is
  8. 8. Rinse, repeat...
  9. 9. Annoy users
  10. 10. Now do that for 50 distributions
  11. 11. I make mistakes because... Repetitive tasks are boring Focused on bug squashing Want to release code Need to fix a different module Want to do something else Want to do anything else
  12. 12. Automate!
  13. 13. Computers love... doing the same thing over and over(?: and over)+ doing it the same way every time doing it again if I mess up
  14. 14. release(1) Part of Module::Release
  15. 15. Automate steps sub test { my $self = shift; print quot;Checking make test... quot;; unless( -e 'Makefile.PL' ) { print quot; no Makefile.PL---skippingnquot;; return; } my $tests = $self->run( quot;$self->{make} test 2>&1quot; ); die quot;nERROR: Tests failed!n$testsnnquot; unless $tests =~ /All tests successful/; print quot;all tests passnquot;; }
  16. 16. Create process my $release = Module::Release->new( %params ); $release->clean; $release->build_makefile; $release->test; $release->dist; $release->dist_test; $release->check_cvs; $release->clean; $release->build_makefile; $release->dist; $release->check_for_passwords; $release->ftp_upload; $release->pause_claim;
  17. 17. Fearless releases Problems are fatal Errors tell me what to fix Nothing updates until everything is good Too bad there isn’t unrelease(1)
  18. 18. New problem, new step
  19. 19. Did I update $VERSION? Anyone want to write Test::GreaterVersion?
  20. 20. Future directions Pluggable modules Support for more checks Not just for Perl More canned scripts working title: Starburst

×