dash 3.1.5 → 3.2.1

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 (177) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -6
  3. data/bin/dash +2 -2
  4. data/lib/{kamal → dash}/cli/accessory.rb +24 -24
  5. data/lib/dash/cli/alias/command.rb +10 -0
  6. data/lib/{kamal → dash}/cli/app/assets.rb +2 -2
  7. data/lib/{kamal → dash}/cli/app/boot.rb +15 -15
  8. data/lib/{kamal → dash}/cli/app/error_pages.rb +6 -6
  9. data/lib/{kamal → dash}/cli/app/rollout_boot.rb +6 -6
  10. data/lib/{kamal → dash}/cli/app/ssl_certificates.rb +3 -3
  11. data/lib/{kamal → dash}/cli/app.rb +87 -87
  12. data/lib/{kamal → dash}/cli/base.rb +73 -49
  13. data/lib/dash/cli/build/clone.rb +59 -0
  14. data/lib/{kamal → dash}/cli/build/port_forwarding.rb +1 -1
  15. data/lib/{kamal → dash}/cli/build.rb +45 -45
  16. data/lib/{kamal → dash}/cli/doctor/config_checks.rb +3 -3
  17. data/lib/{kamal → dash}/cli/doctor/endpoint_checks.rb +25 -7
  18. data/lib/{kamal → dash}/cli/doctor/host_checks.rb +23 -23
  19. data/lib/{kamal → dash}/cli/doctor.rb +9 -9
  20. data/lib/{kamal → dash}/cli/healthcheck/barrier.rb +2 -2
  21. data/lib/{kamal → dash}/cli/healthcheck/drift_error.rb +2 -2
  22. data/lib/dash/cli/healthcheck/error.rb +2 -0
  23. data/lib/{kamal → dash}/cli/healthcheck/poller.rb +7 -7
  24. data/lib/{kamal → dash}/cli/lock.rb +1 -1
  25. data/lib/dash/cli/main/migrate.rb +77 -0
  26. data/lib/{kamal → dash}/cli/main.rb +87 -76
  27. data/lib/{kamal → dash}/cli/proxy/drift.rb +4 -4
  28. data/lib/{kamal → dash}/cli/proxy/loadbalancer_claim.rb +6 -6
  29. data/lib/{kamal → dash}/cli/proxy/loadbalancer_reboot.rb +23 -23
  30. data/lib/{kamal → dash}/cli/proxy/reboot.rb +15 -15
  31. data/lib/{kamal → dash}/cli/proxy.rb +172 -160
  32. data/lib/{kamal → dash}/cli/prune.rb +10 -10
  33. data/lib/{kamal → dash}/cli/registry.rb +13 -13
  34. data/lib/{kamal → dash}/cli/secrets.rb +3 -3
  35. data/lib/{kamal → dash}/cli/server.rb +15 -15
  36. data/lib/{kamal → dash}/cli/templates/deploy.yml +6 -6
  37. data/lib/dash/cli/templates/sample_hooks/docker-setup.sample +3 -0
  38. data/lib/dash/cli/templates/sample_hooks/post-app-boot.sample +3 -0
  39. data/lib/dash/cli/templates/sample_hooks/post-app-stop.sample +9 -0
  40. data/lib/dash/cli/templates/sample_hooks/post-deploy.sample +14 -0
  41. data/lib/dash/cli/templates/sample_hooks/post-proxy-deploy.sample +3 -0
  42. data/lib/dash/cli/templates/sample_hooks/post-proxy-reboot.sample +3 -0
  43. data/lib/dash/cli/templates/sample_hooks/pre-app-boot.sample +3 -0
  44. data/lib/{kamal → dash}/cli/templates/sample_hooks/pre-app-stop.sample +2 -2
  45. data/lib/{kamal → dash}/cli/templates/sample_hooks/pre-build.sample +8 -8
  46. data/lib/{kamal → dash}/cli/templates/sample_hooks/pre-connect.sample +8 -8
  47. data/lib/{kamal → dash}/cli/templates/sample_hooks/pre-deploy.sample +9 -9
  48. data/lib/dash/cli/templates/sample_hooks/pre-proxy-deploy.sample +3 -0
  49. data/lib/dash/cli/templates/sample_hooks/pre-proxy-reboot.sample +3 -0
  50. data/lib/dash/cli/templates/secrets +22 -0
  51. data/lib/{kamal → dash}/cli.rb +2 -2
  52. data/lib/{kamal → dash}/commander/specifics.rb +2 -2
  53. data/lib/{kamal → dash}/commander.rb +31 -23
  54. data/lib/{kamal → dash}/commands/accessory/proxy.rb +1 -1
  55. data/lib/{kamal → dash}/commands/accessory.rb +2 -2
  56. data/lib/{kamal → dash}/commands/app/assets.rb +1 -1
  57. data/lib/{kamal → dash}/commands/app/containers.rb +1 -1
  58. data/lib/{kamal → dash}/commands/app/error_pages.rb +2 -2
  59. data/lib/{kamal → dash}/commands/app/execution.rb +1 -1
  60. data/lib/{kamal → dash}/commands/app/images.rb +1 -1
  61. data/lib/{kamal → dash}/commands/app/logging.rb +1 -1
  62. data/lib/{kamal → dash}/commands/app/proxy.rb +1 -1
  63. data/lib/{kamal → dash}/commands/app.rb +1 -1
  64. data/lib/{kamal → dash}/commands/auditor.rb +3 -7
  65. data/lib/{kamal → dash}/commands/base.rb +39 -3
  66. data/lib/{kamal → dash}/commands/builder/base.rb +2 -2
  67. data/lib/{kamal → dash}/commands/builder/clone.rb +3 -3
  68. data/lib/{kamal → dash}/commands/builder/cloud.rb +1 -1
  69. data/lib/{kamal → dash}/commands/builder/hybrid.rb +1 -1
  70. data/lib/{kamal → dash}/commands/builder/local.rb +1 -1
  71. data/lib/{kamal → dash}/commands/builder/pack.rb +1 -1
  72. data/lib/{kamal → dash}/commands/builder/remote.rb +1 -1
  73. data/lib/{kamal → dash}/commands/builder.rb +7 -7
  74. data/lib/{kamal → dash}/commands/docker.rb +1 -1
  75. data/lib/{kamal → dash}/commands/hook.rb +1 -1
  76. data/lib/{kamal → dash}/commands/loadbalancer.rb +9 -8
  77. data/lib/{kamal → dash}/commands/lock.rb +2 -2
  78. data/lib/{kamal → dash}/commands/proxy/cert_transfer.rb +3 -3
  79. data/lib/{kamal → dash}/commands/proxy.rb +20 -10
  80. data/lib/{kamal → dash}/commands/prune.rb +1 -1
  81. data/lib/dash/commands/registry.rb +44 -0
  82. data/lib/{kamal → dash}/commands/server.rb +1 -5
  83. data/lib/dash/commands.rb +2 -0
  84. data/lib/{kamal → dash}/configuration/accessory.rb +11 -11
  85. data/lib/{kamal → dash}/configuration/alias.rb +3 -3
  86. data/lib/{kamal → dash}/configuration/boot.rb +2 -2
  87. data/lib/{kamal → dash}/configuration/builder.rb +7 -7
  88. data/lib/{kamal → dash}/configuration/docs/accessory.yml +6 -6
  89. data/lib/{kamal → dash}/configuration/docs/alias.yml +2 -2
  90. data/lib/{kamal → dash}/configuration/docs/boot.yml +1 -1
  91. data/lib/{kamal → dash}/configuration/docs/builder.yml +3 -3
  92. data/lib/{kamal → dash}/configuration/docs/configuration.yml +25 -18
  93. data/lib/{kamal → dash}/configuration/docs/env.yml +17 -17
  94. data/lib/{kamal → dash}/configuration/docs/proxy.yml +53 -30
  95. data/lib/{kamal → dash}/configuration/docs/registry.yml +6 -6
  96. data/lib/{kamal → dash}/configuration/docs/role.yml +1 -1
  97. data/lib/{kamal → dash}/configuration/docs/servers.yml +2 -2
  98. data/lib/{kamal → dash}/configuration/env/tag.rb +2 -2
  99. data/lib/{kamal → dash}/configuration/env.rb +5 -5
  100. data/lib/{kamal → dash}/configuration/loadbalancer.rb +3 -3
  101. data/lib/{kamal → dash}/configuration/logging.rb +3 -3
  102. data/lib/{kamal → dash}/configuration/output.rb +4 -4
  103. data/lib/{kamal → dash}/configuration/proxy/acme.rb +4 -3
  104. data/lib/{kamal → dash}/configuration/proxy/boot.rb +10 -8
  105. data/lib/{kamal → dash}/configuration/proxy/run.rb +14 -14
  106. data/lib/{kamal → dash}/configuration/proxy.rb +16 -16
  107. data/lib/{kamal → dash}/configuration/registry.rb +3 -3
  108. data/lib/{kamal → dash}/configuration/role/healthcheck.rb +3 -3
  109. data/lib/{kamal → dash}/configuration/role.rb +13 -13
  110. data/lib/{kamal → dash}/configuration/servers.rb +4 -4
  111. data/lib/{kamal → dash}/configuration/ssh.rb +3 -3
  112. data/lib/{kamal → dash}/configuration/sshkit.rb +2 -2
  113. data/lib/{kamal → dash}/configuration/validation.rb +2 -2
  114. data/lib/{kamal → dash}/configuration/validator/accessory.rb +1 -1
  115. data/lib/{kamal → dash}/configuration/validator/alias.rb +2 -2
  116. data/lib/{kamal → dash}/configuration/validator/builder.rb +1 -1
  117. data/lib/dash/configuration/validator/configuration.rb +6 -0
  118. data/lib/{kamal → dash}/configuration/validator/env.rb +2 -2
  119. data/lib/{kamal → dash}/configuration/validator/proxy.rb +8 -8
  120. data/lib/{kamal → dash}/configuration/validator/registry.rb +1 -1
  121. data/lib/{kamal → dash}/configuration/validator/role.rb +1 -1
  122. data/lib/{kamal → dash}/configuration/validator/servers.rb +1 -1
  123. data/lib/{kamal → dash}/configuration/validator.rb +4 -4
  124. data/lib/{kamal → dash}/configuration/volume.rb +2 -2
  125. data/lib/{kamal → dash}/configuration.rb +40 -30
  126. data/lib/{kamal → dash}/docker.rb +1 -1
  127. data/lib/{kamal → dash}/env_file.rb +1 -1
  128. data/lib/{kamal → dash}/git.rb +1 -1
  129. data/lib/{kamal → dash}/otel_shipper.rb +3 -3
  130. data/lib/{kamal → dash}/output/base_logger.rb +1 -1
  131. data/lib/{kamal → dash}/output/file_logger.rb +1 -1
  132. data/lib/{kamal → dash}/output/formatter.rb +1 -1
  133. data/lib/{kamal → dash}/output/otel_logger.rb +3 -3
  134. data/lib/dash/project_directory.rb +28 -0
  135. data/lib/{kamal → dash}/secrets/adapters/aws_secrets_manager.rb +1 -1
  136. data/lib/{kamal → dash}/secrets/adapters/base.rb +2 -2
  137. data/lib/{kamal → dash}/secrets/adapters/bitwarden.rb +1 -1
  138. data/lib/{kamal → dash}/secrets/adapters/bitwarden_secrets_manager.rb +1 -1
  139. data/lib/{kamal → dash}/secrets/adapters/doppler.rb +1 -1
  140. data/lib/{kamal → dash}/secrets/adapters/enpass.rb +3 -3
  141. data/lib/{kamal → dash}/secrets/adapters/gcp_secret_manager.rb +1 -1
  142. data/lib/{kamal → dash}/secrets/adapters/last_pass.rb +1 -1
  143. data/lib/{kamal → dash}/secrets/adapters/one_password.rb +2 -2
  144. data/lib/{kamal → dash}/secrets/adapters/passbolt.rb +1 -1
  145. data/lib/{kamal → dash}/secrets/adapters/test.rb +1 -1
  146. data/lib/{kamal → dash}/secrets/adapters.rb +2 -2
  147. data/lib/{kamal → dash}/secrets/dotenv/inline_command_substitution.rb +5 -3
  148. data/lib/{kamal → dash}/secrets.rb +6 -6
  149. data/lib/{kamal → dash}/tags.rb +8 -3
  150. data/lib/{kamal → dash}/utils/sensitive.rb +1 -1
  151. data/lib/{kamal → dash}/utils.rb +15 -5
  152. data/lib/dash/version.rb +3 -0
  153. data/lib/{kamal.rb → dash.rb} +5 -5
  154. metadata +171 -216
  155. data/bin/kamal +0 -18
  156. data/lib/kamal/cli/alias/command.rb +0 -10
  157. data/lib/kamal/cli/build/clone.rb +0 -59
  158. data/lib/kamal/cli/healthcheck/error.rb +0 -2
  159. data/lib/kamal/cli/templates/sample_hooks/docker-setup.sample +0 -3
  160. data/lib/kamal/cli/templates/sample_hooks/post-app-boot.sample +0 -3
  161. data/lib/kamal/cli/templates/sample_hooks/post-app-stop.sample +0 -9
  162. data/lib/kamal/cli/templates/sample_hooks/post-deploy.sample +0 -14
  163. data/lib/kamal/cli/templates/sample_hooks/post-proxy-deploy.sample +0 -3
  164. data/lib/kamal/cli/templates/sample_hooks/post-proxy-reboot.sample +0 -3
  165. data/lib/kamal/cli/templates/sample_hooks/pre-app-boot.sample +0 -3
  166. data/lib/kamal/cli/templates/sample_hooks/pre-proxy-deploy.sample +0 -3
  167. data/lib/kamal/cli/templates/sample_hooks/pre-proxy-reboot.sample +0 -3
  168. data/lib/kamal/cli/templates/secrets +0 -22
  169. data/lib/kamal/commands/registry.rb +0 -38
  170. data/lib/kamal/commands.rb +0 -2
  171. data/lib/kamal/configuration/validator/configuration.rb +0 -6
  172. data/lib/kamal/version.rb +0 -3
  173. /data/lib/{kamal → dash}/configuration/docs/logging.yml +0 -0
  174. /data/lib/{kamal → dash}/configuration/docs/output.yml +0 -0
  175. /data/lib/{kamal → dash}/configuration/docs/ssh.yml +0 -0
  176. /data/lib/{kamal → dash}/configuration/docs/sshkit.yml +0 -0
  177. /data/lib/{kamal → dash}/sshkit_with_ext.rb +0 -0
@@ -6,8 +6,8 @@
6
6
  # Accessories are managed separately from the main service — they are not updated
7
7
  # when you deploy, and they do not have zero-downtime deployments.
8
8
  #
9
- # Run `kamal accessory boot <accessory>` to boot an accessory.
10
- # See `kamal accessory --help` for more information.
9
+ # Run `dash accessory boot <accessory>` to boot an accessory.
10
+ # See `dash accessory --help` for more information.
11
11
 
12
12
  # Configuring accessories
13
13
  #
@@ -40,7 +40,7 @@ accessories:
40
40
  # <<: *specific-registry
41
41
  # ```
42
42
  #
43
- # See kamal docs registry for more information:
43
+ # See dash docs registry for more information:
44
44
  registry:
45
45
  ...
46
46
 
@@ -83,7 +83,7 @@ accessories:
83
83
 
84
84
  # Environment variables
85
85
  #
86
- # See kamal docs env for more information:
86
+ # See dash docs env for more information:
87
87
  env:
88
88
  ...
89
89
 
@@ -157,10 +157,10 @@ accessories:
157
157
  #
158
158
  # You can run your accessory behind the Kamal proxy for hostname-based
159
159
  # routing and automatic SSL. The block accepts the same schema as the
160
- # app-level `proxy:` (see `kamal docs proxy`), though root-only keys such as
160
+ # app-level `proxy:` (see `dash docs proxy`), though root-only keys such as
161
161
  # `loadbalancer` and `reboot_on_deploy` have no effect inside an accessory.
162
162
  # Declaring a proxy here makes the accessory's hosts proxy hosts:
163
- # `kamal proxy boot` (and `kamal deploy`) will run kamal-proxy on them
163
+ # `dash proxy boot` (and `dash deploy`) will run kamal-proxy on them
164
164
  # automatically.
165
165
  #
166
166
  # Accessories are never load balanced. The loadbalancer fans the app's own
@@ -5,7 +5,7 @@
5
5
  # For example, for a Rails app, you might open a console with:
6
6
  #
7
7
  # ```shell
8
- # kamal app exec -i --reuse "bin/rails console"
8
+ # dash app exec -i --reuse "bin/rails console"
9
9
  # ```
10
10
  #
11
11
  # By defining an alias, like this:
@@ -14,7 +14,7 @@ aliases:
14
14
  # You can now open the console with:
15
15
  #
16
16
  # ```shell
17
- # kamal console
17
+ # dash console
18
18
  # ```
19
19
 
20
20
  # Configuring aliases
@@ -6,7 +6,7 @@
6
6
  #
7
7
  # This is a whole-deploy setting: `limit` slices the combined host list of every role, so it cannot
8
8
  # hold one role back while another keeps booting. To pace a single role's hosts, set `boot` on that
9
- # role instead (see kamal docs role).
9
+ # role instead (see dash docs role).
10
10
 
11
11
  boot:
12
12
 
@@ -19,13 +19,13 @@ builder:
19
19
 
20
20
  # Remote
21
21
  #
22
- # The connection string for a remote builder. If supplied, Kamal will use this
22
+ # The connection string for a remote builder. If supplied, dash will use this
23
23
  # for builds that do not match the local architecture of the deployment host.
24
24
  remote: ssh://docker@docker-builder
25
25
 
26
26
  # Local
27
27
  #
28
- # If set to false, Kamal will always use the remote builder even when building
28
+ # If set to false, dash will always use the remote builder even when building
29
29
  # the local architecture.
30
30
  #
31
31
  # Defaults to true:
@@ -87,7 +87,7 @@ builder:
87
87
 
88
88
  # Build secrets
89
89
  #
90
- # Values are read from `.kamal/secrets`:
90
+ # Values are read from `.dash/secrets`:
91
91
  secrets:
92
92
  - SECRET1
93
93
  - SECRET2
@@ -5,7 +5,7 @@
5
5
  # Destinations
6
6
  #
7
7
  # When running commands, you can specify a destination with the `-d` flag,
8
- # e.g., `kamal deploy -d staging`.
8
+ # e.g., `dash deploy -d staging`.
9
9
  #
10
10
  # In this case, the configuration will also be read from `config/deploy.staging.yml`
11
11
  # and merged with the base configuration.
@@ -44,19 +44,19 @@ volumes:
44
44
 
45
45
  # Registry
46
46
  #
47
- # The Docker registry configuration, see kamal docs registry:
47
+ # The Docker registry configuration, see dash docs registry:
48
48
  registry:
49
49
  ...
50
50
 
51
51
  # Servers
52
52
  #
53
- # The servers to deploy to, optionally with custom roles, see kamal docs servers:
53
+ # The servers to deploy to, optionally with custom roles, see dash docs servers:
54
54
  servers:
55
55
  ...
56
56
 
57
57
  # Environment variables
58
58
  #
59
- # See kamal docs env:
59
+ # See dash docs env:
60
60
  env:
61
61
  ...
62
62
 
@@ -81,7 +81,7 @@ asset_path: /path/to/assets
81
81
 
82
82
  # Hooks path
83
83
  #
84
- # Path to hooks, defaults to `.kamal/hooks`.
84
+ # Path to hooks, defaults to `.dash/hooks` (`.kamal/hooks` is still read when only that exists).
85
85
  # See https://kamal-deploy.org/docs/hooks for more information:
86
86
  hooks_path: /user_home/kamal/hooks
87
87
 
@@ -106,8 +106,8 @@ hooks_output:
106
106
 
107
107
  # Secrets path
108
108
  #
109
- # Path to secrets, defaults to `.kamal/secrets`.
110
- # Kamal looks for `<secrets_path>-common` first and then `<secrets_path>`.
109
+ # Path to secrets, defaults to `.dash/secrets` (`.kamal/secrets` is still read when only that exists).
110
+ # dash looks for `<secrets_path>-common` first and then `<secrets_path>`.
111
111
  # When using destinations, it instead looks for `<secrets_path>-common` first and then
112
112
  # `<secrets_path>.<destination>`. Later files override earlier ones.
113
113
  secrets_path: /user_home/kamal/secrets
@@ -171,59 +171,66 @@ stop_timeout: 30
171
171
 
172
172
  # Run directory
173
173
  #
174
- # Directory to store kamal runtime files in on the host, default `.kamal`:
175
- run_directory: /etc/kamal
174
+ # Where dash keeps its runtime files on each host — per-app env and assets, the
175
+ # proxy's boot files and apps-config mount, loadbalancer service claims, deploy
176
+ # locks, and the audit log. Resolved against the SSH user's home, default
177
+ # `.dash`. A host still holding the pre-3.4 `.kamal` directory is renamed to
178
+ # `.dash` in place the next time dash takes a lock on it; nothing is rebooted.
179
+ #
180
+ # The key is accepted but not yet honoured — the path is currently always
181
+ # `.dash`. Tracked separately from the stage-3 rename.
182
+ run_directory: .dash
176
183
 
177
184
  # SSH options
178
185
  #
179
- # See kamal docs ssh:
186
+ # See dash docs ssh:
180
187
  ssh:
181
188
  ...
182
189
 
183
190
  # Builder options
184
191
  #
185
- # See kamal docs builder:
192
+ # See dash docs builder:
186
193
  builder:
187
194
  ...
188
195
 
189
196
  # Accessories
190
197
  #
191
- # Additional services to run in Docker, see kamal docs accessory:
198
+ # Additional services to run in Docker, see dash docs accessory:
192
199
  accessories:
193
200
  ...
194
201
 
195
202
  # Proxy
196
203
  #
197
- # Configuration for kamal-proxy, see kamal docs proxy:
204
+ # Configuration for kamal-proxy, see dash docs proxy:
198
205
  proxy:
199
206
  ...
200
207
 
201
208
  # SSHKit
202
209
  #
203
- # See kamal docs sshkit:
210
+ # See dash docs sshkit:
204
211
  sshkit:
205
212
  ...
206
213
 
207
214
  # Boot options
208
215
  #
209
- # See kamal docs boot:
216
+ # See dash docs boot:
210
217
  boot:
211
218
  ...
212
219
 
213
220
  # Logging
214
221
  #
215
- # Docker logging configuration, see kamal docs logging:
222
+ # Docker logging configuration, see dash docs logging:
216
223
  logging:
217
224
  ...
218
225
 
219
226
  # Output
220
227
  #
221
- # Configure output loggers (OTel, file), see kamal docs output:
228
+ # Configure output loggers (OTel, file), see dash docs output:
222
229
  output:
223
230
  ...
224
231
 
225
232
  # Aliases
226
233
  #
227
- # Alias configuration, see kamal docs alias:
234
+ # Alias configuration, see dash docs alias:
228
235
  aliases:
229
236
  ...
@@ -1,7 +1,7 @@
1
1
  # Environment variables
2
2
  #
3
- # Environment variables can be set directly in the Kamal configuration or
4
- # read from `.kamal/secrets`.
3
+ # Environment variables can be set directly in the dash configuration or
4
+ # read from `.dash/secrets`.
5
5
 
6
6
  # Reading environment variables from the configuration
7
7
  #
@@ -14,33 +14,33 @@ env:
14
14
 
15
15
  # Secrets
16
16
  #
17
- # Kamal uses dotenv to automatically load environment variables from the configured secrets files.
17
+ # dash uses dotenv to automatically load environment variables from the configured secrets files.
18
18
  #
19
- # Common secrets across all destinations can be set in `.kamal/secrets-common`. Kamal looks for
20
- # `.kamal/secrets-common` first, then `.kamal/secrets`, with later values overriding earlier ones.
19
+ # Common secrets across all destinations can be set in `.dash/secrets-common`. dash looks for
20
+ # `.dash/secrets-common` first, then `.dash/secrets`, with later values overriding earlier ones.
21
21
  #
22
- # If you are using destinations, Kamal looks for `.kamal/secrets-common` first, then
23
- # `.kamal/secrets.<destination>`. The non-destination `.kamal/secrets` file is not read when a
22
+ # If you are using destinations, dash looks for `.dash/secrets-common` first, then
23
+ # `.dash/secrets.<destination>`. The non-destination `.dash/secrets` file is not read when a
24
24
  # destination is selected.
25
25
  #
26
- # This file can be used to set variables like `KAMAL_REGISTRY_PASSWORD` or database passwords.
26
+ # This file can be used to set variables like `DASH_REGISTRY_PASSWORD` or database passwords.
27
27
  # You can use variable or command substitution in the secrets file.
28
28
  #
29
29
  # ```shell
30
- # KAMAL_REGISTRY_PASSWORD=$KAMAL_REGISTRY_PASSWORD
30
+ # DASH_REGISTRY_PASSWORD=$DASH_REGISTRY_PASSWORD
31
31
  # RAILS_MASTER_KEY=$(cat config/master.key)
32
32
  # ```
33
33
  #
34
34
  # You can also use [secret helpers](../../commands/secrets) for some common password managers.
35
35
  #
36
36
  # ```shell
37
- # SECRETS=$(kamal secrets fetch ...)
37
+ # SECRETS=$(dash secrets fetch ...)
38
38
  #
39
- # REGISTRY_PASSWORD=$(kamal secrets extract REGISTRY_PASSWORD $SECRETS)
40
- # DB_PASSWORD=$(kamal secrets extract DB_PASSWORD $SECRETS)
39
+ # REGISTRY_PASSWORD=$(dash secrets extract REGISTRY_PASSWORD $SECRETS)
40
+ # DB_PASSWORD=$(dash secrets extract DB_PASSWORD $SECRETS)
41
41
  # ```
42
42
  #
43
- # If you store secrets directly in `.kamal/secrets`, ensure that it is not checked into version control.
43
+ # If you store secrets directly in `.dash/secrets`, ensure that it is not checked into version control.
44
44
  #
45
45
  # To pass the secrets, you should list them under the `secret` key. When you do this, the
46
46
  # other variables need to be moved under the `clear` key.
@@ -62,10 +62,10 @@ env:
62
62
  # on the context.
63
63
  #
64
64
  # ```shell
65
- # SECRETS=$(kamal secrets fetch ...)
65
+ # SECRETS=$(dash secrets fetch ...)
66
66
  #
67
- # MAIN_DB_PASSWORD=$(kamal secrets extract MAIN_DB_PASSWORD $SECRETS)
68
- # SECONDARY_DB_PASSWORD=$(kamal secrets extract SECONDARY_DB_PASSWORD $SECRETS)
67
+ # MAIN_DB_PASSWORD=$(dash secrets extract MAIN_DB_PASSWORD $SECRETS)
68
+ # SECONDARY_DB_PASSWORD=$(dash secrets extract SECONDARY_DB_PASSWORD $SECRETS)
69
69
  # ```
70
70
  env:
71
71
  secret:
@@ -87,7 +87,7 @@ accessories:
87
87
  # Tags
88
88
  #
89
89
  # Tags are used to add extra env variables to specific hosts.
90
- # See kamal docs servers for how to tag hosts.
90
+ # See dash docs servers for how to tag hosts.
91
91
  #
92
92
  # Tags are only allowed in the top-level env configuration (i.e., not under a role-specific env).
93
93
  #
@@ -16,7 +16,7 @@ proxy:
16
16
  # Where each option lives when a loadbalancer fronts the fleet
17
17
  #
18
18
  # Every deploy option has exactly one home (see
19
- # Kamal::Configuration::Proxy::DEPLOY_OPTION_DISPOSITIONS - the layering
19
+ # Dash::Configuration::Proxy::DEPLOY_OPTION_DISPOSITIONS - the layering
20
20
  # contract that enforces this):
21
21
  #
22
22
  # edge - applied only by the loadbalancer, stripped from the per-host
@@ -71,46 +71,46 @@ proxy:
71
71
  # for multi-host primary roles.
72
72
  loadbalancer: lb.example.com
73
73
 
74
- # Sharing one loadbalancer between several kamal apps
74
+ # Sharing one loadbalancer between several dash apps
75
75
  #
76
- # More than one kamal app may point `loadbalancer:` at the same host. Each app
76
+ # More than one dash app may point `loadbalancer:` at the same host. Each app
77
77
  # registers its own service on the shared kamal-proxy and keeps its own
78
78
  # deploy.yml; the load balancer multiplexes them by hostname.
79
79
  #
80
- # The rules kamal enforces for that topology:
80
+ # The rules dash enforces for that topology:
81
81
  #
82
82
  # * Service state survives a reboot. kamal-proxy persists its services in the
83
83
  # `kamal-loadbalancer-config` volume (or `kamal-proxy-config` when the
84
- # loadbalancer shares a proxy host), and `kamal proxy reboot` only replaces
84
+ # loadbalancer shares a proxy host), and `dash proxy reboot` only replaces
85
85
  # the container. Rebooting from app A does not drop app B's routes — the
86
86
  # surviving service list is printed after the restart.
87
87
  #
88
88
  # * Service names must be unique across apps. The loadbalancer registers a
89
89
  # service under the bare `service:` name, so two apps — or two destinations
90
90
  # of one app — sharing a name would take over each other's routes. The first
91
- # app to deploy claims the name in `.kamal/loadbalancer/services/<service>`
91
+ # app to deploy claims the name in `.dash/loadbalancer/services/<service>`
92
92
  # on the loadbalancer host; a second app deploying the same name fails at
93
93
  # deploy time instead of silently winning.
94
94
  #
95
95
  # * Apps sharing a loadbalancer must agree on `proxy/run`. All of them boot the
96
96
  # same container, so the first app to boot records its run configuration in
97
- # `.kamal/loadbalancer/run_config`. Another app booting with a different
97
+ # `.dash/loadbalancer/run_config`. Another app booting with a different
98
98
  # `proxy/run` fails; the same app changing its own gets the usual drift
99
- # warning and applies it on `kamal proxy reboot`.
99
+ # warning and applies it on `dash proxy reboot`.
100
100
  #
101
- # * `kamal proxy remove` refuses while other apps are installed on the
101
+ # * `dash proxy remove` refuses while other apps are installed on the
102
102
  # loadbalancer host, exactly as it does for a proxy host. Use `--force` to
103
103
  # override, which removes the shared loadbalancer for every app on it.
104
104
 
105
105
  # Automatic proxy reboot on deploy
106
106
  #
107
- # When `kamal deploy` detects that the running kamal-proxy container was
107
+ # When `dash deploy` detects that the running kamal-proxy container was
108
108
  # started with a different image, version or run options than the current
109
109
  # configuration, it reboots the proxy automatically — one host at a time —
110
110
  # before booting the app.
111
111
  #
112
112
  # Set to false to opt out. Kamal will then print a warning when drift is
113
- # detected and leave the proxy untouched until you run `kamal proxy reboot`.
113
+ # detected and leave the proxy untouched until you run `dash proxy reboot`.
114
114
  #
115
115
  # Root-level `proxy` setting only; ignored inside role-specific proxy blocks.
116
116
  #
@@ -155,14 +155,14 @@ proxy:
155
155
  # in an incoming handshake. A path is resolved against a healthy app target; an
156
156
  # absolute http(s) URL is called directly. Answer 2xx to approve. On-demand TLS
157
157
  # replaces the static hostname list, so it cannot be combined with
158
- # `host`/`hosts`, with `certificate_pem`, or with `ssl_domains` — kamal rejects
158
+ # `host`/`hosts`, with `certificate_pem`, or with `ssl_domains` — dash rejects
159
159
  # those at config time, because kamal-proxy would reject the deploy and there
160
160
  # is no sensible winner to pick.
161
161
  #
162
162
  # `client_ca_pem` requires mutual TLS: clients must present a certificate
163
163
  # signed by this CA bundle. Like `certificate_pem` it names a secret in
164
- # `.kamal/secrets`; the content is uploaded next to the app's TLS material
165
- # under `.kamal/proxy/apps-config`, and the proxy is given the path it sees
164
+ # `.dash/secrets`; the content is uploaded next to the app's TLS material
165
+ # under `.dash/proxy/apps-config`, and the proxy is given the path it sees
166
166
  # inside its own container. An empty secret fails the deploy rather than
167
167
  # silently turning mTLS off.
168
168
  ssl:
@@ -258,7 +258,7 @@ proxy:
258
258
  # whitespace trimmed. A value may contain colons — a CSP naming a scheme or a
259
259
  # port survives intact.
260
260
  #
261
- # Two things kamal rejects rather than letting them fail late: a value with a
261
+ # Two things dash rejects rather than letting them fail late: a value with a
262
262
  # newline or carriage return in it (that is response splitting, and shell
263
263
  # escaping would silently turn it into a literal backslash-n), and a *request*
264
264
  # rule naming `Host` — Go carries the host outside the header map, so the rule
@@ -377,7 +377,7 @@ proxy:
377
377
  #
378
378
  # Set exactly one of `password_secret` or `password` — never both.
379
379
  #
380
- # Prefer `password_secret`: it names an entry in `.kamal/secrets`, so the
380
+ # Prefer `password_secret`: it names an entry in `.dash/secrets`, so the
381
381
  # password never lives in this file.
382
382
  #
383
383
  # basic_auth:
@@ -450,7 +450,7 @@ proxy:
450
450
  # `header` names the header carrying the original client IP (`CF-Connecting-IP`
451
451
  # behind Cloudflare, `True-Client-IP` behind some others); kamal-proxy reads it
452
452
  # instead of `X-Forwarded-For`. It is only honoured when `trusted_proxies` is
453
- # set, because otherwise it is just something the client wrote — kamal rejects
453
+ # set, because otherwise it is just something the client wrote — dash rejects
454
454
  # that combination rather than appearing to honour it.
455
455
  #
456
456
  # Addresses and ranges are plain IPv4/IPv6 or CIDR. Write IPv4 as IPv4, not as
@@ -501,7 +501,7 @@ proxy:
501
501
  #
502
502
  # Refuse requests whose full User-Agent matches one of these RE2 patterns,
503
503
  # checked after the IP rules. A missing User-Agent only matches an explicit
504
- # '^$' pattern. Patterns are matched by kamal-proxy (Go RE2), so kamal checks
504
+ # '^$' pattern. Patterns are matched by kamal-proxy (Go RE2), so dash checks
505
505
  # only their shape, not their syntax.
506
506
  deny_user_agents:
507
507
  - 'BadBot/.*'
@@ -509,7 +509,7 @@ proxy:
509
509
  # ### Notes
510
510
  # - The health check path is served without an address check and without a rate
511
511
  # limit, so it stays reachable during a deploy. That means it cannot be `/` —
512
- # kamal rejects `healthcheck: path: /` while either feature is on, because it
512
+ # dash rejects `healthcheck: path: /` while either feature is on, because it
513
513
  # would leave the whole service open. The default `/up` is fine.
514
514
  # - When a loadbalancer is configured, all of this moves to the loadbalancer:
515
515
  # the per-host proxies see the loadbalancer as their peer, so an allow list
@@ -681,17 +681,17 @@ proxy:
681
681
  #
682
682
  # ### Administering it
683
683
  #
684
- # `kamal proxy cache stats` reports what the cache is holding (add `--count`
684
+ # `dash proxy cache stats` reports what the cache is holding (add `--count`
685
685
  # to measure entries and bytes per service, `--json` for the raw report),
686
- # and `kamal proxy cache purge` drops this app's cached responses
686
+ # and `dash proxy cache purge` drops this app's cached responses
687
687
  # (`--path-prefix /assets` to narrow it). Both run on the layer that owns
688
688
  # the cache - the loadbalancer when load balancing, else each proxy host.
689
689
  #
690
690
  # ### When it is not caching
691
691
  #
692
692
  # A cache that quietly stores nothing is the usual first surprise. Start with
693
- # `kamal proxy cache stats`; kamal-proxy also explains every refusal — check
694
- # `kamal proxy logs` for the reason, and the `cache_refusals_total` metric
693
+ # `dash proxy cache stats`; kamal-proxy also explains every refusal — check
694
+ # `dash proxy logs` for the reason, and the `cache_refusals_total` metric
695
695
  # (by `reason`) if you run with `metrics_port`.
696
696
  # The common reasons are a missing `Cache-Control: public, max-age=...` on the
697
697
  # app's response, a `Set-Cookie` header, a body over `max_body`, and
@@ -792,7 +792,7 @@ proxy:
792
792
  #
793
793
  # Stopping and starting containers means talking to the runtime, so the proxy
794
794
  # must have been booted with `run/docker_socket` set. That is a boot-time
795
- # prerequisite for a deploy-time setting, so kamal checks it while reading this
795
+ # prerequisite for a deploy-time setting, so dash checks it while reading this
796
796
  # file rather than letting the first request hang.
797
797
  #
798
798
  # Setting `run/docker_socket` also mounts that socket into the proxy container
@@ -832,9 +832,9 @@ proxy:
832
832
  # `repository` to a host-less path (e.g.
833
833
  # myfork/kamal-proxy) - the default repository
834
834
  # below already embeds its ghcr.io host
835
- repository: ghcr.io/zoolutions/kamal-proxy # Container repository for the
835
+ repository: ghcr.io/zoolutions/dash-proxy # Container repository for the
836
836
  # kamal-proxy image (this is the default)
837
- version: v1.0.0.5 # Version tag of the kamal-proxy image to use.
837
+ version: v1.0.0.7 # Version tag of the kamal-proxy image to use.
838
838
  # Defaults to the minimum version this gem
839
839
  # requires - only pin it to roll forward early,
840
840
  # never below the default
@@ -880,7 +880,29 @@ proxy:
880
880
  # staging environment while you are working out a DNS setup, so you do not
881
881
  # burn production rate limits on failed attempts.
882
882
  #
883
- # `credentials` names entries in `.kamal/secrets` to pass to the proxy
883
+ # `release_probe_interval` is how often, in seconds, the proxy re-checks a
884
+ # domain whose issuance is currently held - which is what decides how long
885
+ # after a DNS cutover the certificate appears (proxy v1.0.0.7+).
886
+ #
887
+ # You can point a host at dash before its DNS is repointed. No certificate
888
+ # is ordered until the first HTTPS request arrives, and the proxy first
889
+ # checks that the domain actually routes back to it - because until it does,
890
+ # an HTTP-01 challenge cannot succeed, and a failed attempt burns Let's
891
+ # Encrypt's limit of five failed authorizations per hostname per hour.
892
+ # Tripping that limit is what would otherwise delay the certificate at the
893
+ # moment of the cutover. Held domains are re-checked on this interval and
894
+ # issued as soon as the domain arrives, so the cutover costs one interval
895
+ # rather than a backoff step.
896
+ #
897
+ # The default is 60. A negative value switches release probing off, leaving
898
+ # a held domain to wait out its backoff. Zones covered by a DNS-01 provider
899
+ # skip all of this: DNS-01 never depends on where a domain points, so their
900
+ # certificates can be issued well before a cutover.
901
+ #
902
+ # `dash proxy domains list` shows what is held and why; `dash proxy domains
903
+ # retry HOST` clears a hold when you already know the cause is fixed.
904
+ #
905
+ # `credentials` names entries in `.dash/secrets` to pass to the proxy
884
906
  # container as environment variables - the API credentials your DNS provider
885
907
  # needs (`CF_DNS_API_TOKEN`, `LOOPIA_API_USER`, ...). Name them exactly as the
886
908
  # provider expects them, since the name is what reaches the container.
@@ -890,7 +912,7 @@ proxy:
890
912
  # zone, and `docker run --env` would leave it in process listings and audit
891
913
  # logs. Adding or renaming one changes the proxy's config digest, so the next
892
914
  # deploy reboots the proxy to pick it up; rotating a value does not, so run
893
- # `kamal proxy reboot` yourself after a rotation.
915
+ # `dash proxy reboot` yourself after a rotation.
894
916
  acme:
895
917
  email: admin@example.com
896
918
  dns_provider:
@@ -899,6 +921,7 @@ proxy:
899
921
  default: route53
900
922
  prefer_wildcard: true
901
923
  http_fallback: false
924
+ release_probe_interval: 60
902
925
  directory: https://acme-staging-v02.api.letsencrypt.org/directory
903
926
  credentials:
904
927
  - CF_DNS_API_TOKEN
@@ -1035,12 +1058,12 @@ proxy:
1035
1058
  # `rediss://` URL that every proxy pointed at it shares, so one fetch warms
1036
1059
  # the whole fleet.
1037
1060
  #
1038
- # The URL never appears on the proxy's command line: kamal delivers it as
1061
+ # The URL never appears on the proxy's command line: dash delivers it as
1039
1062
  # `CACHE_STORE` in a 0600 env file on the host (alongside any ACME
1040
1063
  # credentials), so a password in the URL stays out of process listings and
1041
1064
  # kamal's audit log. The trade-off, same as the ACME credentials: changing
1042
1065
  # only the URL's *value* does not move the drift digest — run
1043
- # `kamal proxy reboot` after rotating it.
1066
+ # `dash proxy reboot` after rotating it.
1044
1067
  #
1045
1068
  # `store_timeout` only matters with a shared store, in seconds: how long
1046
1069
  # the store may take to answer before the request goes to the app instead —
@@ -4,7 +4,7 @@
4
4
 
5
5
  # Using a local container registry
6
6
  #
7
- # If the registry server starts with `localhost`, Kamal will start a local Docker registry
7
+ # If the registry server starts with `localhost`, dash will start a local Docker registry
8
8
  # on that port and push the app image to it.
9
9
  registry:
10
10
  server: localhost:5555
@@ -15,13 +15,13 @@ registry:
15
15
  # set up a private repository before deploying, or change the default repository privacy
16
16
  # settings to private in your [Docker Hub settings](https://hub.docker.com/repository-settings/default-privacy).
17
17
  #
18
- # A reference to a secret (in this case, `KAMAL_REGISTRY_PASSWORD`) will look up the secret
18
+ # A reference to a secret (in this case, `DASH_REGISTRY_PASSWORD`) will look up the secret
19
19
  # in the local environment:
20
20
  registry:
21
21
  username:
22
22
  - <your docker hub username>
23
23
  password:
24
- - KAMAL_REGISTRY_PASSWORD
24
+ - DASH_REGISTRY_PASSWORD
25
25
 
26
26
  # Using AWS ECR as the container registry
27
27
  #
@@ -45,7 +45,7 @@ registry:
45
45
  # base64 -i /path/to/key.json | tr -d "\\n"
46
46
  # ```
47
47
  #
48
- # You'll then need to set the `KAMAL_REGISTRY_PASSWORD` secret to that value.
48
+ # You'll then need to set the `DASH_REGISTRY_PASSWORD` secret to that value.
49
49
  #
50
50
  # Use the environment variable as the password along with `_json_key_base64` as the username.
51
51
  # Here’s the final configuration:
@@ -53,12 +53,12 @@ registry:
53
53
  server: <your registry region>-docker.pkg.dev
54
54
  username: _json_key_base64
55
55
  password:
56
- - KAMAL_REGISTRY_PASSWORD
56
+ - DASH_REGISTRY_PASSWORD
57
57
 
58
58
  # Validating the configuration
59
59
  #
60
60
  # You can validate the configuration by running:
61
61
  #
62
62
  # ```shell
63
- # kamal registry login
63
+ # dash registry login
64
64
  # ```
@@ -15,7 +15,7 @@ servers:
15
15
  #
16
16
  # This can be a list of hosts if you don't need custom configuration for the role.
17
17
  #
18
- # You can set tags on the hosts for custom env variables (see kamal docs env):
18
+ # You can set tags on the hosts for custom env variables (see dash docs env):
19
19
  web:
20
20
  - 172.1.0.1
21
21
  - 172.1.0.2: experiment1
@@ -11,7 +11,7 @@ servers:
11
11
 
12
12
  # Tagging servers
13
13
  #
14
- # Servers can be tagged, with the tags used to add custom env variables (see kamal docs env).
14
+ # Servers can be tagged, with the tags used to add custom env variables (see dash docs env).
15
15
  servers:
16
16
  - 172.0.0.1
17
17
  - 172.0.0.2: experiments
@@ -19,7 +19,7 @@ servers:
19
19
 
20
20
  # Roles
21
21
  #
22
- # For more complex deployments (e.g., if you are running job hosts), you can specify roles and configure each separately (see kamal docs role):
22
+ # For more complex deployments (e.g., if you are running job hosts), you can specify roles and configure each separately (see dash docs role):
23
23
  servers:
24
24
  web:
25
25
  ...
@@ -1,4 +1,4 @@
1
- class Kamal::Configuration::Env::Tag
1
+ class Dash::Configuration::Env::Tag
2
2
  attr_reader :name, :config, :secrets
3
3
 
4
4
  def initialize(name, config:, secrets:)
@@ -8,6 +8,6 @@ class Kamal::Configuration::Env::Tag
8
8
  end
9
9
 
10
10
  def env
11
- Kamal::Configuration::Env.new(config: config, secrets: secrets)
11
+ Dash::Configuration::Env.new(config: config, secrets: secrets)
12
12
  end
13
13
  end
@@ -1,15 +1,15 @@
1
- class Kamal::Configuration::Env
2
- include Kamal::Configuration::Validation
1
+ class Dash::Configuration::Env
2
+ include Dash::Configuration::Validation
3
3
 
4
4
  attr_reader :context, :clear, :secrets, :secret_keys
5
- delegate :argumentize, to: Kamal::Utils
5
+ delegate :argumentize, to: Dash::Utils
6
6
 
7
7
  def initialize(config:, secrets:, context: "env")
8
8
  @clear = config.fetch("clear", config.key?("secret") || config.key?("tags") ? {} : config)
9
9
  @secrets = secrets
10
10
  @secret_keys = config.fetch("secret", [])
11
11
  @context = context
12
- validate! config, context: context, with: Kamal::Configuration::Validator::Env
12
+ validate! config, context: context, with: Dash::Configuration::Validator::Env
13
13
  end
14
14
 
15
15
  def clear_args
@@ -17,7 +17,7 @@ class Kamal::Configuration::Env
17
17
  end
18
18
 
19
19
  def secrets_io
20
- Kamal::EnvFile.new(aliased_secrets).to_io
20
+ Dash::EnvFile.new(aliased_secrets).to_io
21
21
  end
22
22
 
23
23
  def merge(other)