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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +141 -37
  3. data/bin/mrsk +1 -1
  4. data/lib/mrsk/cli/accessory.rb +0 -2
  5. data/lib/mrsk/cli/app.rb +66 -22
  6. data/lib/mrsk/cli/base.rb +80 -22
  7. data/lib/mrsk/cli/build.rb +20 -0
  8. data/lib/mrsk/cli/healthcheck.rb +4 -34
  9. data/lib/mrsk/cli/lock.rb +5 -5
  10. data/lib/mrsk/cli/main.rb +62 -53
  11. data/lib/mrsk/cli/prune.rb +4 -3
  12. data/lib/mrsk/cli/server.rb +13 -9
  13. data/lib/mrsk/cli/templates/deploy.yml +0 -4
  14. data/lib/mrsk/cli/templates/sample_hooks/post-deploy.sample +14 -0
  15. data/lib/mrsk/cli/templates/sample_hooks/pre-build.sample +51 -0
  16. data/lib/mrsk/cli/templates/sample_hooks/pre-connect.sample +47 -0
  17. data/lib/mrsk/cli/templates/sample_hooks/pre-deploy.sample +82 -0
  18. data/lib/mrsk/cli/traefik.rb +1 -1
  19. data/lib/mrsk/cli.rb +1 -0
  20. data/lib/mrsk/commander.rb +34 -9
  21. data/lib/mrsk/commands/app.rb +37 -15
  22. data/lib/mrsk/commands/auditor.rb +7 -36
  23. data/lib/mrsk/commands/base.rb +9 -2
  24. data/lib/mrsk/commands/builder/base.rb +9 -2
  25. data/lib/mrsk/commands/builder.rb +21 -1
  26. data/lib/mrsk/commands/docker.rb +21 -0
  27. data/lib/mrsk/commands/healthcheck.rb +7 -2
  28. data/lib/mrsk/commands/hook.rb +14 -0
  29. data/lib/mrsk/commands/lock.rb +2 -2
  30. data/lib/mrsk/commands/prune.rb +30 -4
  31. data/lib/mrsk/commands/traefik.rb +12 -1
  32. data/lib/mrsk/configuration/boot.rb +20 -0
  33. data/lib/mrsk/configuration/role.rb +29 -2
  34. data/lib/mrsk/configuration.rb +15 -9
  35. data/lib/mrsk/sshkit_with_ext.rb +46 -2
  36. data/lib/mrsk/tags.rb +39 -0
  37. data/lib/mrsk/utils/healthcheck_poller.rb +39 -0
  38. data/lib/mrsk/utils.rb +13 -2
  39. data/lib/mrsk/version.rb +1 -1
  40. 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.gsub(/`/, '\\\\`')
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
- version[0...7] if version
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
@@ -1,3 +1,3 @@
1
1
  module Mrsk
2
- VERSION = "0.11.0"
2
+ VERSION = "0.13.2"
3
3
  end
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.11.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-04-17 00:00:00.000000000 Z
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