No commit activity in last 3 years
No release in over 3 years
A small helper utility for your app to declare and setup its system dependencies
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.12
~> 2.14
~> 10.0
~> 3.0

Runtime

~> 1.6
 Project Readme

Kapost::Bootstrapper

Gem VersionCircleCICode ClimateTest Coverage

Used by Kapost apps to get themselves bootstrapped. To enhance developer happiness, every app should have a single command to get it set up (./bin/setup) and one command to run the whole thing (./bin/run). This gem attempts to help with the first script by encapsulating a useful set of helper functions that makes detecting and installing dependencies simpler.

Installation

Add a file to your project called bin/setup with these contents:

#!/usr/bin/env bash

set -euvxo pipefail

gem which kapost/bootstrapper || gem install kapost-bootstrapper

./bin/bootstrap

Then, use the gem's helper functions in your file called ./bin/bootstrap. See usage for examples.

Usage

Example ./bin/bootstrap:

#!/usr/bin/env ruby

require "pathname"

require "kapost/bootstrapper"

$LOAD_PATH << File.join(__dir__, "..", "lib")
app_root = Pathname.new File.expand_path("../../",  __FILE__)

Kapost::Bootstrapper.new do
  puts "== Checking application dependencies =="

  # only run these commands on this platform. See also `#ubuntu`.
  osx do

    # `check` looks for the command specified by name, and prints the help if
    # it isn't present.
    check "brew", "Homebrew isn't installed. How did you even get this far?"
  end

  # The optional `version` attempts to do a substring match on `{cmd} --version`.
  # Also note the use of HEREDOC for the help string.
  required_ruby_version = File.read(app_root.join(".ruby-version")).strip
  check "ruby", <<~HELP, version: required_ruby_version
    Wrong Ruby version, please install #{required_ruby_version}, and make
    sure it is the current Ruby.  The DevOps team recommends
    [chruby](https://github.com/postmodern/chruby#readme) and
    [ruby-install](https://github.com/postmodern/ruby-install#readme). Both
    are available in Homebrew.
  HELP

  # When `#check` is given a block, it is executed rather than the built-in check.
  # If the block returns true-ish, it is assumed to have worked, and the bootstrap
  # process continues. When false-ish, the help is printed and boostrap is halted.
  check "elasticsearch" do
    # The `#installed?` helper does the same as the default `#check`, and merely checks
    # if the command is available.
    if installed?("elasticsearch")
      true
    else
      # Use `#sh` to execute shell commands.
      osx    { sh "brew install elasticsearch" }
      ubuntu { sh "apt-get install elasticsearch" }
    end
  end

  check "postgresql" do
    if installed?("psql")
      true
    else
      osx    { sh "brew install postgresql" }
      ubuntu { sh "apt-get install postgresql" }
    end
  end

  # `#check_bundler` checks if Bundler is installed, and installs it if not.
  # `#bundle` does exactly what you'd think.
  check_bundler && bundle

  # Test if an environment variable is present
  check "env", <<~HELP do
    You need to load the environment variables located in `.env` into your
    local shell environment.  The DevOps team recommends
    [direnv](http://direnv.net/) (available in homebrew).
  HELP
    !ENV["PORT"].nil?
  end

  # Check different variables, with different instructions.
  check "AWS tokens", <<~HELP do
    You need to set "AWS_REGION", "AWS_ACCESS_KEY_ID" and
    "AWS_SECRET_ACCESS_KEY" in your local shell environment. Contact the
    #devops channel if you don't already have some. The DevOps team recommends
    setting them in a `.env.local` file, and using [direnv](http://direnv.net/)
    (available in homebrew) to load them.
  HELP
    !ENV["AWS_ACCESS_KEY_ID"].nil?
  end

  # At this point, all dependencies are assumed to be installed, and the app should be
  # bootable. Do some further checks and setup, like verifying DB connections and
  # migrating, etc...
  sh "rake setup"
end

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/kapost/kapost-bootstrapper.