There is one Tomtit to make it!
Tomtit is a brand new Perl6 task runner allow you to automate routine tasks easily.
In this post I am going to show how to use Tomtit to automate typical tasks happening during developing of Perl6 applications.
To get a glimpse of what Tomtit is - please read this post.
Gettings stared
Let's install Tomtit first.
zef install Tomtit
Now let's check an application source code from remote git repository:
git clone $git-repo
4 cases
Let's limit the post to 4 typical cases often happening when developing and releasing Perl6 application:
- set up git repository
- test local source code
- install local source code
- release CPAN module
Tomtit scenarios
Now we to define tomtit scenarios for every mentioned case. We place scenarios inside .tom
directory, these are plain Perl6 scripts calling Tomtit API.
Case 1. Set up git repository.
When start on new machine I always have to set my user/email so I can push to remote. I also want git keep password cache for me. It's tedious to it manually every time, so let's automate this:
.tom/set-get.pl6:
task-run "set git", "git-base", %(
email => 'melezhik@gmail.com',
name => 'Alexey Melezhik',
config_scope => 'local',
set_credential_cache => 'on'
);
My workflow makes it a bit complicated because I push source code both to GitHub and BitBucket repositories.
It's easy to create scenarios for push operations:
.tom/push-gh.pl6:
# push to github
bash "git push origin master";
.tom/push-bb.pl6:
# push to bitbucket
bash "git push bb master";
.tom/push.pl6:
# push to both
EVALFILE ".tom/push-bb.pl6"
EVALFILE ".tom/push-gh.pl6"
Case 2. Test local source code.
For many Perl6 projects it's just as zef test
to run unit tests inside t/
directory , but I also have Outthentic tests. I also like to validate my META6.json file to see if I have any JSON-related errors in it:
.tom/test.pl6:
task-run "check json files", "json-lint", %( path => "{$*CWD}" );
bash "zef test .";
bash "sh run-test.sh";
Case 3. Install source code.
It's just zef install
command for current working directory.
.tom/install.pl6:
bash "zef install . --force-install";
Case 4. Release CPAN module
I use App::Mi6 tool to release my Perl6 modules to CPAN, it requires credentials set through ~/.pause
, it seems handy to define a dedicated scenario for this:
.tom/set-pause.pl6:
my $password = prompt("enter your CPAN password: ");
template-create "/home/{%*ENV<USER>}/.pause", %(
mode => '700',
variables => %(
user => 'melezhik',
password => $password
),
source => q:to /TEMPL/
user [%= user %]
password [%= password %]
TEMPL
);
The release scenarios is a simple as:
.tom/release.pl6:
zef "App::Mi6";
bash "mi6 release";
Workflow
As I have my tomtit scenarios get ready, my development workflow is dead simple and clear, when everything is in place:
Checkout an application source code:
git clone $git-repo
Install Tomtit:
zef install Tomtit
List available tomtits scenarios:
tom --list
Modifying source code
nano foo/bar/app.pl6
Run tests:
tom test
Install:
tom install
Setup git repo:
tom git-setup
Commit changes
git commit -a
Push changes:
tom push
Setup PAUSE account credentials:
tom set-pause
Release to CPAN:
tom release
Conclusion
That's it. In this post we've seen how to automate some typical routine operations happening when developing Perl6 applications.
There is one Tomtit to make it!
Thanks for reading