Distributing portable scripts with Sparrow

melezhik

Alexey Melezhik

Posted on November 20, 2018

Distributing portable scripts with Sparrow

sparrow tasks

So, you have a lot of scripts you want to port to other server or share with your team.

While straightforward git push, git pull approach works well, you still have things to care about:

  • Setting up scripts input parameters
  • Installing scripts dependencies
  • Generating scripts documentation
  • Scripts versioning

With Sparrow - scripts management platform written in Perl - all those tasks could be done with minimal fuss.

Develop scripts

As Sparrow for today supports many languages, you are almost not limited, choose the one you want:

  • Perl
  • Ruby
  • Python
  • Bash
  • Powershell

Both Windows and Linux platforms are supported.

For simplicity reasons I will show you an example for Bash:

cat $story.bash

echo "hello world"
Enter fullscreen mode Exit fullscreen mode

Defining default values for input parameters.

It's easy. Just create configuration called suite.yaml to define deafult configuration data:

cat suite.yaml

   name: Sparrow
Enter fullscreen mode Exit fullscreen mode

Then adjust the script to read the configuration file:

echo "hello world, my name is " $(config name)
Enter fullscreen mode Exit fullscreen mode

Defining script metadata

We will use metadata to install scripts across different servers and into local system, we can define many attributes here in metadata file, meanwhile it's just a script name:

cat sparrow.json

{
  "name" : "hello-world"
}

Enter fullscreen mode Exit fullscreen mode

Testing script

Install it locally:

sparrow plg install . --local

sparrow root: [/root/sparrow]
install from source: /root/projects/dev.to/plugins ...
install public@hello-world version 0 from local source
install deps for /root/sparrow/plugins/public/hello-world ...
Enter fullscreen mode Exit fullscreen mode

And run it:

sparrow plg run hello-world

sparrow root: [/root/sparrow]
plugin is not listed in the index, locally installed one? at /usr/local/share/perl5/Sparrow/Commands/Plugin.pm line 415.
2018-11-20 08:53:57 : [plg] hello-world [path] /
hello world, my name is  Sparrow
ok      scenario succeeded
STATUS  SUCCEED
Enter fullscreen mode Exit fullscreen mode

Adding documentation

It's simple, just create README.md file having documentation in markdown format:

cat README.md

# Description

This is hello-world script

# Usage

sparrow plg run hello-world

# Parameters

## Name

# Author

Alexey Melezhik
Enter fullscreen mode Exit fullscreen mode

Let's reinstall script, to add documentation bit:

sparrow plg install . --local --force

Now we can see script's documentation:

sparrow plg man hello-world

Overriding default values for configuration file

It's just a little extra step, we need to create sparrow task to run the script:

sparrow project create birds

sparrow task add birds crow hello-world

project birds successfully created
task - set plugin to public@hello-world
task birds/crow successfully created
Enter fullscreen mode Exit fullscreen mode

sparrow task ini birds/crow

name: Crow
Enter fullscreen mode Exit fullscreen mode

The task we've just created overrides default values for hello-world script, let's run it:

sparrow task run birds/crow

sparrow root: [/root/sparrow]
2018-11-20 09:08:50 : [task] crow [path] /
hello world, my name is  crow
ok      scenario succeeded
STATUS  SUCCEED
Enter fullscreen mode Exit fullscreen mode

Save script and configuration data

It's just one simple command and push all the data to git repository:

cd ../ && sparrow task save $PWD

sparrow root: [/root/sparrow]
read task ignore file from /root/task.ignore ...
save current tasks to [/root/projects/dev.to] ...
=========================
birds/crow ...
Enter fullscreen mode Exit fullscreen mode

git add . && git commit -a -m "my cool scripts" && git push

Distributing scripts

On target server just git clone scripts repository:

git clone $git-repo.tasks ~/scripts-repo

And then run:

sparrow plg install ~/scripts-repo/plugins --local --recursive

sparrow root: [/root/sparrow]
install from source: /root/scripts-repo/plugins ...
install public@hello-world version 0 from local source
install deps for /root/sparrow/plugins/public/hello-world ...

Enter fullscreen mode Exit fullscreen mode

sparrow task restore ~/scripts-repo

sparrow root: [/root/sparrow]
restore tasks from [/root/scripts/repo] ...
=========================
restore birds/crow ...
plugin /root/sparrow/plugins/public/hello-world/ installed locally, nothing to do here ...
Enter fullscreen mode Exit fullscreen mode

Now you have all you scripts up and running on new server:

sparrow task run birds/crow

Further reading

Handling dependencies

It's dead easy. Sparrow supports many popular package managers ( cpan, rubygems, pip ), just place proper dependency file to your script's folder ( cpanfile, Gemfile, requirements.txt )

Scripts versioning

Just bump script's version inside metafile to let users install and use the latest version:

{

   "name" : "hello-world",
   "version" : "0.1.1"
}
Enter fullscreen mode Exit fullscreen mode

Thank you for reading.

💖 💪 🙅 🚩
melezhik
Alexey Melezhik

Posted on November 20, 2018

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related