Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removed support 'freezing daemon-kit into vendor/' #74

Merged
merged 7 commits into from
Sep 17, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .rspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
--colour
--pattern "spec/*_spec.rb"
11 changes: 11 additions & 0 deletions Upgrading.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
Some important upgrading information
====================================

Upgrading to 0.3.0
------------------

From 0.2 there hasn't been any signifant changes. 0.3.0.rc2 made some changes
to the way a daemon boots, so after updating you'll need to run:

$ rake daemon_kit:upgrade

We recommend running this task on a clean repo, or branch, so you can review
the changes using your favourite diff tool.

Upgrading to 0.1.9
------------------

Expand Down
5 changes: 5 additions & 0 deletions features/app_generator.feature
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,8 @@ Feature: Generating a new daemon
| tasks |
| vendor |
| tmp |

Scenario: Generating an 'edge' daemon
When I run `daemon-kit vuvuzela --edge`
And I cd to "vuvuzela"
Then the Gemfile should point to edge daemon-kit
17 changes: 17 additions & 0 deletions features/step_definitions/daemon_steps.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,20 @@
type "a\n"
#eot
end

Then(/^the Gemfile should point to edge daemon\-kit$/) do
prep_for_fs_check do
gemfile = IO.read('Gemfile')

gemfile.should =~ /^gem 'daemon\-kit', :github => 'kennethkalmer\/daemon\-kit'$/
gemfile.should_not =~ /^gem 'daemon\-kit'$/
end
end

Given(/^I have a daemon generated by daemon\-kit "(.*?)"$/) do |project|
copy_fixture_project( project )
end

Given(/^I cd to the old project$/) do
cd "fixture_project"
end
21 changes: 21 additions & 0 deletions features/support/fixtures.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
module ProjectFixtures
DAEMON_FIXTURES_PATH = File.expand_path( '../../../spec/fixtures', __FILE__ )

def copy_fixture_project( name )
name = case name
when '0.2.3'
'zero_two_three'
else
raise ArgumentError, "Unknown fixture project: #{name}"
end

src = File.join( DAEMON_FIXTURES_PATH, name )

in_current_dir do
FileUtils.cp_r( src, 'fixture_project' )
end
end

end

World( ProjectFixtures )
11 changes: 11 additions & 0 deletions features/upgrades.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Feature: Upgrading an older daemon

daemon-kit offers help during upgrades to newer versions.

Scenario: Upgrading from 0.2.3
Given I have a daemon generated by daemon-kit "0.2.3"
And I cd to the old project
When I run `rake daemon_kit:upgrade` interactively
And I accept the conflicts
Then the file "Gemfile" should contain "gem 'daemon-kit', :github => 'kennethkalmer/daemon-kit'"
And the file "config/boot.rb" should not contain "VendorBoot"
1 change: 0 additions & 1 deletion lib/daemon_kit/abstract_logger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,6 @@ def logger=( logger )
def clean_trace( trace )
trace = trace.map { |l| l.gsub(DAEMON_ROOT, '') }
trace = trace.reject { |l| l =~ /gems\/daemon[\-_]kit/ }
trace = trace.reject { |l| l =~ /vendor\/daemon[\-_]kit/ }
trace
end

Expand Down
115 changes: 17 additions & 98 deletions lib/daemon_kit/tasks/framework.rake
Original file line number Diff line number Diff line change
@@ -1,80 +1,9 @@
namespace :daemon_kit do
namespace :freeze do
desc "Lock this application to the current gem (by unpacking it into vendor/daemon_kit)"
task :gems do
deps = %w()
require 'rubygems'
require 'rubygems/gem_runner'

kit = (version = ENV['VERSION']) ?
Gem.cache.find_name('daemon-kit', "= #{version}").first :
Gem.cache.find_name('daemon-kit').sort_by { |g| g.version }.last

version ||= kit.version

unless kit
puts "No daemon_kit gem #{version} is installed. Do 'gem list daemon-kit' to see what you have available."
exit
end

puts "Freezing the gem for DaemonKit #{kit.version}"
mkdir_p "vendor"

begin
chdir("vendor") do
kit.dependencies.select { |g| deps.include? g.name }.each do |g|
Gem::GemRunner.new.run(["unpack", g.name, "--version", g.version_requirements.to_s])
mv(Dir.glob("#{g.name}*").first, g.name)
end

Gem::GemRunner.new.run(["unpack", "daemon-kit", "--version", "=#{version}"])
FileUtils.mv(Dir.glob("daemon-kit*").first, "daemon-kit")
end
rescue Exception
rm_rf "vendor/daemon-kit"
raise
end
end

desc 'Lock to latest edge daemon_kit'
task :edge do
require 'open-uri'
#version = ENV["RELEASE"] || "edge"
commits = "http://github.com/api/v1/yaml/kennethkalmer/daemon-kit/commits/master"
url = "http://github.com/kennethkalmer/daemon-kit/zipball/master"

rm_rf "vendor/daemon-kit"

chdir 'vendor' do
latest_revision = YAML.load(open(commits))["commits"].first["id"]

puts "Downloading DaemonKit from #{url}"
File.open('daemon-kit.zip', 'wb') do |dst|
open url do |src|
while chunk = src.read(4096)
dst << chunk
end
end
end

puts 'Unpacking DaemonKit'
rm_rf 'daemon-kit'
`unzip daemon-kit.zip`
FileUtils.mv(Dir.glob("kennethkalmer-daemon-kit*").first, "daemon-kit")
%w(daemon-kit.zip).each do |goner|
rm_f goner
end

touch "REVISION_#{latest_revision}"
end
end

end

desc "Upgrade your local files for a daemon after upgrading daemon-kit"
task :upgrade => 'environment' do
# Run these
%w{ initializers rakefile scripts gemfile }.each do |t|
%w{ config root scripts }.each do |t|
Rake::Task["daemon_kit:upgrade:#{t}"].invoke
end

Expand All @@ -83,41 +12,31 @@ namespace :daemon_kit do
end

namespace :upgrade do
# Upgrade the initializers
task :initializers do
copy_framework_template( 'config', 'boot.rb' )
def invoke_from_app_generator(method)
app_generator.send(method)
end

if File.directory?( File.join(DaemonKit.root, 'config', 'initializers') )
mv File.join(DaemonKit.root, 'config', 'initializers'), File.join(DAEMON_ROOT, 'config', 'pre-daemonize')
copy_framework_template( 'config', 'pre-daemonize', 'readme' )
end
def app_generator
@app_generator ||= begin
require 'daemon_kit/generators'

unless File.directory?( File.join(DAEMON_ROOT, 'config', 'post-daemonize') )
mkdir_p File.join(DAEMON_ROOT, 'config', 'post-daemonize')
copy_framework_template( 'config', 'post-daemonize', 'readme' )
name = DaemonKit.configuration.daemon_name
gen = DaemonKit::Generators::AppGenerator.new( [name], { :with_dispatchers => true },
:destination_root => DaemonKit.root )
gen
end
end

# Upgrade the Rakefile
task :rakefile do
copy_framework_template( 'Rakefile' )
task :config do
invoke_from_app_generator(:create_config_files)
end

# Upgrade the scripts
task :scripts do
%w{ console destroy generate }.each do |s|
copy_framework_template( "script", s )
end
task :root do
invoke_from_app_generator(:create_root_files)
end

# Upgrade the Gemfile
task :gemfile do
copy_framework_template( 'Gemfile' )
task :scripts do
invoke_from_app_generator(:create_script_files)
end
end
end

def copy_framework_template( *args )
src_dir = File.join(DaemonKit.framework_root, 'lib', 'generators', 'daemon_kit', 'app', 'templates')
cp File.join( src_dir, *args ), File.join( DaemonKit.root, *args )
end
10 changes: 8 additions & 2 deletions lib/generators/daemon_kit/app/app_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ class AppGenerator < Base
class_option :cucumber, :type => :boolean, :aliases => '-c', :default => false,
:desc => "Install cucumber support"

class_option :edge, :type => :boolean, :default => false,
:desc => "Let the initial Gemfile track kennethkalmer/daemon-kit instead of rubygems"

def initialize( *args )
super

Expand All @@ -42,10 +45,13 @@ def create_root
FileUtils.cd( destination_root )
end

def create_root_files
def create_readme
template 'README.tt', 'README'
end

def create_root_files
copy_file 'Rakefile'
copy_file 'Gemfile'
template 'Gemfile.tt', 'Gemfile'
end

def create_bin_files
Expand Down
25 changes: 25 additions & 0 deletions lib/generators/daemon_kit/app/templates/Gemfile.tt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Update this Gemfile with any additional dependencies and run
# 'bundle install' to get them all installed. Daemon-kit's capistrano
# deployment will ensure that the bundle required by your daemon is properly
# installed.
#
# For more information on bundler, please visit http://gembundler.com

source 'https://rubygems.org'

<% if options.edge? -%>
gem 'daemon-kit', :github => 'kennethkalmer/daemon-kit'
<% else -%>
# Live on the edge instead: gem 'daemon-kit', :github => 'kennethkalmer/daemon-kit'
gem 'daemon-kit'
<% end -%>

#
# safely (http://github.com/kennethkalmer/safely)
#

gem 'safely' # Optional, but recommended.

# gem 'toadhopper' # For reporting exceptions to hoptoad
# gem 'mail' # For reporting exceptions via mail

2 changes: 1 addition & 1 deletion lib/generators/daemon_kit/app/templates/README.tt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ tasks/
Place for rake tasks

vendor/
Place for unpacked gems and DaemonKit
Place for third-party code that can't be bundled via the Gemfile

tmp/
Scratch folder
Expand Down
16 changes: 1 addition & 15 deletions lib/generators/daemon_kit/app/templates/config/boot.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,13 @@ module DaemonKit
class << self
def boot!
unless booted?
pick_boot.run
GemBoot.new.run
end
end

def booted?
defined? DaemonKit::Initializer
end

def pick_boot
(vendor_kit? ? VendorBoot : GemBoot).new
end

def vendor_kit?
File.exists?( "#{DAEMON_ROOT}/vendor/daemon-kit" )
end
end

class Boot
Expand All @@ -34,12 +26,6 @@ def run
end
end

class VendorBoot < Boot
def load_initializer
require "#{DAEMON_ROOT}/vendor/daemon-kit/lib/daemon_kit/initializer"
end
end

class GemBoot < Boot
def load_initializer
begin
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,6 @@ set :config_files, %w{}
# into the root directory of the deployment.
set :shared_children, %w{log tmp}

# Record our dependencies
unless File.directory?( "#{DaemonKit.root}/vendor/daemon_kit" )
depend :remote, :gem, "daemon-kit", ">=#{DaemonKit.version}"
end

# Hook into capistrano's events
before "deploy:update_code", "deploy:check"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ source 'https://rubygems.org'
# daemon-kit
gem 'daemon-kit'

#
# safely (http://github.com/kennethkalmer/safely)
#

gem 'safely' # Optional, but recommended.

gem 'safely'
# gem 'toadhopper' # For reporting exceptions to hoptoad
# gem 'mail' # For reporting exceptions via mail
group :development, :test do
gem 'rake'
gem 'rspec'
end
Loading