gdotdesign/elm-github-install

View on GitHub
packaging/Rakefile

Summary

Maintainability
Test Coverage
# For Bundler.with_clean_env
require 'bundler/setup'
require_relative '../lib/elm_install'

PACKAGE_NAME = 'elm-install'.freeze
VERSION = ElmInstall::VERSION
TRAVELING_RUBY_VERSION = '20150715-2.2.2'.freeze

desc 'Package your app'
task package: ['package:linux:x86', 'package:linux:x86_64', 'package:osx', 'package:win32']

namespace :package do
  desc "Package your app for Windows x86"
  task :win32 => [:bundle_install, "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-win32.tar.gz"] do
    create_package("win32", :windows)
  end

  namespace :linux do
    desc 'Package your app for Linux x86'
    task x86: [
      :bundle_install,
      "traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86.tar.gz"
    ] do
      create_package('linux-x86')
    end

    desc 'Package your app for Linux x86_64'
    task x86_64: [
      :bundle_install,
      "traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz"
    ] do
      create_package('linux-x86_64')
    end
  end

  desc 'Package your app for OS X'
  task osx: [
    :bundle_install,
    "traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx.tar.gz"
  ] do
    create_package('osx')
  end

  desc 'Install gems to local directory'
  task :bundle_install do
    sh 'rm -rf vendor'
    sh 'rm -rf tmp'
    sh 'mkdir tmp'
    sh 'cp Gemfile Gemfile.lock tmp/'
    Bundler.with_clean_env do
      sh 'cd tmp && env BUNDLE_IGNORE_CONFIG=1 bundle install --path ../vendor --without development'
    end
    sh 'rm -rf tmp'
    sh 'rm -f vendor/*/*/cache/*'
  end
end

file "traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86.tar.gz" do
  download_runtime('linux-x86')
end

file "traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz" do
  download_runtime('linux-x86_64')
end

file "traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx.tar.gz" do
  download_runtime('osx')
end

file "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-win32.tar.gz" do
  download_runtime("win32")
end

def create_package(target, os_type = :unix)
  package_dir = "#{PACKAGE_NAME}-#{VERSION}-#{target}"
  sh "rm -rf #{package_dir}"
  sh "mkdir #{package_dir}"
  sh "mkdir -p #{package_dir}/lib/app"
  sh "mkdir #{package_dir}/lib/ruby"
  sh "tar -xzf traveling-ruby-#{TRAVELING_RUBY_VERSION}-#{target}.tar.gz -C #{package_dir}/lib/ruby"

  if os_type == :unix
    sh "cp wrapper.sh #{package_dir}/elm-install"
    sh "chmod +x #{package_dir}/elm-install"
  else
    sh "cp wrapper.bat #{package_dir}/elm-install.bat"
  end

  sh "cp -pR vendor #{package_dir}/lib/"
  sh "cp Gemfile Gemfile.lock #{package_dir}/lib/vendor/"
  sh "mkdir #{package_dir}/lib/vendor/.bundle"
  sh "cp bundler-config #{package_dir}/lib/vendor/.bundle/config"

  sh 'rm -rf lib/vendor/ruby/*/gems/*/test'
  sh 'rm -rf lib/vendor/ruby/*/gems/*/tests'
  sh 'rm -rf lib/vendor/ruby/*/gems/*/spec'
  sh 'rm -rf lib/vendor/ruby/*/gems/*/features'
  sh 'rm -rf lib/vendor/ruby/*/gems/*/benchmark'

  unless ENV['DIR_ONLY']
    if os_type == :unix
      sh "tar -czf #{package_dir}.tar.gz #{package_dir}"
    else
      sh "zip -9r #{package_dir}.zip #{package_dir}"
    end

    sh "rm -rf #{package_dir}"
  end
end

def download_runtime(target)
  sh 'curl -L -O --fail ' \
     "https://d6r77u77i8pq3.cloudfront.net/releases/traveling-ruby-#{TRAVELING_RUBY_VERSION}-#{target}.tar.gz"
end