Skip to content
Deployment tool for node
CoffeeScript JavaScript
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Description Deployment tool for node
Node Version >= 0.4


Running tasks

$ shake setup:deploy:something["some arg", true, 2]:status

Defining Tasks

Add a or .shake.js file to your project root.

A task is a function that takes 3 arguments. Any arguments inside [ and ] will be applied to the task function after the initial 3.

module.exports =
  sometask: (local, remote, done) ->
    # local = local machine
    # remote = remote machine (defined in target)
    local.exec """
    ls -la
    mkdir test
    """, (res) ->
      # res = array of stdout+stderr
      remote.exec "ls -la", (res) ->
        done() # Call this when the task is finished

Example config

Here is an example config demonstrating basic functionality:

# This is a non-standard config used only within this config
# you can make this file look like whatever you want as long as you export
# your tasks and target
app =
  sudo: "sudo" # Change this to "" to disable sudo
  parent: '/var/www/'
  name: 'your cool app name'
app.repository = " cool username/#{}.git"
app.folder = "#{app.parent}#{}/"
app.start = "coffee #{app.folder}"
app.log = "/var/log/#{}.log"

module.exports =
  target: 'cool server'
  clean: (local, remote, done) ->
    remote.exec """
    #{app.sudo} rm -rf #{app.folder}
    """, done

  setup: (local, remote, done) ->
    remote.exec """
    #{app.sudo} mkdir -p #{app.folder}
    #{app.sudo} chown -R $NAME:$NAME #{app.folder}
    git clone #{app.repository} #{app.folder}
    cd #{app.folder}
    npm install
    """, done

  deploy: (local, remote, done) ->
    remote.exec """
    cd #{app.folder}
    git pull
    sudo killall node
    npm install
    #{app.sudo} stop #{}
    #{app.sudo} start #{}
    """, done

  start: (local, remote, done) ->
    remote.exec "#{app.sudo} start #{}", done

  stop: (local, remote, done) ->
    remote.exec "#{app.sudo} stop #{}", done

  restart: (local, remote, done) ->
    remote.exec "#{app.sudo} restart #{}", done

  log: (local, remote, done) ->
    remote.exec "tail -n 100 #{app.log}", done

  status: (local, remote, done) ->
    remote.sexec "ps -eo args | grep '#{}' | grep -v grep", (res) ->
      done if res then "Online" else "Offline"
Something went wrong with that request. Please try again.