roadiev0.1.0

When CI is down,
the roadie ships it.

Build on your machine, copy the artifact, restart the service, check it: the deploy you keep doing by hand, as a pipeline per project. One JSON config per repo, picked from a menu or run from a script.

~/projects/backend-api
$ node roadie.js --init        # write config.json
$ node roadie.js --validate    # check it, run nothing
$ node roadie.js --list        # every project and its steps
$ node roadie.js               # pick a project, ship it

A run, start to finish.

Every step numbered and timed. The first failure stops the run; a banner and the terminal bell say how it went.

roadie running a four-step project and ending with DEPLOY OK roadie --list: three projects with their targets and steps

In the config

Four steps, every deploy.

config.json
{ "type": "local",    "run": "./gradlew assemble" }
{ "type": "transfer", "from": "app.jar", "to": "/srv/app/" }
{ "type": "remote",   "run": "systemctl restart app" }
{ "type": "confirm",  "prompt": "Stopped? Enter." }
per OS
"cwd": {
  "win":     "C:\\projects\\backend-api",
  "default": "~/projects/backend-api"
}

# also run, from, identityFile and a step's cwd
# keys: mac, win, linux, default (or *)

local runs on this machine, transfer copies with scp, remote runs over ssh, confirm waits for Enter. A value can differ per OS, so one config works on a Mac and a PC.

Safety

Nothing runs half-checked.

Before stepsAn SSH probe, whenever the project has a target
On failureThe run stops at the first step that fails
AuthKeys only; BatchMode, so it never waits for a password
Host keysaccept-new: a new host is trusted, a changed key refuses
Validate--validate checks the schema and runs nothing
Exit codes0 ok, 1 a failed step or a bad config, 2 an unknown flag

Checked first

Checked before anything ships.

Counts every project and step, and says which ones deploy over SSH and which leave a note. A config error is reported here, at load time, not halfway through a deploy.

node roadie.js --validate
✓ Config OK (config.json)
  3 projects, 22 steps total
  steps: 12 local, 4 transfer, 4 remote, 2 confirm
  2 project(s) with ssh, 2 with notify

Get roadie

Clone it. Write one config.

git

Clone

No install

GitHub
$ git clone https://github.com/ugurcandede/roadie
>_

Start

A config from the template

Quick start
$ node roadie.js --init
ssh

Try it

Against a local Docker sshd

Testing
$ node roadie.js --sandbox-up

Options take the = form: --project=backend-api. Password authentication is not supported, on purpose.

Read the guide →

RequiresNode.js 18 or newer
SSHOpenSSH client (ssh, scp); built into macOS, Linux and Windows 10+
AuthKey-based: ssh-agent, identityFile or ~/.ssh/config
SystemsmacOS, Linux, Windows
Written inJavaScript, Node.js standard library
DependenciesNone
Testsnode:test: unit, CLI, and a Docker sshd sandbox
LicenseMIT