roro 0.3.28 → 0.3.30

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 (158) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +24 -8
  3. data/.idea/.gitignore +8 -0
  4. data/.idea/inspectionProfiles/Project_Default.xml +6 -0
  5. data/.idea/misc.xml +4 -0
  6. data/.idea/modules.xml +8 -0
  7. data/.idea/roro.iml +116 -0
  8. data/.idea/vcs.xml +6 -0
  9. data/CODE_OF_CONDUCT.md +31 -77
  10. data/lib/roro/cli/generate/generate_containers.rb +0 -5
  11. data/lib/roro/cli.rb +8 -8
  12. data/lib/roro/configurators/adventure_chooser.rb +1 -0
  13. data/lib/roro/configurators/adventure_picker.rb +1 -0
  14. data/lib/roro/configurators/adventure_writer.rb +4 -1
  15. data/lib/roro/configurators/configurator.rb +15 -8
  16. data/lib/roro/configurators/dependency_satisfier.rb +136 -0
  17. data/lib/roro/configurators/question_asker.rb +3 -3
  18. data/lib/roro/configurators/structure_builder.rb +2 -0
  19. data/lib/roro/configurators/validator.rb +2 -0
  20. data/lib/roro/dependencies/base.yml +90 -0
  21. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/_django.yml +7 -0
  22. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/django.yml +2 -8
  23. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_one/stage_one_test.rb +1 -1
  24. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/{stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/%interpolated_story_name%.yml.tt → languages/python/python.yml} +0 -0
  25. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/{stories/roll_your_own/templates/stage_one/%interpolated_stack_path% → languages/python}/templates/stage_one/.keep +0 -0
  26. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/{stories/roll_your_own/templates/stage_one/%interpolated_stack_path% → languages/python}/test/.keep +0 -0
  27. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/{stories/roll_your_own/templates/stage_one/%interpolated_stack_path% → languages/python}/test/stage_one/.keep +0 -0
  28. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/{stories/roll_your_own/templates/stage_one/%interpolated_stack_path% → languages/python}/test/stage_one/stage_dummy/.keep +0 -0
  29. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/python/test/stage_one/stage_test.rb +42 -0
  30. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/ruby.yml +10 -0
  31. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/rails.yml +36 -0
  32. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/{stories/roll_your_own/test/stage_one/dummy → languages/ruby/stories/rails/templates/stage_one}/.keep +0 -0
  33. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/templates/stage_one/Dockerfile.tt +26 -0
  34. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/6_1.yml +44 -0
  35. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/templates/stage_one/.env +6 -0
  36. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/templates/stage_one/Dockerfile.tt +28 -0
  37. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/templates/stage_one/config/database.yml +19 -0
  38. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/templates/stage_one/config/initializers/sidekiq.rb +13 -0
  39. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/templates/stage_one/docker-compose.yml.tt +57 -0
  40. data/lib/roro/stacks/catalog/unstoppable/developer_styles/{sashimi/stories/django/test/stage_one/dummy → okonomi/languages/ruby/stories/rails/versions/6_1/templates/stage_one/entrypoints}/.keep +0 -0
  41. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/templates/stage_one/entrypoints/docker-entrypoint.sh +9 -0
  42. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/templates/stage_one/entrypoints/sidekiq-entrypoint.sh +9 -0
  43. data/lib/roro/stacks/catalog/unstoppable/developer_styles/{sashimi/stories/django/test/stage_two/dummy → okonomi/languages/ruby/stories/rails/versions/6_1/test}/.keep +0 -0
  44. data/lib/roro/stacks/catalog/unstoppable/developer_styles/{sashimi/stories/rails/templates/stage_one/Gemfile.lock.tt → okonomi/languages/ruby/stories/rails/versions/6_1/test/stage_one/.keep} +0 -0
  45. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/test/stage_one/stage_dummy/.keep +0 -0
  46. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/test/stage_one/stage_dummy/Gemfile +66 -0
  47. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/6_1/test/stage_one/stage_test.rb +38 -0
  48. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/7_0.yml +38 -0
  49. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/templates/stage_one/.env +6 -0
  50. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/templates/stage_one/Dockerfile.tt +28 -0
  51. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/templates/stage_one/config/database.yml +19 -0
  52. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/templates/stage_one/config/initializers/sidekiq.rb +13 -0
  53. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/templates/stage_one/docker-compose.yml.tt +57 -0
  54. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/templates/stage_one/entrypoints/.keep +0 -0
  55. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/templates/stage_one/entrypoints/docker-entrypoint.sh +9 -0
  56. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/templates/stage_one/entrypoints/sidekiq-entrypoint.sh +9 -0
  57. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/test/.keep +0 -0
  58. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/test/stage_one/.keep +0 -0
  59. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/test/stage_one/stage_dummy/.keep +0 -0
  60. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/test/stage_one/stage_dummy/Gemfile +66 -0
  61. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/languages/ruby/stories/rails/versions/7_0/test/stage_one/stage_test.rb +37 -0
  62. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/okonomi.yml +4 -1
  63. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/templates/stage_one/.dockerignore +18 -0
  64. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/.env +1 -1
  65. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one/stage_test.rb +2 -10
  66. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/sashimi.yml +1 -1
  67. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/cert-manager.yml +32 -0
  68. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/templates/stage_1/.keep +0 -0
  69. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/templates/stage_1/echo1.yaml +32 -0
  70. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/templates/stage_1/echo2.yaml +32 -0
  71. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/templates/stage_1/echo_ingress.yaml.tt +18 -0
  72. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/templates/stage_1/prod_issuer.yaml.tt +19 -0
  73. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/templates/stage_1/staging_issuer.yaml.tt +19 -0
  74. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/templates/stage_2/echo_ingress.yaml.tt +25 -0
  75. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/templates/stage_3/echo_ingress.yaml.tt +25 -0
  76. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/templates/stage_3/ingress_nginx_svc.yaml.tt +31 -0
  77. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/test/.keep +0 -0
  78. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/test/stage_one/.keep +0 -0
  79. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/test/stage_one/stage_dummy/.keep +0 -0
  80. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/kubernetes/stories/ingress/stories/nginx/stories/cert-manager/test/stage_one/stage_test.rb +32 -0
  81. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/rails.yml +48 -9
  82. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/.env +4 -0
  83. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/.gitignore +55 -0
  84. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/.keep +0 -0
  85. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/docker-compose.yml.tt +36 -12
  86. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/.keep +0 -0
  87. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/app-deployment.yaml.tt +72 -0
  88. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/app-service.yaml.tt +20 -0
  89. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/database-deployment.yaml.tt +59 -0
  90. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/database-service.yaml.tt +19 -0
  91. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/db-data-persistentvolumeclaim.yaml.tt +14 -0
  92. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/env-configmap.yaml.tt +12 -0
  93. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/redis-deployment.yaml.tt +33 -0
  94. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/redis-service.yaml.tt +19 -0
  95. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/secret.yaml.tt +11 -0
  96. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/k8s/sidekiq-deployment.yaml.tt +56 -0
  97. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/test/.keep +0 -0
  98. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/test/stage_one/.keep +0 -0
  99. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/test/stage_one/stage_dummy/.keep +0 -0
  100. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/test/stage_one/stage_test.rb +33 -0
  101. data/lib/roro/stacks/catalog/unstoppable/developer_styles/{okonomi → sashimi}/stories/roll_your_own/roll_your_own.yml +1 -0
  102. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/%interpolated_story_name%.yml.tt +10 -0
  103. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/templates/stage_one/.keep +0 -0
  104. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/.keep +0 -0
  105. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one/.keep +0 -0
  106. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one/stage_dummy/.keep +0 -0
  107. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one/stage_test.rb.tt +41 -0
  108. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roll_your_own/templates/stage_one/.gitignore.tt +55 -0
  109. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roll_your_own/test/stage_one/dummy/.keep +0 -0
  110. data/lib/roro/stacks/catalog/unstoppable/developer_styles/{okonomi → sashimi}/stories/roll_your_own/test/stage_one/stage_one_test.rb +2 -1
  111. data/lib/roro/version.rb +1 -1
  112. data/lib/roro.rb +4 -10
  113. data/mise/containers/backend/env/.keep +0 -0
  114. data/mise/containers/backend/scripts/.keep +0 -0
  115. data/mise/containers/database/env/.keep +0 -0
  116. data/mise/containers/database/scripts/.keep +0 -0
  117. data/mise/containers/frontend/env/.keep +0 -0
  118. data/mise/containers/frontend/scripts/.keep +0 -0
  119. data/mise/scripts/.keep +0 -0
  120. data/roro.gemspec +3 -3
  121. metadata +115 -72
  122. data/.ruby-version +0 -1
  123. data/lib/roro/cli/roll_your_own.rb +0 -12
  124. data/lib/roro/configurator.rb +0 -15
  125. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one/stage_test.rb.tt +0 -37
  126. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/django.yml +0 -36
  127. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/Dockerfile.tt +0 -7
  128. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/docker-compose.yml.tt +0 -20
  129. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/requirements.txt.tt +0 -2
  130. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_two/settings.py +0 -130
  131. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_one/stage_one_test.rb +0 -37
  132. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/expressjs.yml +0 -7
  133. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/templates/stage_one/Dockerfile.tt +0 -14
  134. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/templates/stage_one/docker-compose.yml.tt +0 -21
  135. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Dockerfile.tt +0 -16
  136. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Gemfile.tt +0 -2
  137. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/entrypoint.sh +0 -8
  138. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_two/database.yml.tt +0 -16
  139. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/__MACOSX/scripts/._.DS_Store +0 -0
  140. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/.DS_Store +0 -0
  141. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/bundler.sh +0 -22
  142. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/git.sh +0 -21
  143. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/rvm.sh +0 -38
  144. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/utilities.sh +0 -53
  145. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base.sh +0 -6
  146. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/clone_idea.sh +0 -14
  147. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/clone_repos.sh +0 -33
  148. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/install_correct_bundler.sh +0 -21
  149. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/install_rubies.sh +0 -6
  150. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize.sh +0 -18
  151. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/roro.sh +0 -15
  152. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/source.sh +0 -28
  153. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/bundle_all.sh +0 -12
  154. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/git_pull_all.sh +0 -15
  155. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/rvm_install_all.sh +0 -12
  156. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/yarn_install_all.sh +0 -10
  157. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/wordpress/templates/stage_one/docker-compose.yml.tt +0 -31
  158. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/wordpress/wordpress.yml +0 -16
@@ -0,0 +1,136 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'os'
4
+
5
+ module Roro
6
+ module Configurators
7
+ class DependencySatisfier < Thor
8
+ include Thor::Actions
9
+ include Utilities
10
+
11
+ attr_reader :dependencies, :checks, :dependencies, :manifest, :builder, :env
12
+
13
+ no_commands do
14
+
15
+ def satisfy_dependencies(manifest = [])
16
+ @manifest = manifest
17
+ @builder = {
18
+ actions: [],
19
+ env: {}
20
+ }
21
+ @dependencies = {}.tap do |d|
22
+ d.merge!(gather_base_dependencies)
23
+ d.merge!(gather_stack_dependencies)
24
+ end
25
+ gather_checks
26
+ checks.each { |c| validate_check(c) }
27
+ checks.each { |c| satisfy(c) }
28
+ install_dependencies
29
+
30
+ end
31
+
32
+ def install_dependencies
33
+ actions = @builder[:actions]
34
+ actions.each do |a|
35
+ eval a
36
+ end
37
+ @env = @builder[:env] || {}
38
+ end
39
+
40
+ def gather_base_dependencies(stack = Roro::CLI.dependency_root)
41
+ {}.tap do |b|
42
+ children(stack).each { |c| b.merge!(read_yaml(c)) }
43
+ end
44
+ end
45
+
46
+ def gather_stack_dependencies
47
+ {}.tap do |b|
48
+ manifest.each { |c| b.merge!(read_yaml(c)[:dependencies] || {}) }
49
+ end
50
+ end
51
+
52
+ def gather_checks
53
+ @checks = []
54
+ manifest.each do |f|
55
+ read_yaml(f).dig(:depends_on)&.each do |c|
56
+ @checks << c
57
+ end
58
+ end
59
+ @checks
60
+ end
61
+
62
+ def validate_check(check)
63
+ msg = "No #{check} dependency exists. Please define it before depending on it."
64
+ dependencies[check.to_sym] || raise(Roro::Error, msg)
65
+ end
66
+
67
+ def satisfy(check)
68
+ d = dependencies[check.to_sym]
69
+ return if dependency_met?(check)
70
+ help = hint(d, :help)
71
+ lucky = hint(d, :lucky)
72
+ msg = ["\n\n#{set_color("Missing Dependency", :yellow)}: #{check}"]
73
+ if lucky
74
+ msg << " #{set_color("Platform", :yellow)}: #{platform}"
75
+ msg << " #{set_color("Install with", :yellow)}: $ #{lucky.shift}"
76
+ lucky.each do |c|
77
+ msg << " $ #{c}"
78
+ end
79
+ end
80
+ if help
81
+ msg << " Help: #{help}" if help
82
+ end
83
+ say(msg.join("\n\s\s"))
84
+ if lucky && yes?("Do you feel lucky?")
85
+ @builder ||= {
86
+ actions: [],
87
+ env: {}
88
+ }
89
+ @builder[:env].merge!(d.dig(:env) || {})
90
+ @builder[:actions] = @builder[:actions] + lucky
91
+ end
92
+ end
93
+
94
+
95
+
96
+ def hint(hash, key)
97
+ hash
98
+ case
99
+ when OS.linux? && hash.dig(:overrides, platform_for(hash), key )
100
+ hash.dig(:overrides, platform_for(hash), key)
101
+ when hash.dig(:overrides, platform, key)
102
+ hash.dig(:overrides, platform, key)
103
+ when hash.dig(key)
104
+ hash.dig(key)
105
+ end
106
+ end
107
+
108
+ def dependency_met?(command)
109
+ system(command.to_s) ? true : false
110
+ end
111
+
112
+ def platform_for(dependency)
113
+ overrides = dependency.dig(:overrides)
114
+ return if overrides.nil? || overrides.empty?
115
+ return platform if overrides.keys.include?(platform)
116
+ overrides.select do |key, value|
117
+ return key if value.dig(:aliases)&.include?(platform.to_s)
118
+ end
119
+ end
120
+
121
+ def platform
122
+ case
123
+ when OS.linux?
124
+ distro
125
+ else
126
+ OS.host_os.to_sym
127
+ end
128
+ end
129
+
130
+ def distro
131
+ OS.parse_os_release[:ID].to_sym
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
@@ -13,16 +13,16 @@ module Roro
13
13
  answer.size > 1 ? answer : override_default(question)
14
14
  end
15
15
 
16
- def confirm_default(question, default)
16
+ def confirm_default(question, hash)
17
17
  options = { "y": "yes", "n": "no", 'a': 'accept all defaults'}
18
18
  humanized_options = options.map {|key, value|
19
19
  "(#{key}) #{value}"
20
20
  }
21
21
  getsome = "Would you like to accept the default value?\n"
22
22
  prompt = [question, getsome, humanized_options, "\n"].join("\n")
23
- case ask(prompt)
23
+ case ask(prompt, path: hash[:path])
24
24
  when 'y'
25
- default
25
+ hash[:value]
26
26
  when 'n'
27
27
  override_default(question)
28
28
  when 'a'
@@ -12,6 +12,8 @@ module Roro
12
12
  def self.base
13
13
  @structure = {
14
14
  actions: [''],
15
+ dependencies: {},
16
+ depends_on: [''],
15
17
  env: {
16
18
  base: {},
17
19
  development: {},
@@ -3,7 +3,9 @@
3
3
  module Roro
4
4
  module Configurators
5
5
  class Validator
6
+
6
7
  include Utilities
8
+
7
9
  attr_reader :stack, :structure, :permitted_hidden_extensions, :permitted_story_extensions, :ext_permitted
8
10
 
9
11
  def initialize(stack = nil, structure = nil)
@@ -0,0 +1,90 @@
1
+ docker:
2
+ name: docker
3
+ command: dockerddd -v
4
+ verification_command: sudo docker run hello-world
5
+ help: https://docs.docker.com/get-docker/
6
+ overrides:
7
+ ubuntu:
8
+ help: https://docs.docker.com/engine/install/ubuntu/
9
+ lucky:
10
+ - sudo apt-get remove docker docker-engine docker.io containerd runc
11
+ - sudo apt-get update
12
+ - sudo apt-get install \
13
+ ca-certificates \
14
+ curl \
15
+ gnupg \
16
+ lsb-release
17
+ - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
18
+ - echo \
19
+ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
20
+ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
21
+ - sudo apt-get update
22
+ - sudo apt-get install docker-ce docker-ce-cli containerd.io
23
+ - sudo groupadd docker
24
+ - sudo usermod -aG docker $USER
25
+ - newgrp docker
26
+ - sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
27
+ - sudo chmod g+rwx "$HOME/.docker" -R
28
+ debian:
29
+ help: https://docs.docker.com/engine/install/debian/
30
+ lucky:
31
+ - sudo apt-get remove docker docker-engine docker.io containerd runc
32
+ - sudo apt-get update
33
+ - sudo apt-get install \
34
+ ca-certificates \
35
+ curl \
36
+ gnupg \
37
+ lsb-release
38
+ - curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
39
+ - echo \
40
+ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
41
+ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
42
+ - sudo apt-get update
43
+ - sudo apt-get install docker-ce docker-ce-cli containerd.io
44
+
45
+
46
+ git:
47
+ name: git
48
+ command: git version
49
+ help: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
50
+ env:
51
+ base:
52
+ git_config_user_name:
53
+ name: The name you'd like associated with git activities
54
+ value: Jane Doe
55
+ git_config_user_email:
56
+ name: The email address you'd like associated with git activities
57
+ value: jane.doe@example.com
58
+ overrides:
59
+ linux:
60
+ lucky:
61
+ - some linux command
62
+ fedora:
63
+ aliases:
64
+ - rhel
65
+ - centos
66
+ lucky:
67
+ - sudo dnf install git-all
68
+ debian:
69
+ aliases:
70
+ - ubuntu
71
+ lucky:
72
+ - run "sudo apt install git-all"
73
+ - run "sudo apt-get install install-info"
74
+ - run "git config --global user.email jane.doe@example.com"
75
+ - run "git config --global user.name Jane Doe"
76
+
77
+
78
+ doctl:
79
+ name: doctl
80
+ command: doctl version
81
+ help: https://docs.digitalocean.com/reference/doctl/how-to/install/
82
+ luck:
83
+ linux: cd ~ wget https://github.com/digitalocean/doctl/releases/download/v1.65.0/doctl-1.65.0-linux-amd64.tar.gz
84
+
85
+
86
+ kubectl:
87
+ name: kubectl
88
+ command: kubectl version
89
+ help: https://kubernetes.io/docs/tasks/tools/
90
+ hint: https://kubernetes.io/docs/tasks/tools/
@@ -0,0 +1,7 @@
1
+ actions:
2
+ - directory 'stage_one', '.', @env
3
+ - run "sudo docker-compose run web django-admin startproject \"#{@env[:base][:app_name][:value]}\" . &&
4
+ sudo chown -R $USER:$USER ."
5
+ - |
6
+ run "sudo docker-compose run web django-admin startproject \"#{@env[:base][:app_name][:value]}\" . &&
7
+ sudo chown -R $USER:$USER ."
@@ -6,7 +6,7 @@ env:
6
6
  value: 3
7
7
  help: https://www.python.org/doc/versions/
8
8
  POSTGRES_DB:
9
- name: Postgres databasconfigurarbe name
9
+ name: Postgres database name
10
10
  value: postgres
11
11
  help: https://www.postgresql.org/docs/9.0/manage-ag-createdb.html
12
12
  POSTGRES_USER:
@@ -23,17 +23,11 @@ env:
23
23
  help: https://www.forbes.com/sites/allbusiness/2016/10/23/12-tips-for-naming-your-startup-business/
24
24
 
25
25
  actions:
26
- - directory 'stage_one', '.', @env
27
- - run "sudo docker-compose run web django-admin startproject \"#{@env[:base][:app_name][:value]}\" . &&
28
- sudo chown -R $USER:$USER ."
29
- - |
30
- run "sudo docker-compose run web django-admin startproject \"#{@env[:base][:app_name][:value]}\" . &&
31
- sudo chown -R $USER:$USER ."
32
26
  - template 'stage_two/settings.py', "./#{@env[:base][:app_name][:value]}/settings.pycd cd", @env
33
27
  - |
34
28
  run "sudo chown -R $USER:$USER . &&
35
29
  sudo docker-compose build &&
36
30
  sudo docker-compose up -d --force-recreate"
37
- - run "echo 'You may open your app at http://localhost:8000/'"
31
+ - run "echo 'You may open your app at http://localhost:8000 '"
38
32
 
39
33
 
@@ -3,7 +3,7 @@ require "test_helper"
3
3
  describe 'Roro::CLI#rollon' do
4
4
  Given(:workbench) { 'django' }
5
5
  Given(:cli) { Roro::CLI.new }
6
- Given(:overrides) { %w[] }
6
+ Given(:overrides) { [''] }
7
7
 
8
8
  Given(:rollon) {
9
9
  stub_adventure
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ describe 'lib roro stacks catalog unstoppable developer_styles okonomi languages python' do
4
+ Given(:workbench) { 'empty' }
5
+ Given(:cli) { Roro::CLI.new }
6
+ Given(:adventures) { %w[] }
7
+ Given(:overrides) { %w[] }
8
+
9
+
10
+ Given(:rollon) {
11
+ stub_adventure
12
+ stub_overrides
13
+ stub_run_actions
14
+ cli.rollon
15
+ }
16
+
17
+ Given { rollon unless adventures.empty?}
18
+
19
+ describe 'must generate a' do
20
+ describe '.keep file so Git keeps the directory under source control' do
21
+ # Then { assert_file '.keep' }
22
+ end
23
+
24
+ describe 'a file in the adjacent templates directory' do
25
+ # Then { assert_file 'path_to_expected_file' }
26
+
27
+ describe 'with expected content matching regex' do
28
+ # Then { assert_file 'path_to_expected_file', /expected_content' }
29
+ end
30
+
31
+ describe 'with expected content the same as actual content string' do
32
+ # Then { assert_file 'path_to_expected_file', 'expected_content' }
33
+ end
34
+
35
+ describe 'with many strings expected to have been interpolated' do
36
+
37
+ # Given(:strings) { [1, :second, third] }
38
+ # Then { strings.each { |c| assert_file 'path_to_expected_file', c }
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,10 @@
1
+ preface: A dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write.
2
+
3
+ env:
4
+ base:
5
+ ruby_version:
6
+ name: Ruby minor version
7
+ value: 3.0
8
+ bundler_version:
9
+ name: Bundler version
10
+ value: 2.2.28
@@ -0,0 +1,36 @@
1
+ preface: A dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant
2
+ syntax that is natural to read and easy to write.
3
+
4
+ env:
5
+ base:
6
+ app_name:
7
+ name: Name for your app
8
+ value: unstoppable_app
9
+ DATABASE_NAME:
10
+ name: Database name
11
+ value: postgres
12
+ DATABASE_PASSWORD:
13
+ name: Database password
14
+ value: postgres
15
+ DATABASE_USERNAME:
16
+ name: Database username
17
+ value: postgres
18
+ DATABASE_HOST:
19
+ name: Database host
20
+ value: database
21
+ POSTGRES_NAME:
22
+ name: Database name
23
+ value: ${DATABASE_NAME}
24
+ POSTGRES_PASSWORD:
25
+ name: Database password
26
+ value: ${DATABASE_PASSWORD}
27
+ POSTGRES_USERNAME:
28
+ name: Database username
29
+ value: ${DATABASE_USERNAME}
30
+ POSTGRES_HOST:
31
+ name: Database host
32
+ value: ${DATABASE_HOST}
33
+ actions:
34
+ - directory 'stage_one', '.', @env
35
+ - run 'sudo DOCKER_BUILDKIT=1 docker build --file Dockerfile --output . .'
36
+ - run 'sudo chown -R $USER:$USER .'
@@ -0,0 +1,26 @@
1
+ FROM ruby:<%= @env[:base][:ruby_version][:value] %>-alpine AS builder
2
+
3
+ # Add only packages necessary to generate a new rails app
4
+ RUN apk add \
5
+ build-base \
6
+ git \
7
+ postgresql-dev
8
+
9
+ WORKDIR /app
10
+
11
+ ## Create a Gemfile with just the Rails gem inside:
12
+ RUN echo -e "source 'https://rubygems.org'\ngem 'rails', '~> <%= @env[:base][:rails_version][:value] %>'" > Gemfile
13
+ RUN gem install bundler:<%= @env[:base][:bundler_version][:value] %>
14
+ RUN bundle config --local && \
15
+ bundle install -j4 --retry 3
16
+
17
+ ## Use Rails to generate a new app. We'll configure it later.
18
+ RUN bundle exec rails new . \
19
+ --database=postgresql \
20
+ --skip-bundle \
21
+ --skip-webpack-install
22
+
23
+ FROM scratch AS export-stage
24
+
25
+ ## Copy the generated files onto the host.
26
+ COPY --from=builder ./app/ .
@@ -0,0 +1,44 @@
1
+ preface: some string
2
+
3
+ env:
4
+ base:
5
+ ruby_version:
6
+ name: Ruby minor version
7
+ value: 2.7.4
8
+ git_config_user_name:
9
+ name: The name you'd like associated with git activities
10
+ value: Jane Doe
11
+ git_config_user_email:
12
+ name: The email address you'd like associated with git activities
13
+ value: jane.doe@example.com
14
+ rails_version:
15
+ name: Ruby on Rails minor version
16
+ value: 6.1
17
+ bundler_version:
18
+ name: Bundler version
19
+ value: 2.2.30
20
+ JOB_WORKER_URL:
21
+ name: Reids job worker url
22
+ value: redis://redis:6379/0
23
+ REDIS_URL:
24
+ name: Reids url
25
+ value: redis://redis:6379/0
26
+
27
+ actions:
28
+ - directory "stage_one", '.', @env
29
+ - |
30
+ generator = Roro::CLI.new
31
+ generator.generate_mise
32
+ generator.generate_containers 'app', 'database', 'redis', 'sidekiq'
33
+ generator.generate_environments @env
34
+ generator.generate_keys
35
+ - chmod 'entrypoints/docker-entrypoint.sh', 0755
36
+ - chmod 'entrypoints/sidekiq-entrypoint.sh', 0755
37
+ - insert_into_file 'Gemfile', "gem 'sidekiq', '~>6.0.0'", :before => "\ngroup :development, :test do"
38
+ - run "sudo docker-compose build"
39
+ - run "sudo docker-compose run app bin/rails webpacker:install"
40
+ - run "sudo docker-compose run app rake db:create"
41
+ - run "sudo docker-compose up"
42
+
43
+
44
+
@@ -0,0 +1,6 @@
1
+ DATABASE_HOST=database
2
+ DATABASE_PORT=5432
3
+ REDIS_HOST=redis
4
+ REDIS_PORT=6379
5
+ JOB_WORKER_URL=redis://redis:6379/0
6
+ REDIS_URL=redis://redis:6379/0
@@ -0,0 +1,28 @@
1
+ FROM ruby:<%= @env[:base][:ruby_version][:value] %>-alpine AS builder
2
+
3
+ RUN apk add \
4
+ build-base \
5
+ postgresql-dev
6
+
7
+ RUN apk add --update\
8
+ file \
9
+ git \
10
+ nodejs \
11
+ tzdata \
12
+ yarn
13
+
14
+ RUN gem install bundler:<%= @env[:base][:bundler_version][:value] %>
15
+
16
+ WORKDIR /app
17
+
18
+ ## Install standard gems
19
+ COPY Gemfile Gemfile.lock ./
20
+ RUN bundle install -j4 --retry 3
21
+
22
+ RUN yarn install
23
+
24
+ COPY . ./
25
+
26
+ RUN bundle install
27
+
28
+ CMD ["./entrypoints/docker-entrypoint.sh"]
@@ -0,0 +1,19 @@
1
+ default: &default
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ host: <%= ENV.fetch('DATABASE_HOST') %>
5
+ username: <%= ENV.fetch('POSTGRES_USERNAME') %>
6
+ password: <%= ENV.fetch('DATABASE_PASSWORD') %>
7
+ database: <%= ENV.fetch('DATABASE_NAME') %>
8
+ pool: 5
9
+ variables:
10
+ statement_timeout: 5000
11
+
12
+ development:
13
+ <<: *default
14
+
15
+ test:
16
+ <<: *default
17
+
18
+ production:
19
+ <<: *default
@@ -0,0 +1,13 @@
1
+ Sidekiq.configure_server do |config|
2
+ config.redis = {
3
+ host: ENV['REDIS_HOST'],
4
+ port: ENV['REDIS_PORT'] || '6379'
5
+ }
6
+ end
7
+
8
+ Sidekiq.configure_client do |config|
9
+ config.redis = {
10
+ host: ENV['REDIS_HOST'],
11
+ port: ENV['REDIS_PORT'] || '6379'
12
+ }
13
+ end
@@ -0,0 +1,57 @@
1
+ version: '3.4'
2
+
3
+ services:
4
+ app:
5
+ build:
6
+ context: .
7
+ dockerfile: Dockerfile
8
+ depends_on:
9
+ - database
10
+ - redis
11
+ ports:
12
+ - "3000:3000"
13
+ volumes:
14
+ - .:/app
15
+ - gem_cache:/usr/local/bundle/gems
16
+ - node_modules:/app/node_modules
17
+ env_file:
18
+ - ./mise/env/base.env
19
+ - ./mise/env/development.env
20
+ environment:
21
+ RAILS_ENV: development
22
+
23
+ database:
24
+ image: postgres:12.1
25
+ volumes:
26
+ - db_data:/var/lib/postgresql/data
27
+ - ./init.sql:/docker-entrypoint-initdb.d/init.sql
28
+
29
+ redis:
30
+ image: redis
31
+ env_file:
32
+ - ./mise/env/base.env
33
+ - ./mise/env/development.env
34
+
35
+ sidekiq:
36
+ build:
37
+ context: .
38
+ dockerfile: Dockerfile
39
+ depends_on:
40
+ - app
41
+ - database
42
+ - redis
43
+ volumes:
44
+ - .:/app
45
+ - gem_cache:/usr/local/bundle/gems
46
+ - node_modules:/app/node_modules
47
+ env_file:
48
+ - ./mise/env/base.env
49
+ - ./mise/env/development.env
50
+ environment:
51
+ RAILS_ENV: development
52
+ entrypoint: ./entrypoints/sidekiq-entrypoint.sh
53
+
54
+ volumes:
55
+ gem_cache:
56
+ db_data:
57
+ node_modules:
@@ -0,0 +1,9 @@
1
+ #!/bin/sh
2
+
3
+ set -e
4
+
5
+ if [ -f tmp/pids/server.pid ]; then
6
+ rm tmp/pids/server.pid
7
+ fi
8
+
9
+ bundle exec rails s -b 0.0.0.0
@@ -0,0 +1,9 @@
1
+ #!/bin/sh
2
+
3
+ set -e
4
+
5
+ if [ -f tmp/pids/server.pid ]; then
6
+ rm tmp/pids/server.pid
7
+ fi
8
+
9
+ bundle exec sidekiq