]> gitweb.fluxo.info Git - leap/leap_cli.git/commitdiff
created 'rake build' and 'rake install', updated README.
authorelijah <elijah@riseup.net>
Thu, 25 Oct 2012 04:40:11 +0000 (21:40 -0700)
committerelijah <elijah@riseup.net>
Thu, 25 Oct 2012 04:40:11 +0000 (21:40 -0700)
DEVNOTES
README.md
Rakefile
bin/leap
leap_cli.gemspec

index 6890a66cd629f86f58571b8e164f1332741de74b..2a6e4b987ac0c221b61986a9f36ab905096bb780 100644 (file)
--- a/DEVNOTES
+++ b/DEVNOTES
@@ -80,6 +80,13 @@ ssh keygen
 invoke puppet
   https://github.com/davidwinter/sooty/blob/master/lib/sooty.rb
 
+shell
+================================
+
+http://devver.wordpress.com/2009/10/12/ruby-subprocesses-part_3/
+http://stackoverflow.com/questions/1154846/continuously-read-from-stdout-of-external-process-in-ruby
+http://stackoverflow.com/questions/3874604/how-do-i-get-the-pty-spawn-child-exit-code
+https://gist.github.com/148765
 
 ssh
 ================================
index c6a3c74caa6117690d42035bc934973266e9752f..59767109724a3be9a674ae5d198c0035676a383a 100644 (file)
--- a/README.md
+++ b/README.md
@@ -6,9 +6,17 @@ This gem installs an executable 'leap' that allows you to manage servers using t
 Installation
 =================================
 
-To install the gem:
+Prerequisites:
 
-    gem install leap_cli
+    sudo apt-get install ruby ruby-dev rsync openssh-client
+
+To install leap command system-wide:
+
+    sudo gem install leap_cli
+
+To install without root privileges:
+
+    gem install leap_cli --user-install
 
 To run from a clone of the git repo, see "Development", below.
 
@@ -139,29 +147,31 @@ Debian Squeeze
 
 Debian Wheezy
 
-    sudo apt-get install git ruby ruby-dev
-    sudo gem install bundler
+    sudo apt-get install git ruby ruby-dev bundler
 
-Ubuntu Quantal
+Ubuntu
 
     sudo apt-get install git ruby ruby-dev
     sudo gem install bundler
 
 Install from git
----------------------------------
+--------------------------------------
 
-Install requirements
+Download the source and install the required gems:
 
     git clone git://leap.se/leap_cli      # clone leap_cli code
     cd leap_cli
     bundle                                # install required gems
 
-Symlink bin/leap into your path:
+Running from the source directory
+--------------------------------------
+
+To run the ``leap`` command directly from the source tree, symlink bin/leap
+into your path:
 
     cd leap_cli
-    ln -s `pwd`/bin/leap /usr/local/bin   # link executable somewhere in your bin path
-    which leap                            # make sure you will run leap_cli/bin/leap,
-                                          # and not /var/lib/gems/1.x/bin/leap
+    ln -s `pwd`/bin/leap ~/bin    # link executable somewhere in your bin path
+    which leap                    # make sure you will run leap_cli/bin/leap
     leap help
 
 If you get an error, make sure to check ``which leap``. Some versions of ``bundle`` will
@@ -172,3 +182,16 @@ working directory is under leap_cli. Because the point is to be able to run ``le
 other places, it is easier to create the symlink. If you run ``leap`` directly, and not via
 the command launcher that rubygems installs, leap will run in a mode that simulates
 ``bundle exec leap`` (i.e. only gems included in Gemfile are allow to be loaded).
+
+Running as a gem
+--------------------------------------
+
+To install ``leap`` as a gem, do this:
+
+    cd leap_cli
+    rake build
+    rake install
+
+And then make sure your PATH is set to include where leap is installed.
+It should warn you if this is not the case.
+
index c97688b743171d38582ab2c78050b43462a4c44b..51c980ef9de20831289098939bae7fd5489fc7be 100644 (file)
--- a/Rakefile
+++ b/Rakefile
@@ -1,44 +1,77 @@
-require 'rake/clean'
-require 'rubygems'
-require 'rubygems/package_task'
-require 'rdoc/task'
-require 'cucumber'
-require 'cucumber/rake/task'
-Rake::RDocTask.new do |rd|
-  rd.main = "README.rdoc"
-  rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
-  rd.title = 'Your application title'
-end
+require "rubygems"
+require "highline/import"
+require "pty"
+require "fileutils"
 
-spec = eval(File.read('leap_cli.gemspec'))
+##
+## HELPER
+##
 
-Gem::PackageTask.new(spec) do |pkg|
+def run(cmd)
+  PTY.spawn(cmd) do |output, input, pid|
+    begin
+      while line = output.gets do
+        puts line
+      end
+    rescue Errno::EIO
+    end
+  end
+rescue PTY::ChildExited
 end
-CUKE_RESULTS = 'results.html'
-CLEAN << CUKE_RESULTS
-desc 'Run features'
-Cucumber::Rake::Task.new(:features) do |t|
-  opts = "features --format html -o #{CUKE_RESULTS} --format progress -x"
-  opts += " --tags #{ENV['TAGS']}" if ENV['TAGS']
-  t.cucumber_opts =  opts
-  t.fork = false
+
+##
+## GEM BUILDING AND INSTALLING
+##
+
+$spec_path = 'leap_cli.gemspec'
+$spec      = eval(File.read($spec_path))
+$base_dir  = File.dirname(__FILE__)
+$gem_path  = File.join($base_dir, 'pkg', "#{$spec.name}-#{$spec.version}.gem")
+
+def built_gem_path
+  Dir[File.join($base_dir, "#{$spec.name}-*.gem")].sort_by{|f| File.mtime(f)}.last
 end
 
-desc 'Run features tagged as work-in-progress (@wip)'
-Cucumber::Rake::Task.new('features:wip') do |t|
-  tag_opts = ' --tags ~@pending'
-  tag_opts = ' --tags @wip'
-  t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
-  t.fork = false
+desc "Build #{$spec.name}-#{$spec.version}.gem into the pkg directory"
+task 'build' do
+  FileUtils.mkdir_p(File.join($base_dir, 'pkg'))
+  FileUtils.rm($gem_path) if File.exists?($gem_path)
+  run "gem build -V '#{$spec_path}'"
+  file_name = File.basename(built_gem_path)
+  FileUtils.mv(built_gem_path, 'pkg')
+  say "#{$spec.name} #{$spec.version} built to pkg/#{file_name}"
 end
 
-task :cucumber => :features
-task 'cucumber:wip' => 'features:wip'
-task :wip => 'features:wip'
-require 'rake/testtask'
-Rake::TestTask.new do |t|
-  t.libs << "test"
-  t.test_files = FileList['test/*_test.rb']
+desc "Build and install #{$spec.name}-#{$spec.version}.gem into either system-wide or user gems"
+task 'install' do
+  if !File.exists?($gem_path)
+    say("Could not file #{$gem_path}. Try running 'rake build'")
+  else
+    if ENV["USER"] == "root"
+      run "gem install '#{$gem_path}'"
+    else
+      say("A system-wide install requires that you run 'rake install' as root, which you are not.")
+      if agree("Do you want to continue installing to #{Gem.path.grep /home/}? ")
+        run "gem install '#{$gem_path}' --user-install"
+      end
+    end
+  end
 end
 
-task :default => [:test,:features]
+##
+## TESTING
+##
+
+# task :default => [:test,:features]
+
+##
+## DOCUMENTATION
+##
+
+# require 'rdoc/task'
+
+# Rake::RDocTask.new do |rd|
+#   rd.main = "README.rdoc"
+#   rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
+#   rd.title = 'Your application title'
+# end
index 0f55e5b6d1ddecd1fe565a491bb106793572361f..dd6d9de741bc5cbcaba00935e52405fd3e0728c2 100755 (executable)
--- a/bin/leap
+++ b/bin/leap
@@ -17,8 +17,8 @@ rescue LoadError
   lib_dir = File.expand_path(File.dirname(file) + '/../lib')
   $LOAD_PATH.unshift lib_dir unless $LOAD_PATH.include?(lib_dir)
   require 'rubygems'
-  require 'leap_cli'
   require 'bundler/setup' # force evaluation of "Gemfile"
+  require 'leap_cli'
 end
 
 require 'gli'
index e8e7af4b058a5ee7fa5b7ee597862c9482c98445..b0c9a9e6dee698bcf26cceed849a2e685e10030a 100644 (file)
@@ -14,11 +14,13 @@ spec = Gem::Specification.new do |s|
   s.email = 'root@leap.se'
   s.homepage = 'https://leap.se'
   s.platform = Gem::Platform::RUBY
-  s.summary = 'Command line interface to the leap platform.'
+  s.summary = 'Command line interface to the LEAP platform.'
+  s.description = 'Provides the command "leap", used to manage a bevy of servers running the LEAP platform from the comfort of your own home.'
 
   ##
   ## GEM FILES
   ##
+
   s.files = `find lib vendor -name '*.rb'`.split("\n") << "bin/leap"
   s.require_paths << 'lib'