capistrano-fiftyfive 0.17.2 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|