mrsk 0.11.0 → 0.13.2
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/README.md +141 -37
- data/bin/mrsk +1 -1
- data/lib/mrsk/cli/accessory.rb +0 -2
- data/lib/mrsk/cli/app.rb +66 -22
- data/lib/mrsk/cli/base.rb +80 -22
- data/lib/mrsk/cli/build.rb +20 -0
- data/lib/mrsk/cli/healthcheck.rb +4 -34
- data/lib/mrsk/cli/lock.rb +5 -5
- data/lib/mrsk/cli/main.rb +62 -53
- data/lib/mrsk/cli/prune.rb +4 -3
- data/lib/mrsk/cli/server.rb +13 -9
- data/lib/mrsk/cli/templates/deploy.yml +0 -4
- data/lib/mrsk/cli/templates/sample_hooks/post-deploy.sample +14 -0
- data/lib/mrsk/cli/templates/sample_hooks/pre-build.sample +51 -0
- data/lib/mrsk/cli/templates/sample_hooks/pre-connect.sample +47 -0
- data/lib/mrsk/cli/templates/sample_hooks/pre-deploy.sample +82 -0
- data/lib/mrsk/cli/traefik.rb +1 -1
- data/lib/mrsk/cli.rb +1 -0
- data/lib/mrsk/commander.rb +34 -9
- data/lib/mrsk/commands/app.rb +37 -15
- data/lib/mrsk/commands/auditor.rb +7 -36
- data/lib/mrsk/commands/base.rb +9 -2
- data/lib/mrsk/commands/builder/base.rb +9 -2
- data/lib/mrsk/commands/builder.rb +21 -1
- data/lib/mrsk/commands/docker.rb +21 -0
- data/lib/mrsk/commands/healthcheck.rb +7 -2
- data/lib/mrsk/commands/hook.rb +14 -0
- data/lib/mrsk/commands/lock.rb +2 -2
- data/lib/mrsk/commands/prune.rb +30 -4
- data/lib/mrsk/commands/traefik.rb +12 -1
- data/lib/mrsk/configuration/boot.rb +20 -0
- data/lib/mrsk/configuration/role.rb +29 -2
- data/lib/mrsk/configuration.rb +15 -9
- data/lib/mrsk/sshkit_with_ext.rb +46 -2
- data/lib/mrsk/tags.rb +39 -0
- data/lib/mrsk/utils/healthcheck_poller.rb +39 -0
- data/lib/mrsk/utils.rb +13 -2
- data/lib/mrsk/version.rb +1 -1
- metadata +11 -2
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
class Mrsk::Utils::HealthcheckPoller
|
|
2
|
+
TRAEFIK_HEALTHY_DELAY = 2
|
|
3
|
+
|
|
4
|
+
class HealthcheckError < StandardError; end
|
|
5
|
+
|
|
6
|
+
class << self
|
|
7
|
+
def wait_for_healthy(pause_after_ready: false, &block)
|
|
8
|
+
attempt = 1
|
|
9
|
+
max_attempts = MRSK.config.healthcheck["max_attempts"]
|
|
10
|
+
|
|
11
|
+
begin
|
|
12
|
+
case status = block.call
|
|
13
|
+
when "healthy"
|
|
14
|
+
sleep TRAEFIK_HEALTHY_DELAY if pause_after_ready
|
|
15
|
+
when "running" # No health check configured
|
|
16
|
+
sleep MRSK.config.readiness_delay if pause_after_ready
|
|
17
|
+
else
|
|
18
|
+
raise HealthcheckError, "container not ready (#{status})"
|
|
19
|
+
end
|
|
20
|
+
rescue HealthcheckError => e
|
|
21
|
+
if attempt <= max_attempts
|
|
22
|
+
info "#{e.message}, retrying in #{attempt}s (attempt #{attempt}/#{max_attempts})..."
|
|
23
|
+
sleep attempt
|
|
24
|
+
attempt += 1
|
|
25
|
+
retry
|
|
26
|
+
else
|
|
27
|
+
raise
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
info "Container is healthy!"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
def info(message)
|
|
36
|
+
SSHKit.config.output.info(message)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
data/lib/mrsk/utils.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
module Mrsk::Utils
|
|
2
2
|
extend self
|
|
3
3
|
|
|
4
|
+
DOLLAR_SIGN_WITHOUT_SHELL_EXPANSION_REGEX = /\$(?!{[^\}]*\})/
|
|
5
|
+
|
|
4
6
|
# Return a list of escaped shell arguments using the same named argument against the passed attributes (hash or array).
|
|
5
7
|
def argumentize(argument, attributes, sensitive: false)
|
|
6
8
|
Array(attributes).flat_map do |key, value|
|
|
@@ -75,11 +77,20 @@ module Mrsk::Utils
|
|
|
75
77
|
|
|
76
78
|
# Escape a value to make it safe for shell use.
|
|
77
79
|
def escape_shell_value(value)
|
|
78
|
-
value.to_s.dump
|
|
80
|
+
value.to_s.dump
|
|
81
|
+
.gsub(/`/, '\\\\`')
|
|
82
|
+
.gsub(DOLLAR_SIGN_WITHOUT_SHELL_EXPANSION_REGEX, '\$')
|
|
79
83
|
end
|
|
80
84
|
|
|
81
85
|
# Abbreviate a git revhash for concise display
|
|
82
86
|
def abbreviate_version(version)
|
|
83
|
-
|
|
87
|
+
if version
|
|
88
|
+
# Don't abbreviate <sha>_uncommitted_<etc>
|
|
89
|
+
if version.include?("_")
|
|
90
|
+
version
|
|
91
|
+
else
|
|
92
|
+
version[0...7]
|
|
93
|
+
end
|
|
94
|
+
end
|
|
84
95
|
end
|
|
85
96
|
end
|
data/lib/mrsk/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mrsk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.13.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Heinemeier Hansson
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-06-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -187,6 +187,10 @@ files:
|
|
|
187
187
|
- lib/mrsk/cli/registry.rb
|
|
188
188
|
- lib/mrsk/cli/server.rb
|
|
189
189
|
- lib/mrsk/cli/templates/deploy.yml
|
|
190
|
+
- lib/mrsk/cli/templates/sample_hooks/post-deploy.sample
|
|
191
|
+
- lib/mrsk/cli/templates/sample_hooks/pre-build.sample
|
|
192
|
+
- lib/mrsk/cli/templates/sample_hooks/pre-connect.sample
|
|
193
|
+
- lib/mrsk/cli/templates/sample_hooks/pre-deploy.sample
|
|
190
194
|
- lib/mrsk/cli/templates/template.env
|
|
191
195
|
- lib/mrsk/cli/traefik.rb
|
|
192
196
|
- lib/mrsk/commander.rb
|
|
@@ -201,16 +205,21 @@ files:
|
|
|
201
205
|
- lib/mrsk/commands/builder/multiarch/remote.rb
|
|
202
206
|
- lib/mrsk/commands/builder/native.rb
|
|
203
207
|
- lib/mrsk/commands/builder/native/remote.rb
|
|
208
|
+
- lib/mrsk/commands/docker.rb
|
|
204
209
|
- lib/mrsk/commands/healthcheck.rb
|
|
210
|
+
- lib/mrsk/commands/hook.rb
|
|
205
211
|
- lib/mrsk/commands/lock.rb
|
|
206
212
|
- lib/mrsk/commands/prune.rb
|
|
207
213
|
- lib/mrsk/commands/registry.rb
|
|
208
214
|
- lib/mrsk/commands/traefik.rb
|
|
209
215
|
- lib/mrsk/configuration.rb
|
|
210
216
|
- lib/mrsk/configuration/accessory.rb
|
|
217
|
+
- lib/mrsk/configuration/boot.rb
|
|
211
218
|
- lib/mrsk/configuration/role.rb
|
|
212
219
|
- lib/mrsk/sshkit_with_ext.rb
|
|
220
|
+
- lib/mrsk/tags.rb
|
|
213
221
|
- lib/mrsk/utils.rb
|
|
222
|
+
- lib/mrsk/utils/healthcheck_poller.rb
|
|
214
223
|
- lib/mrsk/utils/sensitive.rb
|
|
215
224
|
- lib/mrsk/version.rb
|
|
216
225
|
homepage: https://github.com/rails/mrsk
|