Stairs

A DSL and collection of plugins for easy setup of projects on new development environments. Write a script that new devs can run for an interactive setup. For environment variables, Stairs supports rbenv-vars, RVM, and dotenv.

Setup

  1. Install gem stairs

  2. Require tasks in Rakefile

    require "stairs/tasks"
    
  3. Define your script in setup.rb at the root of your project

Usage

In an app with a setup.rb, just run the rake task:

$ rake newb

Defining scripts

A script composes many steps that setup a project. Note: optional steps are not yet implemented.

setup :secret_token

setup :s3
setup :zencoder, required: false

env "CHECK_IT", provide "Cool check it value"

puts "Sweet you're good to go. Just run `rails s` and `sidekiq` to get rolling!"

Example CLI

Given the above script, the CLI might look like this. Note: some of this is desired future functionality (bundle/db tasks, spacing, last words).

$ rake newb
... bundle install
... db setup + seed

== Starting S3 Setup
AWS access key: 39u39d9u291
AWS secret: 19jd920i10is0i01i0s01ks0kfknkje
Do you have an existing bucket? (Y/N): Y
Bucket name (leave blank for app-dev): my-cool-bucket

== Starting Zencoder
This step is optional, would you like to perform it? (Y/N): N

== Starting misc
Cool check it value: w00t

== All done!
Run rails s and sidekiq to get rolling!

DSL

Collecting values

value = provide "Something"
value = provide "Another", required: false # Not fully implemented
provide "More", default: "a-default"

Asking questions

i_should = choice "Should I?"
choice "Should I?" do |yes|
  do_something if yes
end
dinner = choice "Meat or vegetables?", ["Meat", "Vegetables"]

Setting env vars

env "NAME", value

Writing files

write "awesome: true", "config/settings.yml"
write_line "more: false", "config/settings.yml"

Defining setup steps

Note: this block syntax is not yet implemented, use predefined steps for now.

setup :a_cool_service do
  ## ..
end

Using predefined steps (aka plugins)

setup :s3

Plugins for common setups

Built-in

  • :secret_token sets a secure random secret token

Available as extension gems

Defining custom plugins

Steps inherit from Stairs::Step, have a title, description, and implement the run method. See those included and in the various extension gems for examples.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request