Si eres un hardcore user de linux seguramente prefieres usar un Makefile, si eres sysadmin o devops este post no está dirigido para ti. Mi punto es que un Makefile es muy útil para cosas simples, cuando no se tiene un conocimiento extenso en bash como yo, es difícil mantener un archivo muy grande en bash

¿Qué es Thor?

Es una gema en ruby que te permite crear command line tools de una manera rápida y natural si haz usado el lenguaje. Así se ve un comando Thor en acción

~/lab/blog on master*
$ tools
Commands:
  tools help [COMMAND]  # Describe available commands or one specific command
  tools run_container   # runs docker container
  tools serve           # starts development server at port 4000
  tools stop            # stops container

El api que nos ofrece Thor es genial debido a que puedes organizar tu código en gemas y distribuir herramientas a tus usuarios

class BlogTools < Thor
  include Thor::Actions

  desc 'serve', 'starts development server at port 4000'
  def serve
    run 'bundle exec jekyll serve'
  end

  desc 'run_container', 'runs docker container'
  def run_container
    run "docker run --rm -p 4000:80 --name blog-#{version} -d blog"
  end

  desc 'stop', 'stops container'
  def stop
    run "docker stop blog-#{version}"
  end
end

Aquí tenemos un Makefile feliz

VERSION=$(shell cat .version)

serve:
	bundle exec jekyll serve

build:
	bundle exec jekyll build
	docker build --no-cache -t blog .

run: build
	docker run --rm -p 4000:80 --name blog-${VERSION} -d blog

stop:
	docker stop blog-${VERSION}