fezzik 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -183,6 +183,28 @@ task :print_destination
183
183
  end
184
184
  ```
185
185
 
186
+
187
+ ## DSL
188
+
189
+ Fezzik comes with a DSL module that you can optionally include in the top level of your Rakefiles. It exposes
190
+ the following functions:
191
+
192
+ ```
193
+ destination
194
+ env
195
+ capture_output
196
+ ```
197
+
198
+ This lets you write your configuration more tersely:
199
+
200
+ ```ruby
201
+ include Fezzik::DSL
202
+
203
+ destination :prod do
204
+ env :rack_env, "production"
205
+ end
206
+ ```
207
+
186
208
  ## Tasks
187
209
 
188
210
  Fezzik has a number of useful tasks other than deploy.rake and environment.rake. These can also be downloaded
data/fezzik.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.homepage = "http://github.com/dmacdougall/fezzik"
19
19
  s.rubyforge_project = "fezzik"
20
20
 
21
- s.executables = %w(fez fezify)
21
+ s.executables = %w(fez)
22
22
  s.files = `git ls-files`.split("\n")
23
23
 
24
24
  s.add_dependency("rake", "~>0.8.7")
data/lib/fezzik.rb CHANGED
@@ -3,8 +3,9 @@ require "thread"
3
3
  require "rake"
4
4
  require "rake/remote_task"
5
5
  require "colorize"
6
- require "fezzik/base.rb"
7
- require "fezzik/environment.rb"
8
- require "fezzik/io.rb"
9
- require "fezzik/util.rb"
10
- require "fezzik/version.rb"
6
+ require "fezzik/base"
7
+ require "fezzik/dsl"
8
+ require "fezzik/environment"
9
+ require "fezzik/io"
10
+ require "fezzik/util"
11
+ require "fezzik/version"
data/lib/fezzik/dsl.rb ADDED
@@ -0,0 +1,15 @@
1
+ module Fezzik
2
+ module DSL
3
+ def destination(name, &block)
4
+ Fezzik.destination(name, &block)
5
+ end
6
+
7
+ def env(*args)
8
+ Fezzik.env(*args)
9
+ end
10
+
11
+ def capture_output(*args)
12
+ Fezzik::Util.capture_output(*args)
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module Fezzik
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fezzik
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-02-09 00:00:00.000000000Z
13
+ date: 2012-02-12 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
- requirement: &2152662480 !ruby/object:Gem::Requirement
17
+ requirement: &2156480180 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.8.7
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2152662480
25
+ version_requirements: *2156480180
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rake-remote_task
28
- requirement: &2152662020 !ruby/object:Gem::Requirement
28
+ requirement: &2156479720 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 2.0.2
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2152662020
36
+ version_requirements: *2156479720
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: colorize
39
- requirement: &2152661560 !ruby/object:Gem::Requirement
39
+ requirement: &2156479260 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,12 +44,11 @@ dependencies:
44
44
  version: 0.5.8
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2152661560
47
+ version_requirements: *2156479260
48
48
  description: A light deployment system that gets out of your way
49
49
  email: dmacdougall@gmail.com
50
50
  executables:
51
51
  - fez
52
- - fezify
53
52
  extensions: []
54
53
  extra_rdoc_files: []
55
54
  files:
@@ -58,12 +57,11 @@ files:
58
57
  - Gemfile.lock
59
58
  - README.md
60
59
  - Rakefile
61
- - TODO.md
62
60
  - bin/fez
63
- - bin/fezify
64
61
  - fezzik.gemspec
65
62
  - lib/fezzik.rb
66
63
  - lib/fezzik/base.rb
64
+ - lib/fezzik/dsl.rb
67
65
  - lib/fezzik/environment.rb
68
66
  - lib/fezzik/io.rb
69
67
  - lib/fezzik/util.rb
data/TODO.md DELETED
@@ -1,14 +0,0 @@
1
- ## Features
2
- * rollback
3
- * rolling restarts
4
- * parallel execution
5
- * clear old releases
6
- * better way to update recipes/core with gem updates
7
- * figure out how to include/share common recipes
8
-
9
- ## Bugs
10
- * symlink task links to a nonexistant directory when run in isolation
11
-
12
- ## Release Notes
13
- * copy previous deployment to destination before rsync (for faster rsync)
14
- * copy unsafe links with rsync (done with -L)
data/bin/fezify DELETED
@@ -1,156 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require "colorize"
3
- require "fileutils"
4
-
5
- files = {
6
- "config/deploy.rb" => <<-'EOF',
7
- # This is the configuration file for fezzik.
8
- # Define variables here as you would for Vlad the Deployer.
9
- # A full list of variables can be found here:
10
- # http://hitsquad.rubyforge.org/vlad/doco/variables_txt.html
11
-
12
- set :app, "app"
13
- set :deploy_to, "/opt/#{app}"
14
- set :release_path, "#{deploy_to}/releases/#{Time.now.strftime("%Y%m%d%H%M")}"
15
- set :local_path, Dir.pwd
16
- set :user, "root"
17
-
18
- # Each destination is a set of machines and configurations to deploy to.
19
- # You can deploy to a destination from the command line with:
20
- # fez to_dev deploy
21
- #
22
- # :domain can be an array if you are deploying to multiple hosts.
23
- #
24
- # You can set environment variables that will be loaded at runtime on the server
25
- # like this:
26
- # env :rack_env, "production"
27
- # or
28
- # env :error_monitoring, "true", ["prod12.com"]
29
- # The second form specifies an environment variable particular to a server or list of servers (as a subset of
30
- # the :domain list).
31
- #
32
- # This will also generate a file on the server named config/environment.rb, which you can include
33
- # in your code to load these variables as Ruby constants. You can create your own config/environment.rb
34
- # file to use for development, and it will be overwritten at runtime.
35
-
36
- destination :dev do
37
- set :domain, "#{user}@dev.example.com"
38
- end
39
-
40
- destination :prod do
41
- set :domain, "#{user}@prod.example.com"
42
- end
43
- EOF
44
-
45
- "config/recipes/core.rb" => <<-'EOF',
46
- require "fileutils"
47
-
48
- # This file contains core tasks that are used to deploy your application to the
49
- # destination servers. This is a decent initial setup, but is completely configurable.
50
-
51
- namespace :fezzik do
52
- # Any variables set in deploy.rb with "env" will be saved on the server in two files:
53
- # config/environment.sh and config/environment.rb. The first is loaded into the shell
54
- # environment before the run script is called, and the second is made available to
55
- # be required into your code. You can use your own environment.rb file for development,
56
- # and it will be overwritten by this task when the code deploys.
57
- desc "saves variables set by 'env' in deploy.rb into config/environment.sh and config/environment.rb"
58
- task :save_environment do
59
- @per_server_environments.each do |server, environment|
60
- root_config_dir = "/tmp/#{app}/#{server}_config"
61
- FileUtils.mkdir_p root_config_dir
62
- File.open(File.join(root_config_dir, "environment.rb"), "w") do |file|
63
- environment.each do |key, value|
64
- quote = value.is_a?(Numeric) ? '' : '"'
65
- file.puts "#{key.to_s.upcase} = #{quote}#{value}#{quote}"
66
- end
67
- end
68
- File.open(File.join(root_config_dir, "environment.sh"), "w") do |file|
69
- environment.each { |key, value| file.puts %[export #{key.to_s.upcase}="#{value}"] }
70
- end
71
- end
72
- end
73
-
74
- desc "stages the project for deployment in /tmp"
75
- task :stage do
76
- puts "staging project in /tmp/#{app}"
77
- FileUtils.rm_rf "/tmp/#{app}"
78
- FileUtils.mkdir_p "/tmp/#{app}/staged"
79
- FileUtils.cp_r "#{local_path}/.", "/tmp/#{app}/staged"
80
- Rake::Task["fezzik:save_environment"].invoke
81
- end
82
-
83
- desc "performs any necessary setup on the destination servers prior to deployment"
84
- remote_task :setup do
85
- puts "setting up servers"
86
- run "mkdir -p #{deploy_to}/releases"
87
- end
88
-
89
- desc "rsyncs the project from its stages location to each destination server"
90
- remote_task :push => [:stage, :setup] do
91
- puts "pushing to #{target_host}:#{release_path}"
92
- # Copy on top of previous release to optimize rsync
93
- rsync "-q", "--copy-dest=#{current_path}", "/tmp/#{app}/staged/", "#{target_host}:#{release_path}"
94
- # Copy over the appropriate configs for the target
95
- server = target_host.gsub(/^.*@/, "")
96
- ["environment.rb", "environment.sh"].each do |config_file|
97
- rsync "-q", "/tmp/#{app}/#{server}_config/#{config_file}",
98
- "#{target_host}:#{release_path}/config/#{config_file}"
99
- end
100
- end
101
-
102
- desc "symlinks the latest deployment to /deploy_path/project/current"
103
- remote_task :symlink do
104
- puts "symlinking current to #{release_path}"
105
- run "cd #{deploy_to} && ln -fns #{release_path} current"
106
- end
107
-
108
- desc "runs the executable in project/bin"
109
- remote_task :start do
110
- puts "starting from #{capture_output { run "readlink #{current_path}" }}"
111
- run "cd #{current_path} && source config/environment.sh && ./bin/run_app.sh"
112
- end
113
-
114
- desc "kills the application by searching for the specified process name"
115
- remote_task :stop do
116
- puts "stopping app"
117
- # Replace YOUR_APP_NAME with whatever is run from your bin/run_app.sh file.
118
- # run "(kill -9 `ps aux | grep 'YOUR_APP_NAME' | grep -v grep | awk '{print $2}'` || true)"
119
- end
120
-
121
- desc "restarts the application"
122
- remote_task :restart do
123
- Rake::Task["fezzik:stop"].invoke
124
- Rake::Task["fezzik:start"].invoke
125
- end
126
-
127
- desc "full deployment pipeline"
128
- task :deploy do
129
- Rake::Task["fezzik:push"].invoke
130
- Rake::Task["fezzik:symlink"].invoke
131
- Rake::Task["fezzik:restart"].invoke
132
- puts "#{app} deployed!"
133
- end
134
- end
135
- EOF
136
-
137
- "bin/run_app.sh" => <<-'EOF'
138
- #!/bin/sh
139
- # This file will be called to start your application.
140
- EOF
141
- }
142
-
143
- FileUtils.mkdir_p "config/recipes"
144
- FileUtils.mkdir_p "bin"
145
-
146
- files.each do |filename, content|
147
- if File.exists?(filename) && ARGV[0] != "-f"
148
- puts " [skip] #{filename} already exists"
149
- else
150
- puts " [new] #{filename} created".green
151
- File.open(filename, "w") { |file| file.write(content) }
152
- system("chmod a+x bin/run_app.sh") if filename == "bin/run_app.sh"
153
- end
154
- end
155
-
156
- puts " [done]".green