A command-line client for the nodester platform
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
doc
lib
man1
Makefile
README.md
package.json
yanc.js

README.md

yanc: Yet Another Nodester Client

STATUS: Defunct - When I started this CLI, there was no official nodester CLI. Just around when I finished it, the official CLI client was released. It was still a fun project because I got to learn a lot about writing CLI apps in node.js, but you're much better off taking a look at the official client.

WARNING: THE README IS A LIE (for now)

In the spirit of Readme-Driven Development, this document describes the intended 0.1.0 behavior. The management bears no responsibility for divergent, or even deviant, behavior on the part of the software in the current pre-release state.

What is this I don't even.

nodester is an open-source platform for hosting node apps, and I think that's the bee's knees. However, their API - while delicious and moist - is a bit cumbersome to use with only curl. So, to fill this gap, yanc should give you a nice command-line tool to interface with it. If you've used the heroku CLI, you'll know what we're going for here.

Goals: assume only the tools you'd need anyway, namely node, npm, and git. Whenever possible, yanc uses simple conventions to avoid tedious option-passing. See Configuration for more.

Quick start

To get started quickly, install with npm:

$ npm install yanc

If you've already registered with nodester, deploying a new app is easy:

$ cd ~/projects/pantscompetition/
$ yanc create
OK: app pantscompetition created, added remote nodester
$ yanc push
OK: pushed branch master to nodester
$ yanc start
OK: app pantscompetetion started

That should do it!

Usage

Check nodester status

$ yanc status
# Checking status on api.nodester.com... done
OK: The system is up!
Apps hosted:      152
Apps running:      74

Request a coupon

$ yanc coupon
# Requesting coupon for email-from@my-git-config.com... done
OK: Coupon requested. You will receive an email when capacity allows.
OK: Saved email address and api server in the global config

Register a user

$ yanc register MYCOUPONCODE
INFO: Registering user with the following information:
Username: fancypants
   Email: fancy@pants.com
  Coupon: MYCOUPONCODE
 SSH Key: /Users/fancypants/.ssh/id_rsa.pub
  Server: api.nodester.com
INFO: If anything is incorrect, abort with Ctrl-C and use "nodester config"
Password: ********
Confirm password: ********
# Registering user "fancypants"... done
OK: User created
OK: Saved user information in global config

Creating an app

$ yanc create
# Creating application "pantscompetetion"... done
OK: Application created successfully
Name:     pantscompetetion
Running:  false
Port:     8375
Git repo: ec2-user@nodester.com:/home/ec2-user/hosted_apps/fancypants/222-c4d515bd6f0df4ac625d33daab98f4e6.git
Start:    server.js
PID:      unknown
OK: Added git remote: yanc
OK: Saved app name, remote, and branch settings

Pushing app

$ yanc push
# Pushing branch "master" to remote "yanc"... 

Counting objects: 103, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (102/102), done.
Writing objects: 100% (103/103), 39.22 KiB, done.
Total 103 (delta 44), reused 0 (delta 0)
remote: From /home/ec2-user/hosted_apps/fancypants/222-c4d515bd6f0df4ac625d33daab98f4e6.git/.
remote:  * [new branch]      master     -> origin/master
remote: cat: .app.pid: No such file or directory
remote: kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
To ec2-user@nodester.com:/home/ec2-user/hosted_apps/fancypants/222-c4d515bd6f0df4ac625d33daab98f4e6.git
* [new branch]      master -> master
OK: Push successful

Starting/stopping app

$ yanc start
# Starting app "pantscompetition"... done
OK: App domainzomg started
$ yanc stop
# Stopping app "pantscompetition"... done
OK: App domainzomg stopped

Installing/upgrading packages

$ yanc npm install express
OK: installed package express@1.0.0 in app pantscompetition
$ yanc npm uninstall express
OK: uninstalled package express in app pantscompetition

Or, install all advertised dependencies from package.json

$ yanc npm deps
# resolving dependencies from package.json...
OK: installed package express@1.0.3 
OK: installed package socket.io@0.6.8
OK: installed package jquery@1.4.4
OK: installed package request@1.0.0
OK: installed package jsdom@0.1.20

Configuration

Keys

yanc has a small set of configuration keys, and it'll try to guess sensible defaults so you don't have to type them.

  • base
    • Server where yanc expects to talk to the API service
    • Defaults to api.nodester.com
  • email
    • The email you want to receive a coupon to or register your user with
    • Defaults to your email from git, as reported by git config user.email
  • user
    • Your username on the nodester system
    • Defaults to your system user name, as reported by whoami
  • key
    • Path to an SSH identity file
    • Defaults to ~/.ssh/id_rsa.pub or ~/.ssh/id_dsa.pub, if available, in that order
  • app
    • Name of the application on nodester
    • Defaults to the current directory name
  • start
    • Name of the script to run forever
    • Defaults to "main" as described in package.json, falls back to server.js or app.js if available, and in that order
  • pass
    • Password to authenticate with nodester
    • Defaults to ... nothing. Prompt the user every time by default.
  • remote
    • Name of git remote to connect to nodester
    • Defaults to "nodester"
  • branch
    • Name of branch to push to nodester
    • Defaults to "master"

Setting and Getting

You can specify a value for any key by passing --configkey="value" on the command line.

You can also use nodester config:

$ yanc config
user   fancypants                         # source: whoami
email  fancy@pants.org                    # source: git config user.email
key    /home/fancypants/.ssh/id_rsa.pub   # source: default
app    pantscompetition                   # source: package.json
start  app.js                             # source: package.json

Setting a config variable works, too:

$ yanc config app "pantscompetition"
# in a .git project, setting local configuration
app    pantscompetition                   # source: git config nodester.app
$ yanc config pass --prompt --global
Password:
Confirm:
# set global configuration
pass   **************                     # source: git config nodester.pass
$ yanc config user "fancy" --global
# set global configuration
user   fancy                              # source: git config nodester.app

Fallback logic

The fallback logic is:

  1. First, if a value is specified on the command-line via --configkey="value", use that.
  2. Next, check the value via git config for nodester.$VAR.
  3. Third, check for a sensible default.
  4. If we couldn't use a sensible default, prompt the user.

In practice, this gives you an enormous amount of flexibility. Enough flexibility to shoot yourself in the foot, and nobody likes gangrene, so I recommend Keeping It Simple, Señor!