capistrano-fiftyfive 0.17.2 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +1 -1
- data/lib/capistrano/fiftyfive.rb +0 -3
- data/lib/capistrano/fiftyfive/templates/version.rb.erb +1 -0
- data/lib/capistrano/fiftyfive/version.rb +1 -1
- data/lib/capistrano/tasks/defaults.rake +0 -1
- data/lib/capistrano/tasks/version.rake +3 -0
- metadata +3 -6
- data/lib/capistrano/fiftyfive/console.rb +0 -64
- data/lib/capistrano/tasks/deploy.rake +0 -6
- data/lib/sshkit/formatter/abbreviated.rb +0 -194
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffd897eb6b668f60d4610627fcf7bb456476f31d
|
4
|
+
data.tar.gz: d639e21894968d79f1696948b8f41d7bbc470932
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22d68303c1bf01dd10c8910a41f60fca9cad374f3adb7ecf85078239e6fb6a2f7ece4fa65d2347f9680d77c6753e8c88b97b32f60e54b3760b5859fad102b8a5
|
7
|
+
data.tar.gz: 5365ed52ed3fb991cf7bf6c53e857e25d081c5c322a8e7843b888d5c3f5fd6ebe0fd7189df2ce541957caa10b7bef6ebfa504ad0e064387193a533f2d0c785b9
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# capistrano-fiftyfive Changelog
|
2
2
|
|
3
|
+
## `0.18.0`
|
4
|
+
|
5
|
+
* **The abbreviated log formatter has been removed and is now available in a new gem: `airbrussh`.** With this change, capistrano-fiftyfive no longer automatically changes the logging format of capistrano. To opt into the prettier, more concise format, add the airbrussh gem to your project as explained in the [airbrussh README](https://github.com/mattbrictson/airbrussh#readme).
|
6
|
+
* The version initializer that capistrano-fiftyfive adds during deployment sets a new value: `Rails.application.config.version_time`. You can use this value within your app for the date and time of the last commit that produced the version that is currently deployed.
|
7
|
+
|
8
|
+
|
3
9
|
## `0.17.2`
|
4
10
|
|
5
11
|
* Default self-signed SSL certificate is now more generic (for real this time).
|
data/README.md
CHANGED
@@ -26,7 +26,7 @@ The gem is named "capistrano-fiftyfive" for historical reasons: it was initially
|
|
26
26
|
* rbenv
|
27
27
|
* dotenv
|
28
28
|
|
29
|
-
In addition, capistrano-fiftyfive changes many of Capistrano's defaults, including the deployment location, Bundler behavior, and SSH keep-alive settings.
|
29
|
+
In addition, capistrano-fiftyfive changes many of Capistrano's defaults, including the deployment location, Bundler behavior, and SSH keep-alive settings. (See [defaults.rake][] for details.)
|
30
30
|
|
31
31
|
Not quite to your liking? Consider forking the project to meet your needs.
|
32
32
|
|
data/lib/capistrano/fiftyfive.rb
CHANGED
@@ -4,8 +4,6 @@ require "capistrano/fiftyfive/version"
|
|
4
4
|
require "capistrano/fiftyfive/compatibility"
|
5
5
|
require "capistrano/fiftyfive/dsl"
|
6
6
|
require "capistrano/fiftyfive/recipe"
|
7
|
-
require "capistrano/fiftyfive/console"
|
8
|
-
require "sshkit/formatter/abbreviated"
|
9
7
|
include Capistrano::Fiftyfive::DSL
|
10
8
|
|
11
9
|
load File.expand_path("../tasks/provision.rake", __FILE__)
|
@@ -28,4 +26,3 @@ load File.expand_path("../tasks/seed.rake", __FILE__)
|
|
28
26
|
load File.expand_path("../tasks/version.rake", __FILE__)
|
29
27
|
load File.expand_path("../tasks/rake.rake", __FILE__)
|
30
28
|
load File.expand_path("../tasks/sidekiq.rake", __FILE__)
|
31
|
-
load File.expand_path("../tasks/deploy.rake", __FILE__)
|
@@ -94,7 +94,6 @@ namespace :load do
|
|
94
94
|
set :bundle_binstubs, false
|
95
95
|
set :bundle_flags, '--deployment'
|
96
96
|
set :deploy_to, -> { "/home/deployer/apps/#{fetch(:application)}" }
|
97
|
-
set :format, :abbreviated
|
98
97
|
set :keep_releases, 10
|
99
98
|
set :linked_dirs, -> {
|
100
99
|
["public/#{fetch(:assets_prefix, 'assets')}"] +
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-fiftyfive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Brictson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -83,7 +83,6 @@ files:
|
|
83
83
|
- capistrano-fiftyfive.gemspec
|
84
84
|
- lib/capistrano/fiftyfive.rb
|
85
85
|
- lib/capistrano/fiftyfive/compatibility.rb
|
86
|
-
- lib/capistrano/fiftyfive/console.rb
|
87
86
|
- lib/capistrano/fiftyfive/dsl.rb
|
88
87
|
- lib/capistrano/fiftyfive/recipe.rb
|
89
88
|
- lib/capistrano/fiftyfive/templates/crontab.erb
|
@@ -106,7 +105,6 @@ files:
|
|
106
105
|
- lib/capistrano/tasks/crontab.rake
|
107
106
|
- lib/capistrano/tasks/defaults.rake
|
108
107
|
- lib/capistrano/tasks/delayed_job.rake
|
109
|
-
- lib/capistrano/tasks/deploy.rake
|
110
108
|
- lib/capistrano/tasks/dotenv.rake
|
111
109
|
- lib/capistrano/tasks/logrotate.rake
|
112
110
|
- lib/capistrano/tasks/maintenance.rake
|
@@ -123,7 +121,6 @@ files:
|
|
123
121
|
- lib/capistrano/tasks/unicorn.rake
|
124
122
|
- lib/capistrano/tasks/user.rake
|
125
123
|
- lib/capistrano/tasks/version.rake
|
126
|
-
- lib/sshkit/formatter/abbreviated.rb
|
127
124
|
homepage: https://github.com/mattbrictson/capistrano-fiftyfive
|
128
125
|
licenses:
|
129
126
|
- MIT
|
@@ -144,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
141
|
version: '0'
|
145
142
|
requirements: []
|
146
143
|
rubyforge_project:
|
147
|
-
rubygems_version: 2.4.
|
144
|
+
rubygems_version: 2.4.6
|
148
145
|
signing_key:
|
149
146
|
specification_version: 4
|
150
147
|
summary: Additional Capistrano 3 recipes
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'io/console'
|
2
|
-
|
3
|
-
module Capistrano
|
4
|
-
module Fiftyfive
|
5
|
-
# Helper class that wraps an IO object and provides methods for truncating
|
6
|
-
# output, assuming the IO object represents a console window.
|
7
|
-
#
|
8
|
-
# This is useful for writing log messages that will typically show up on
|
9
|
-
# an ANSI color-capable console. When a console is not present (e.g. when
|
10
|
-
# running on a CI server) the output will gracefully degrade.
|
11
|
-
class Console
|
12
|
-
def initialize(output)
|
13
|
-
@output = output
|
14
|
-
end
|
15
|
-
|
16
|
-
# Writes to the IO after first truncating the output to fit the console
|
17
|
-
# width. If the underlying IO is not a TTY, ANSI colors are removed from
|
18
|
-
# the output. A newline is always added. Color output can be forced by
|
19
|
-
# setting the SSHKIT_COLOR environment variable.
|
20
|
-
def print_line(obj="")
|
21
|
-
string = obj.to_s
|
22
|
-
|
23
|
-
if console_width
|
24
|
-
string = truncate_to_console_width(string)
|
25
|
-
end
|
26
|
-
unless ENV["SSHKIT_COLOR"] || @output.tty?
|
27
|
-
string = strip_ascii_color(string)
|
28
|
-
end
|
29
|
-
|
30
|
-
write(string + "\n")
|
31
|
-
@output.flush
|
32
|
-
end
|
33
|
-
|
34
|
-
# Writes directly through to the IO with no truncation or color logic.
|
35
|
-
# No newline is added.
|
36
|
-
def write(string)
|
37
|
-
@output.write(string || "")
|
38
|
-
end
|
39
|
-
alias_method :<<, :write
|
40
|
-
|
41
|
-
def truncate_to_console_width(string)
|
42
|
-
string = (string || "").rstrip
|
43
|
-
width = console_width
|
44
|
-
|
45
|
-
if strip_ascii_color(string).length > width
|
46
|
-
while strip_ascii_color(string).length >= width
|
47
|
-
string.chop!
|
48
|
-
end
|
49
|
-
string << "…\e[0m"
|
50
|
-
else
|
51
|
-
string
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def strip_ascii_color(string)
|
56
|
-
(string || "").gsub(/\033\[[0-9;]*m/, "")
|
57
|
-
end
|
58
|
-
|
59
|
-
def console_width
|
60
|
-
IO.console.winsize.last if @output.tty?
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,194 +0,0 @@
|
|
1
|
-
require 'colorize'
|
2
|
-
require 'ostruct'
|
3
|
-
|
4
|
-
module SSHKit
|
5
|
-
module Formatter
|
6
|
-
class Abbreviated < SSHKit::Formatter::Abstract
|
7
|
-
|
8
|
-
class << self
|
9
|
-
attr_accessor :current_rake_task
|
10
|
-
|
11
|
-
def monkey_patch_rake_task!
|
12
|
-
return if @rake_patched
|
13
|
-
|
14
|
-
eval(<<-EVAL)
|
15
|
-
class ::Rake::Task
|
16
|
-
alias_method :_original_execute_cap55, :execute
|
17
|
-
def execute(args=nil)
|
18
|
-
SSHKit::Formatter::Abbreviated.current_rake_task = name
|
19
|
-
_original_execute_cap55(args)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
EVAL
|
23
|
-
|
24
|
-
@rake_patched = true
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def initialize(io)
|
29
|
-
super
|
30
|
-
|
31
|
-
self.class.monkey_patch_rake_task!
|
32
|
-
|
33
|
-
@tasks = {}
|
34
|
-
|
35
|
-
@log_file = fetch(:fiftyfive_log_file) || "capistrano.log"
|
36
|
-
@log_file_formatter = SSHKit::Formatter::Pretty.new(
|
37
|
-
::Logger.new(@log_file, 1, 20971520)
|
38
|
-
)
|
39
|
-
|
40
|
-
@console = Capistrano::Fiftyfive::Console.new(original_output)
|
41
|
-
write_log_file_delimiter
|
42
|
-
write_banner
|
43
|
-
end
|
44
|
-
|
45
|
-
def print_line(string)
|
46
|
-
@console.print_line(string)
|
47
|
-
end
|
48
|
-
|
49
|
-
def write_banner
|
50
|
-
print_line "Using abbreviated format."
|
51
|
-
print_line "Full cap output is being written to #{blue(@log_file)}."
|
52
|
-
end
|
53
|
-
|
54
|
-
def write_log_file_delimiter
|
55
|
-
delimiter = []
|
56
|
-
delimiter << "-" * 75
|
57
|
-
delimiter << "START #{Time.now} cap #{ARGV.join(' ')}"
|
58
|
-
delimiter << "-" * 75
|
59
|
-
delimiter.each do |line|
|
60
|
-
@log_file_formatter << SSHKit::LogMessage.new(
|
61
|
-
SSHKit::Logger::INFO,
|
62
|
-
line
|
63
|
-
)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def write(obj)
|
68
|
-
@log_file_formatter << obj
|
69
|
-
|
70
|
-
case obj
|
71
|
-
when SSHKit::Command then write_command(obj)
|
72
|
-
when SSHKit::LogMessage then write_log_message(obj)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
alias :<< :write
|
76
|
-
|
77
|
-
def on_deploy_failure
|
78
|
-
err = Capistrano::Fiftyfive::Console.new($stderr)
|
79
|
-
err.print_line
|
80
|
-
err.print_line(red("** DEPLOY FAILED"))
|
81
|
-
err.print_line(yellow(
|
82
|
-
"** Refer to #{@log_file} for details. Here are the last 20 lines:"
|
83
|
-
))
|
84
|
-
err.print_line
|
85
|
-
system("tail -n 20 #{@log_file.shellescape} 1>&2")
|
86
|
-
end
|
87
|
-
|
88
|
-
private
|
89
|
-
|
90
|
-
def write_log_message(log_message)
|
91
|
-
return unless log_message.verbosity >= SSHKit::Logger::INFO
|
92
|
-
print_task_if_changed
|
93
|
-
@console.print_line(light_black(" " + log_message.to_s))
|
94
|
-
end
|
95
|
-
|
96
|
-
def write_command(command)
|
97
|
-
return unless command.verbosity > SSHKit::Logger::DEBUG
|
98
|
-
|
99
|
-
print_task_if_changed
|
100
|
-
|
101
|
-
ctx = context_for_command(command)
|
102
|
-
number = '%02d' % ctx.number
|
103
|
-
|
104
|
-
if ctx.first_execution?
|
105
|
-
description = yellow(ctx.shell_string)
|
106
|
-
print_line " #{number} #{description}"
|
107
|
-
end
|
108
|
-
|
109
|
-
if command.finished?
|
110
|
-
status = format_command_completion_status(command, number)
|
111
|
-
print_line " #{status}"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def print_task_if_changed
|
116
|
-
status = current_task_status
|
117
|
-
|
118
|
-
if status.changed
|
119
|
-
print_line "#{clock} #{blue(status.task)}"
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def current_task_status
|
124
|
-
task = self.class.current_rake_task.to_s
|
125
|
-
if @tasks[task]
|
126
|
-
changed = false
|
127
|
-
else
|
128
|
-
changed = true
|
129
|
-
@tasks[task] = []
|
130
|
-
end
|
131
|
-
|
132
|
-
OpenStruct.new(
|
133
|
-
:task => task,
|
134
|
-
:commands => @tasks[task],
|
135
|
-
:changed => changed
|
136
|
-
)
|
137
|
-
end
|
138
|
-
|
139
|
-
def context_for_command(command)
|
140
|
-
status = current_task_status
|
141
|
-
task_commands = status.commands
|
142
|
-
|
143
|
-
shell_string = command.to_s.sub(%r(^/usr/bin/env ), "")
|
144
|
-
|
145
|
-
if task_commands.include?(shell_string)
|
146
|
-
first_execution = false
|
147
|
-
else
|
148
|
-
first_execution = true
|
149
|
-
task_commands << shell_string
|
150
|
-
end
|
151
|
-
|
152
|
-
number = task_commands.index(shell_string) + 1
|
153
|
-
|
154
|
-
OpenStruct.new({
|
155
|
-
:first_execution? => first_execution,
|
156
|
-
:number => number,
|
157
|
-
:shell_string => shell_string
|
158
|
-
})
|
159
|
-
end
|
160
|
-
|
161
|
-
def format_command_completion_status(command, number)
|
162
|
-
user = command.user { command.host.user }
|
163
|
-
host = command.host.to_s
|
164
|
-
user_at_host = [user, host].join("@")
|
165
|
-
|
166
|
-
status = if command.failure?
|
167
|
-
red("✘ #{number} #{user_at_host} (see #{@log_file} for details)")
|
168
|
-
else
|
169
|
-
green("✔ #{number} #{user_at_host}")
|
170
|
-
end
|
171
|
-
|
172
|
-
runtime = light_black("%5.3fs" % command.runtime)
|
173
|
-
|
174
|
-
status + " " + runtime
|
175
|
-
end
|
176
|
-
|
177
|
-
def clock
|
178
|
-
@start_at ||= Time.now
|
179
|
-
duration = Time.now - @start_at
|
180
|
-
|
181
|
-
minutes = (duration / 60).to_i
|
182
|
-
seconds = (duration - minutes * 60).to_i
|
183
|
-
|
184
|
-
"%02d:%02d" % [minutes, seconds]
|
185
|
-
end
|
186
|
-
|
187
|
-
%w(light_black red blue green yellow).each do |color|
|
188
|
-
define_method(color) do |string|
|
189
|
-
string.to_s.colorize(color.to_sym)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|