cpflow 3.0.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.
Files changed (100) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/check_cpln_links.yml +19 -0
  3. data/.github/workflows/command_docs.yml +24 -0
  4. data/.github/workflows/rspec-shared.yml +56 -0
  5. data/.github/workflows/rspec.yml +28 -0
  6. data/.github/workflows/rubocop.yml +24 -0
  7. data/.gitignore +18 -0
  8. data/.overcommit.yml +16 -0
  9. data/.rubocop.yml +22 -0
  10. data/.simplecov_spawn.rb +10 -0
  11. data/CHANGELOG.md +259 -0
  12. data/CONTRIBUTING.md +73 -0
  13. data/Gemfile +7 -0
  14. data/Gemfile.lock +126 -0
  15. data/LICENSE +21 -0
  16. data/README.md +546 -0
  17. data/Rakefile +21 -0
  18. data/bin/cpflow +6 -0
  19. data/cpflow +6 -0
  20. data/cpflow.gemspec +41 -0
  21. data/docs/assets/grafana-alert.png +0 -0
  22. data/docs/assets/memcached.png +0 -0
  23. data/docs/assets/sidekiq-pre-stop-hook.png +0 -0
  24. data/docs/commands.md +454 -0
  25. data/docs/dns.md +15 -0
  26. data/docs/migrating.md +262 -0
  27. data/docs/postgres.md +436 -0
  28. data/docs/redis.md +128 -0
  29. data/docs/secrets-and-env-values.md +42 -0
  30. data/docs/tips.md +150 -0
  31. data/docs/troubleshooting.md +6 -0
  32. data/examples/circleci.yml +104 -0
  33. data/examples/controlplane.yml +159 -0
  34. data/lib/command/apply_template.rb +209 -0
  35. data/lib/command/base.rb +540 -0
  36. data/lib/command/build_image.rb +49 -0
  37. data/lib/command/cleanup_images.rb +136 -0
  38. data/lib/command/cleanup_stale_apps.rb +79 -0
  39. data/lib/command/config.rb +48 -0
  40. data/lib/command/copy_image_from_upstream.rb +108 -0
  41. data/lib/command/delete.rb +149 -0
  42. data/lib/command/deploy_image.rb +56 -0
  43. data/lib/command/doctor.rb +47 -0
  44. data/lib/command/env.rb +22 -0
  45. data/lib/command/exists.rb +23 -0
  46. data/lib/command/generate.rb +45 -0
  47. data/lib/command/info.rb +222 -0
  48. data/lib/command/latest_image.rb +19 -0
  49. data/lib/command/logs.rb +49 -0
  50. data/lib/command/maintenance.rb +42 -0
  51. data/lib/command/maintenance_off.rb +62 -0
  52. data/lib/command/maintenance_on.rb +62 -0
  53. data/lib/command/maintenance_set_page.rb +34 -0
  54. data/lib/command/no_command.rb +23 -0
  55. data/lib/command/open.rb +33 -0
  56. data/lib/command/open_console.rb +26 -0
  57. data/lib/command/promote_app_from_upstream.rb +38 -0
  58. data/lib/command/ps.rb +41 -0
  59. data/lib/command/ps_restart.rb +37 -0
  60. data/lib/command/ps_start.rb +51 -0
  61. data/lib/command/ps_stop.rb +82 -0
  62. data/lib/command/ps_wait.rb +40 -0
  63. data/lib/command/run.rb +573 -0
  64. data/lib/command/setup_app.rb +113 -0
  65. data/lib/command/test.rb +23 -0
  66. data/lib/command/version.rb +18 -0
  67. data/lib/constants/exit_code.rb +7 -0
  68. data/lib/core/config.rb +316 -0
  69. data/lib/core/controlplane.rb +552 -0
  70. data/lib/core/controlplane_api.rb +170 -0
  71. data/lib/core/controlplane_api_direct.rb +112 -0
  72. data/lib/core/doctor_service.rb +104 -0
  73. data/lib/core/helpers.rb +26 -0
  74. data/lib/core/shell.rb +100 -0
  75. data/lib/core/template_parser.rb +76 -0
  76. data/lib/cpflow/version.rb +6 -0
  77. data/lib/cpflow.rb +288 -0
  78. data/lib/deprecated_commands.json +9 -0
  79. data/lib/generator_templates/Dockerfile +27 -0
  80. data/lib/generator_templates/controlplane.yml +62 -0
  81. data/lib/generator_templates/entrypoint.sh +8 -0
  82. data/lib/generator_templates/templates/app.yml +21 -0
  83. data/lib/generator_templates/templates/postgres.yml +176 -0
  84. data/lib/generator_templates/templates/rails.yml +36 -0
  85. data/rakelib/create_release.rake +81 -0
  86. data/script/add_command +37 -0
  87. data/script/check_command_docs +3 -0
  88. data/script/check_cpln_links +45 -0
  89. data/script/rename_command +43 -0
  90. data/script/update_command_docs +62 -0
  91. data/templates/app.yml +13 -0
  92. data/templates/daily-task.yml +32 -0
  93. data/templates/maintenance.yml +25 -0
  94. data/templates/memcached.yml +24 -0
  95. data/templates/postgres.yml +32 -0
  96. data/templates/rails.yml +27 -0
  97. data/templates/redis.yml +21 -0
  98. data/templates/redis2.yml +37 -0
  99. data/templates/sidekiq.yml +38 -0
  100. metadata +341 -0
data/docs/commands.md ADDED
@@ -0,0 +1,454 @@
1
+ <!-- NOTE: This file is automatically generated by running `script/generate_commands_docs`. Do NOT edit it manually. -->
2
+
3
+ ## Common Options
4
+
5
+ ```
6
+ -a XXX, --app XXX app ref on Control Plane (GVC)
7
+ ```
8
+
9
+ This `-a` option is used in most of the commands and will pick all other app configurations from the project-specific
10
+ `.controlplane/controlplane.yml` file.
11
+
12
+ ## Commands
13
+
14
+ ### `apply-template`
15
+
16
+ - Applies application-specific configs from templates (e.g., for every review-app)
17
+ - Publishes (creates or updates) those at Control Plane infrastructure
18
+ - Picks templates from the `.controlplane/templates` directory
19
+ - Templates are ordinary Control Plane templates but with variable preprocessing
20
+
21
+ **Preprocessed template variables:**
22
+
23
+ ```
24
+ {{APP_ORG}} - organization name
25
+ {{APP_NAME}} - GVC/app name
26
+ {{APP_LOCATION}} - location, per YML file, ENV, or command line arg
27
+ {{APP_LOCATION_LINK}} - full link for location, ready to be used for the value of `staticPlacement.locationLinks` in the templates
28
+ {{APP_IMAGE}} - latest app image
29
+ {{APP_IMAGE_LINK}} - full link for latest app image, ready to be used for the value of `containers[].image` in the templates
30
+ {{APP_IDENTITY}} - default identity
31
+ {{APP_IDENTITY_LINK}} - full link for identity, ready to be used for the value of `identityLink` in the templates
32
+ ```
33
+
34
+ ```sh
35
+ # Applies single template.
36
+ cpflow apply-template redis -a $APP_NAME
37
+
38
+ # Applies several templates (practically creating full app).
39
+ cpflow apply-template app postgres redis rails -a $APP_NAME
40
+ ```
41
+
42
+ ### `build-image`
43
+
44
+ - Builds and pushes the image to Control Plane
45
+ - Automatically assigns image numbers, e.g., `app:1`, `app:2`, etc.
46
+ - Uses `.controlplane/Dockerfile` or a different Dockerfile specified through `dockerfile` in the `.controlplane/controlplane.yml` file
47
+ - If a commit is provided through `--commit` or `-c`, it will be set as the runtime env var `GIT_COMMIT`
48
+ - Accepts extra options that are passed to `docker build`
49
+
50
+ ```sh
51
+ cpflow build-image -a $APP_NAME
52
+ ```
53
+
54
+ ### `cleanup-images`
55
+
56
+ - Deletes all images for an app that either exceed the max quantity or are older than the specified amount of days
57
+ - Specify the max quantity through `image_retention_max_qty` in the `.controlplane/controlplane.yml` file
58
+ - Specify the amount of days through `image_retention_days` in the `.controlplane/controlplane.yml` file
59
+ - If `image_retention_max_qty` is specified, any images that exceed it will be deleted, regardless of `image_retention_days`
60
+ - Will ask for explicit user confirmation
61
+ - Never deletes the latest image
62
+
63
+ ```sh
64
+ cpflow cleanup-images -a $APP_NAME
65
+ ```
66
+
67
+ ### `cleanup-stale-apps`
68
+
69
+ - Deletes the whole app (GVC with all workloads, all volumesets and all images) for all stale apps
70
+ - Also unbinds the app from the secrets policy, as long as both the identity and the policy exist (and are bound)
71
+ - Stale apps are identified based on the creation date of the latest image
72
+ - Specify the amount of days after an app should be considered stale through `stale_app_image_deployed_days` in the `.controlplane/controlplane.yml` file
73
+ - If `match_if_app_name_starts_with` is `true` in the `.controlplane/controlplane.yml` file, it will delete all stale apps that start with the name
74
+ - Will ask for explicit user confirmation
75
+
76
+ ```sh
77
+ cpflow cleanup-stale-apps -a $APP_NAME
78
+ ```
79
+
80
+ ### `config`
81
+
82
+ - Displays config for each app or a specific app
83
+
84
+ ```sh
85
+ # Shows the config for each app.
86
+ cpflow config
87
+
88
+ # Shows the config for a specific app.
89
+ cpflow config -a $APP_NAME
90
+ ```
91
+
92
+ ### `copy-image-from-upstream`
93
+
94
+ - Copies an image (by default the latest) from a source org to the current org
95
+ - The source app must be specified either through the `CPLN_UPSTREAM` env var or `upstream` in the `.controlplane/controlplane.yml` file
96
+ - Additionally, the token for the source org must be provided through `--upstream-token` or `-t`
97
+ - A `cpln` profile will be temporarily created to pull the image from the source org
98
+
99
+ ```sh
100
+ # Copies the latest image from the source org to the current org.
101
+ cpflow copy-image-from-upstream -a $APP_NAME --upstream-token $UPSTREAM_TOKEN
102
+
103
+ # Copies a specific image from the source org to the current org.
104
+ cpflow copy-image-from-upstream -a $APP_NAME --upstream-token $UPSTREAM_TOKEN --image appimage:123
105
+ ```
106
+
107
+ ### `delete`
108
+
109
+ - Deletes the whole app (GVC with all workloads, all volumesets and all images) or a specific workload
110
+ - Also unbinds the app from the secrets policy, as long as both the identity and the policy exist (and are bound)
111
+ - Will ask for explicit user confirmation
112
+ - Runs a pre-deletion hook before the app is deleted if `hooks.pre_deletion` is specified in the `.controlplane/controlplane.yml` file
113
+ - If the hook exits with a non-zero code, the command will stop executing and also exit with a non-zero code
114
+ - Use `--skip-pre-deletion-hook` to skip the hook if specified in `controlplane.yml`
115
+
116
+ ```sh
117
+ # Deletes the whole app (GVC with all workloads, all volumesets and all images).
118
+ cpflow delete -a $APP_NAME
119
+
120
+ # Deletes a specific workload.
121
+ cpflow delete -a $APP_NAME -w $WORKLOAD_NAME
122
+ ```
123
+
124
+ ### `deploy-image`
125
+
126
+ - Deploys the latest image to app workloads
127
+ - Runs a release script before deploying if `release_script` is specified in the `.controlplane/controlplane.yml` file and `--run-release-phase` is provided
128
+ - The release script is run in the context of `cpflow run` with the latest image
129
+ - If the release script exits with a non-zero code, the command will stop executing and also exit with a non-zero code
130
+
131
+ ```sh
132
+ cpflow deploy-image -a $APP_NAME
133
+ ```
134
+
135
+ ### `doctor`
136
+
137
+ - Runs validations
138
+
139
+ ```sh
140
+ # Runs all validations that don't require additional options by default.
141
+ cpflow doctor
142
+
143
+ # Runs config validation.
144
+ cpflow doctor --validations config
145
+
146
+ # Runs templates validation (requires app).
147
+ cpflow doctor --validations templates -a $APP_NAME
148
+ ```
149
+
150
+ ### `env`
151
+
152
+ - Displays app-specific environment variables
153
+
154
+ ```sh
155
+ cpflow env -a $APP_NAME
156
+ ```
157
+
158
+ ### `exists`
159
+
160
+ - Shell-checks if an application (GVC) exists, useful in scripts, e.g.:
161
+
162
+ ```sh
163
+ if [ cpflow exists -a $APP_NAME ]; ...
164
+ ```
165
+
166
+ ### `generate`
167
+
168
+ Creates base Control Plane config and template files
169
+
170
+ ```sh
171
+ # Creates .controlplane directory with Control Plane config and other templates
172
+ cpflow generate
173
+ ```
174
+
175
+ ### `info`
176
+
177
+ - Displays the diff between defined/available apps/workloads (apps equal GVCs)
178
+ - Apps that are defined but not available are displayed in red
179
+ - Apps that are available but not defined are displayed in green
180
+ - Apps that are both defined and available are displayed in white
181
+ - The diff is based on what's defined in the `.controlplane/controlplane.yml` file
182
+
183
+ ```sh
184
+ # Shows diff for all apps in all orgs (based on `.controlplane/controlplane.yml`).
185
+ cpflow info
186
+
187
+ # Shows diff for all apps in a specific org.
188
+ cpflow info -o $ORG_NAME
189
+
190
+ # Shows diff for a specific app.
191
+ cpflow info -a $APP_NAME
192
+ ```
193
+
194
+ ### `latest-image`
195
+
196
+ - Displays the latest image name
197
+
198
+ ```sh
199
+ cpflow latest-image -a $APP_NAME
200
+ ```
201
+
202
+ ### `logs`
203
+
204
+ - Light wrapper to display tailed raw logs for app/workload syntax
205
+ - Defaults to showing the last 200 entries from the past 1 hour before tailing
206
+
207
+ ```sh
208
+ # Displays logs for the default workload (`one_off_workload`).
209
+ cpflow logs -a $APP_NAME
210
+
211
+ # Displays logs for a specific workload.
212
+ cpflow logs -a $APP_NAME -w $WORKLOAD_NAME
213
+
214
+ # Displays logs for a specific replica of a workload.
215
+ cpflow logs -a $APP_NAME -w $WORKLOAD_NAME -r $REPLICA_NAME
216
+
217
+ # Uses a different limit on number of entries.
218
+ cpflow logs -a $APP_NAME --limit 100
219
+
220
+ # Uses a different loopback window.
221
+ cpflow logs -a $APP_NAME --since 30min
222
+ ```
223
+
224
+ ### `maintenance`
225
+
226
+ - Checks if maintenance mode is on or off for an app
227
+ - Outputs 'on' or 'off'
228
+ - Specify the one-off workload through `one_off_workload` in the `.controlplane/controlplane.yml` file
229
+ - Optionally specify the maintenance workload through `maintenance_workload` in the `.controlplane/controlplane.yml` file (defaults to 'maintenance')
230
+ - Maintenance mode is only supported for domains that use path based routing mode and have a route configured for the prefix '/' on either port 80 or 443
231
+
232
+ ```sh
233
+ cpflow maintenance -a $APP_NAME
234
+ ```
235
+
236
+ ### `maintenance:off`
237
+
238
+ - Disables maintenance mode for an app
239
+ - Specify the one-off workload through `one_off_workload` in the `.controlplane/controlplane.yml` file
240
+ - Optionally specify the maintenance workload through `maintenance_workload` in the `.controlplane/controlplane.yml` file (defaults to 'maintenance')
241
+ - Maintenance mode is only supported for domains that use path based routing mode and have a route configured for the prefix '/' on either port 80 or 443
242
+
243
+ ```sh
244
+ cpflow maintenance:off -a $APP_NAME
245
+ ```
246
+
247
+ ### `maintenance:on`
248
+
249
+ - Enables maintenance mode for an app
250
+ - Specify the one-off workload through `one_off_workload` in the `.controlplane/controlplane.yml` file
251
+ - Optionally specify the maintenance workload through `maintenance_workload` in the `.controlplane/controlplane.yml` file (defaults to 'maintenance')
252
+ - Maintenance mode is only supported for domains that use path based routing mode and have a route configured for the prefix '/' on either port 80 or 443
253
+
254
+ ```sh
255
+ cpflow maintenance:on -a $APP_NAME
256
+ ```
257
+
258
+ ### `maintenance:set-page`
259
+
260
+ - Sets the page for maintenance mode
261
+ - Only works if the maintenance workload uses the `shakacode/maintenance-mode` image
262
+ - Will set the URL as an env var `PAGE_URL` on the maintenance workload
263
+ - Optionally specify the maintenance workload through `maintenance_workload` in the `.controlplane/controlplane.yml` file (defaults to 'maintenance')
264
+
265
+ ```sh
266
+ cpflow maintenance:set-page PAGE_URL -a $APP_NAME
267
+ ```
268
+
269
+ ### `open`
270
+
271
+ - Opens the app endpoint URL in the default browser
272
+
273
+ ```sh
274
+ # Opens the endpoint of the default workload (`one_off_workload`).
275
+ cpflow open -a $APP_NAME
276
+
277
+ # Opens the endpoint of a specific workload.
278
+ cpflow open -a $APP_NAME -w $WORKLOAD_NAME
279
+ ```
280
+
281
+ ### `open-console`
282
+
283
+ - Opens the app console on Control Plane in the default browser
284
+ - Can also go directly to a workload page if `--workload` is provided
285
+
286
+ ```sh
287
+ cpflow open-console -a $APP_NAME
288
+ ```
289
+
290
+ ### `promote-app-from-upstream`
291
+
292
+ - Copies the latest image from upstream, runs a release script (optional), and deploys the image
293
+ - It performs the following steps:
294
+ - Runs `cpflow copy-image-from-upstream` to copy the latest image from upstream
295
+ - Runs `cpflow deploy-image` to deploy the image
296
+ - If `.controlplane/controlplane.yml` includes the `release_script`, `cpflow deploy-image` will use the `--run-release-phase` option
297
+ - If the release script exits with a non-zero code, the command will stop executing and also exit with a non-zero code
298
+
299
+ ```sh
300
+ cpflow promote-app-from-upstream -a $APP_NAME -t $UPSTREAM_TOKEN
301
+ ```
302
+
303
+ ### `ps`
304
+
305
+ - Shows running replicas in app
306
+
307
+ ```sh
308
+ # Shows running replicas in app, for all workloads.
309
+ cpflow ps -a $APP_NAME
310
+
311
+ # Shows running replicas in app, for a specific workload.
312
+ cpflow ps -a $APP_NAME -w $WORKLOAD_NAME
313
+ ```
314
+
315
+ ### `ps:restart`
316
+
317
+ - Forces redeploy of workloads in app
318
+
319
+ ```sh
320
+ # Forces redeploy of all workloads in app.
321
+ cpflow ps:restart -a $APP_NAME
322
+
323
+ # Forces redeploy of a specific workload in app.
324
+ cpflow ps:restart -a $APP_NAME -w $WORKLOAD_NAME
325
+ ```
326
+
327
+ ### `ps:start`
328
+
329
+ - Starts workloads in app
330
+
331
+ ```sh
332
+ # Starts all workloads in app.
333
+ cpflow ps:start -a $APP_NAME
334
+
335
+ # Starts a specific workload in app.
336
+ cpflow ps:start -a $APP_NAME -w $WORKLOAD_NAME
337
+ ```
338
+
339
+ ### `ps:stop`
340
+
341
+ - Stops workloads in app
342
+
343
+ ```sh
344
+ # Stops all workloads in app.
345
+ cpflow ps:stop -a $APP_NAME
346
+
347
+ # Stops a specific workload in app.
348
+ cpflow ps:stop -a $APP_NAME -w $WORKLOAD_NAME
349
+
350
+ # Stops a specific replica of a workload.
351
+ cpflow ps:stop -a $APP_NAME -w $WORKLOAD_NAME -r $REPLICA_NAME
352
+ ```
353
+
354
+ ### `ps:wait`
355
+
356
+ - Waits for workloads in app to be ready after re-deployment
357
+
358
+ ```sh
359
+ # Waits for all workloads in app.
360
+ cpflow ps:wait -a $APP_NAME
361
+
362
+ # Waits for a specific workload in app.
363
+ cpflow ps:swait -a $APP_NAME -w $WORKLOAD_NAME
364
+ ```
365
+
366
+ ### `run`
367
+
368
+ - Runs one-off interactive or non-interactive replicas (analog of `heroku run`)
369
+ - Uses `Cron` workload type and either:
370
+ - - `cpln workload exec` for interactive mode, with CLI streaming
371
+ - - log async fetching for non-interactive mode
372
+ - The Dockerfile entrypoint is used as the command by default, which assumes `exec "${@}"` to be present,
373
+ and the args ["bash", "-c", cmd_to_run] are passed
374
+ - The entrypoint can be overridden through `--entrypoint`, which must be a single command or a script path that exists in the container,
375
+ and the args ["bash", "-c", cmd_to_run] are passed,
376
+ unless the entrypoint is `bash`, in which case the args ["-c", cmd_to_run] are passed
377
+ - Providing `--entrypoint none` sets the entrypoint to `bash` by default
378
+ - If `fix_terminal_size` is `true` in the `.controlplane/controlplane.yml` file,
379
+ the remote terminal size will be fixed to match the local terminal size (may also be overridden through `--terminal-size`)
380
+ - By default, all jobs use a CPU size of 1 (1 core) and a memory size of 2Gi (2 gibibytes)
381
+ (can be configured through `runner_job_default_cpu` and `runner_job_default_memory` in `controlplane.yml`,
382
+ and also overridden per job through `--cpu` and `--memory`)
383
+ - By default, the job is stopped if it takes longer than 6 hours to finish
384
+ (can be configured though `runner_job_timeout` in `controlplane.yml`)
385
+
386
+ ```sh
387
+ # Opens shell (bash by default).
388
+ cpflow run -a $APP_NAME
389
+
390
+ # Runs interactive command, keeps shell open, and stops job when exiting.
391
+ cpflow run -a $APP_NAME --interactive -- rails c
392
+
393
+ # Some commands are automatically detected as interactive, so no need to pass `--interactive`.
394
+ cpflow run -a $APP_NAME -- bash
395
+ cpflow run -a $APP_NAME -- rails console
396
+ cpflow run -a $APP_NAME -- rails c
397
+ cpflow run -a $APP_NAME -- rails dbconsole
398
+ cpflow run -a $APP_NAME -- rails db
399
+
400
+ # Runs non-interactive command, outputs logs, exits with the exit code of the command and stops job.
401
+ cpflow run -a $APP_NAME -- rails db:migrate
402
+
403
+ # Runs non-iteractive command, detaches, exits with 0, and prints commands to:
404
+ # - see logs from the job
405
+ # - stop the job
406
+ cpflow run -a $APP_NAME --detached -- rails db:migrate
407
+
408
+ # The command needs to be quoted if setting an env variable or passing args.
409
+ cpflow run -a $APP_NAME -- 'SOME_ENV_VAR=some_value rails db:migrate'
410
+
411
+ # Uses a different image (which may not be promoted yet).
412
+ cpflow run -a $APP_NAME --image appimage:123 -- rails db:migrate # Exact image name
413
+ cpflow run -a $APP_NAME --image latest -- rails db:migrate # Latest sequential image
414
+
415
+ # Uses a different workload than `one_off_workload` from `.controlplane/controlplane.yml`.
416
+ cpflow run -a $APP_NAME -w other-workload -- bash
417
+
418
+ # Overrides remote CPLN_TOKEN env variable with local token.
419
+ # Useful when superuser rights are needed in remote container.
420
+ cpflow run -a $APP_NAME --use-local-token -- bash
421
+
422
+ # Replaces the existing Dockerfile entrypoint with `bash`.
423
+ cpflow run -a $APP_NAME --entrypoint none -- rails db:migrate
424
+
425
+ # Replaces the existing Dockerfile entrypoint.
426
+ cpflow run -a $APP_NAME --entrypoint /app/alternative-entrypoint.sh -- rails db:migrate
427
+ ```
428
+
429
+ ### `setup-app`
430
+
431
+ - Creates an app and all its workloads
432
+ - Specify the templates for the app and workloads through `setup_app_templates` in the `.controlplane/controlplane.yml` file
433
+ - This should only be used for temporary apps like review apps, never for persistent apps like production or staging (to update workloads for those, use 'cpflow apply-template' instead)
434
+ - Configures app to have org-level secrets with default name "{APP_PREFIX}-secrets"
435
+ using org-level policy with default name "{APP_PREFIX}-secrets-policy" (names can be customized, see docs)
436
+ - Creates identity for secrets if it does not exist
437
+ - Use `--skip-secrets-setup` to prevent the automatic setup of secrets,
438
+ or set it through `skip_secrets_setup` in the `.controlplane/controlplane.yml` file
439
+ - Runs a post-creation hook after the app is created if `hooks.post_creation` is specified in the `.controlplane/controlplane.yml` file
440
+ - If the hook exits with a non-zero code, the command will stop executing and also exit with a non-zero code
441
+ - Use `--skip-post-creation-hook` to skip the hook if specified in `controlplane.yml`
442
+
443
+ ```sh
444
+ cpflow setup-app -a $APP_NAME
445
+ ```
446
+
447
+ ### `version`
448
+
449
+ - Displays the current version of the CLI
450
+ - Can also be done with `cpflow --version` or `cpflow -v`
451
+
452
+ ```sh
453
+ cpflow version
454
+ ```
data/docs/dns.md ADDED
@@ -0,0 +1,15 @@
1
+ # DNS Setup Example
2
+
3
+ ## Docs
4
+
5
+ https://shakadocs.controlplane.com/guides/configure-domain#dns-records
6
+
7
+ ## Example
8
+
9
+ About reactrails.com DNS, steps:
10
+ 1. create CNAME or ALIAS record pointing to rails-xxxx.cpln.app
11
+ 1. go to CPLN Domains -> create
12
+ 1. add reactrails.com copy code from there
13
+ 1. add TXT record with code as _cpln.reactrails.com
14
+ 1. hit ok on CPLN, route to rails workload when asked
15
+ 1. wait domain check and certificates created