aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--DEVNOTES7
-rw-r--r--README.md45
-rw-r--r--Rakefile103
-rwxr-xr-xbin/leap2
-rw-r--r--leap_cli.gemspec4
5 files changed, 113 insertions, 48 deletions
diff --git a/DEVNOTES b/DEVNOTES
index 6890a66..2a6e4b9 100644
--- 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
================================
diff --git a/README.md b/README.md
index c6a3c74..5976710 100644
--- 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.
+
diff --git a/Rakefile b/Rakefile
index c97688b..51c980e 100644
--- 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
diff --git a/bin/leap b/bin/leap
index 0f55e5b..dd6d9de 100755
--- 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'
diff --git a/leap_cli.gemspec b/leap_cli.gemspec
index e8e7af4..b0c9a9e 100644
--- a/leap_cli.gemspec
+++ b/leap_cli.gemspec
@@ -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'