roro 0.3.28 → 0.3.30

Sign up to get free protection for your applications and to get access to all the features.
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