Stairs

It's a pain to set up new developers on your codebase. Stairs makes it easy.

The Problem

Apps these days come with dependencies—S3, Facebook, Twitter, Zencoder, etc. We can stub certain things in development, but we also want to make sure we're developing in a realistic setting. Satisfying all of these requirements can really slow down onboarding time when adding new developers to your existing codebase.

The Solution

Every codebase should come with a script to set itself up. An interactive README, if you will. Stairs aims to provide the tools to make writing these scripts fast and easy. Scripts try to automate as much as possible and provide interactive prompts for everything else.

Build Status Code Climate

Setup

Rails

Add Stairs to your Gemfile:

gem "stairs"

Define your script in setup.rb at the root of your project.

Not Rails

Same as above, but you'll have to manually add the Stairs Rake tasks to your Rakefile.

require "stairs/tasks"

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.

bundle

setup :secret_token

setup :s3
setup :zencoder, required: false

setup :misc do
  env "CHECK_IT", provide("Cool check it value")
end

rake "db:setup"

finish "Just run rails s and sidekiq to get rolling!"

See Example CLI

Collecting values

value = provide "Something"
value = provide "Another", required: false
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

Stairs currently supports writing environment variables for rbenv-vars, RVM, and dotenv.

env "NAME", value

Writing files

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

Misc helpers

Run bundle to install gems

bundle

Run rake tasks

rake "task_name"

Display a message when setup completes

finish "Now that you're done, go have a drink!"

Defining setup steps

setup :a_cool_service do
  # ...
end

Using predefined steps (aka plugins)

setup :s3
setup :facebook, required: false

Plugins for common setups

Built-in

  • :secret_token sets a secure random secret token
  • :postgresql quickly setup database.yml for use with PostgreSQL
  • :facebook interactive prompt for setting Facebook app credentials

Available as independent gems

Any plugin that has specific dependencies on third party gems is shipped independently to avoid maintaining those dependencies within Stairs.

Defining custom plugins

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

Example CLI

Given the example script above, the CLI would look like this:

$ rake newb
Looks like you're using rbenv to manage environment variables. Is this correct? (Y/N): Y
= Running script setup.rb
== Running bundle
...
== Completed bundle
== Running S3
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
== Completed S3
== Starting Zencoder
This step is optional, would you like to perform it? (Y/N): N
== Completed Zencoder
== Starting Misc
Cool check it value: w00t
== Completed Misc
== Running db:setup
...
== Completed db:setup
== All done!
Run rails s and sidekiq to get rolling!

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

Credits

Contributors

philosophie

This gem is maintained partially during my open source time at philosophie.