Skip to main content

🔧 Pitcrew

AsyncIO-powered python DSL for running commands locally, on docker, or over ssh.

CircleCI

What does Pitcrew do?

Pitcrew can run commands $ crew sh date
...or over ssh $ crew sh -p providers.ssh -P '{"hosts": ["192.168.0.1"]}' date
on hundreds of hosts! $ crew sh -p providers.ssh -P '{"hosts": ["192.168.0.1-100"]}' date
Crew can also run tasks $ crew run install.homebrew
Tasks are either other shell commands, or other tasks, for example, this provisions Cloudfront, SSL and S3 and builds and deploys docs to pitcrew.io $ crew run examples.deploy_pitcrew
You can list available tasks $ crew list
...edit an existing task $ crew edit examples.deploy_pitcrew # opens in $EDITOR
or create a new task! $ crew new some.new.task

Installation

From binary

To install pitcrew in your home directory, run the following:

curl -fsSL "https://github.com/joshbuddy/pitcrew/releases/latest/download/crew-$(uname)" > crew
chmod u+x crew
./crew run crew.install --dest="$HOME/crew"

From PyPi

To install from the Python Package Index, run the following:

pip install pitcrew
crew run crew.install --dest="$HOME/crew"

From source

git clone https://github.com/joshbuddy/pitcrew
cd pitcrew
python3.6 -m venv env
source env/bin/activate
pip install -e .

Concepts

A command or set of commands is called a task. A context runs tasks either locally, on docker or over ssh. A provider generates contexts.

Tasks

Tasks are either composed from other tasks or invoking a command on a shell.

An example of a task might be reading a file. fs.read(path) reads a file as bytes and returns it:

pitcrew/tasks/fs/read.py

import base64
from pitcrew import task


@task.arg("path", desc="The file to read", type=str)
@task.returns("The bytes of the file")
class FsRead(task.BaseTask):
    """Read value of path into bytes"""

    async def run(self) -> bytes:
        code, out, err = await self.sh_with_code(f"cat {self.params.esc_path}")
        assert code == 0, "exitcode was not zero"
        return out

Other tasks might include writing a file, installing xcode or cloning a git repository. All the currently available tasks are listed at docs/tasks.md. The api available in a task is available at docs/api.md#crewtask.

Contexts

An example of a context might be over ssh, or even locally. Learn more about contexts at docs/api.md#crewcontext.

Providers

A provider is a task with a specific return type. The return type is an async iterator which returns contexts.

Usage

For detailed usage, see docs/cli.md for more details.

Run a command

Pitcrew allows running a command using bin/crew sh -- [shell command].

For example crew sh ls / will list the "/" directory locally.

You can run this across three hosts via ssh using crew sh -p providers.ssh -P '{"hosts": ["192.168.0.1", "192.168.0.2", "192.168.0.3"]}' ls /.

Run a task

Pitcrew allows running a task using crew run [task name] <task args>. This will normally target your local machine unless you use the -p flag to select a different provider.

See available tasks

To see all the available tasks run crew list. This will show all available tasks which are stored in crew/tasks.

Make a new task

To see all the available tasks run crew new [task_name]. This will create a template of a new task.

Run tests

To run an ad-hoc command use . For tasks use crew run [task-name] <args>.

Get CLI help

To see the whole list of commands available from the command-line, run crew help.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pitcrew-0.0.3.tar.gz (18.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pitcrew-0.0.3-py2.py3-none-any.whl (26.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pitcrew-0.0.3.tar.gz.

File metadata

  • Download URL: pitcrew-0.0.3.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pitcrew-0.0.3.tar.gz
Algorithm Hash digest
SHA256 5dbeb2a6c609bd3ebc80e2c1cc781327d90040e77a9f13004438df2d81afa082
MD5 2f4c689e8140e7920d9763b6ecdb5225
BLAKE2b-256 5e5e02b53ad83abc9160a8e1d3e41b92a107059726267322afdb617a70c9144f

See more details on using hashes here.

File details

Details for the file pitcrew-0.0.3-py2.py3-none-any.whl.

File metadata

  • Download URL: pitcrew-0.0.3-py2.py3-none-any.whl
  • Upload date:
  • Size: 26.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pitcrew-0.0.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 258a379fb87d1bbecedb4ed6a26a65bd07ec33ff45fcf315358cd69f78420091
MD5 f5aa574df87140c898842e3c01c2e9f0
BLAKE2b-256 04304875e0853ad392654390863b75d5e3c9e3801f7580371bcd966d89c55faa

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.3 This release

2 files

0.0.2

2 files

0.0.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page