roro 0.3.17 → 0.3.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +11 -10
  3. data/.gitignore +3 -2
  4. data/Guardfile +8 -10
  5. data/README.md +2 -1
  6. data/lib/roro.rb +1 -0
  7. data/lib/roro/cli.rb +13 -7
  8. data/lib/roro/cli/generate/story.rb +18 -0
  9. data/lib/roro/cli/greenfield/rails.rb +2 -24
  10. data/lib/roro/cli/rollon.rb +135 -8
  11. data/lib/roro/cli/rollon/rails/base/base.rb +4 -0
  12. data/lib/roro/cli/{base → rollon/rails/base}/insert_gems.rb +2 -10
  13. data/lib/roro/cli/{base → rollon/rails/base}/insertions.rb +8 -0
  14. data/lib/roro/cli/rollon/rails/database.rb +4 -8
  15. data/lib/roro/cli/rollon/rails/database/with_mysql.rb +2 -2
  16. data/lib/roro/cli/rollon/rails/database/with_postgresql.rb +3 -4
  17. data/lib/roro/cli/rollon/ruby_gem/with_ci_cd.rb +7 -7
  18. data/lib/roro/configurator.rb +15 -0
  19. data/lib/roro/configurator/eligibility.rb +137 -0
  20. data/lib/roro/configurator/okonomi.rb +28 -0
  21. data/lib/roro/configurator/omakase.rb +170 -0
  22. data/lib/roro/stories/greenfield.yml +1 -0
  23. data/lib/roro/stories/greenfield/rails.yml +9 -0
  24. data/lib/roro/stories/rollon.yml +42 -0
  25. data/lib/roro/stories/rollon/rails.yml +76 -0
  26. data/lib/roro/stories/rollon/rails/ci_cd.yml +1 -0
  27. data/lib/roro/stories/rollon/rails/ci_cd/circleci.yml +2 -0
  28. data/lib/roro/stories/rollon/rails/database.yml +9 -0
  29. data/lib/roro/stories/rollon/rails/database/mysql.yml +17 -0
  30. data/lib/roro/stories/rollon/rails/database/postgresql.yml +15 -0
  31. data/lib/roro/stories/rollon/rails/kubernetes.yml +1 -0
  32. data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +10 -0
  33. data/lib/roro/stories/rollon/rails/kubernetes/postgresql/default.yml +1 -0
  34. data/lib/roro/stories/rollon/rails/kubernetes/postgresql/edge.yml +1 -0
  35. data/lib/roro/stories/rollon/ruby_gem.yml +5 -0
  36. data/lib/roro/{cli/templates/rails → templates/base}/.circleci/_aliases.yml +0 -0
  37. data/lib/roro/templates/base/.circleci/_commands.yml +31 -0
  38. data/lib/roro/templates/base/.circleci/_defaults.yml +5 -0
  39. data/lib/roro/templates/base/.circleci/_executors.yml +11 -0
  40. data/lib/roro/templates/base/.circleci/_major_only.yml +4 -0
  41. data/lib/roro/templates/base/.circleci/_version.yml +1 -0
  42. data/lib/roro/{cli/templates → templates}/base/.circleci/_workflow.yml +0 -0
  43. data/lib/roro/{cli/templates → templates}/base/.circleci/config.job-example.yml +5 -5
  44. data/lib/roro/{cli/templates → templates}/base/.circleci/jobs/_build.yml +0 -0
  45. data/lib/roro/{cli/templates → templates}/base/.circleci/jobs/_release.yml +0 -0
  46. data/lib/roro/{cli/templates → templates}/base/.circleci/workflows/_build_release.yml +0 -0
  47. data/lib/roro/{cli/templates → templates}/base/.dockerignore +0 -0
  48. data/lib/roro/{cli/templates → templates}/base/dotenv +0 -0
  49. data/lib/roro/{cli/templates → templates}/base/jumpstart/.keep +0 -0
  50. data/lib/roro/{cli/templates → templates}/base/jumpstart/Dockerfile.tt +0 -0
  51. data/lib/roro/{cli/templates → templates}/base/jumpstart/docker-compose.yml +0 -0
  52. data/lib/roro/{cli/templates → templates}/base/jumpstart/docker-entrypoint.sh +0 -0
  53. data/lib/roro/{cli/templates → templates}/base/livereload/hosts.example +0 -0
  54. data/lib/roro/{cli/templates → templates}/base/roro/.keep +0 -0
  55. data/lib/roro/{cli/templates → templates}/base/roro/roro/.keep +0 -0
  56. data/lib/roro/{cli/templates → templates}/base/roro/roro/containers/.keep +0 -0
  57. data/lib/roro/{cli/templates → templates}/base/roro/roro/containers/app/.keep +0 -0
  58. data/lib/roro/{cli/templates → templates}/base/roro/roro/containers/frontend/.keep +0 -0
  59. data/lib/roro/{cli/templates → templates}/base/roro/roro/docker-entrypoint.sh.tt +0 -0
  60. data/lib/roro/{cli/templates → templates}/rails/.circleci/.keep +0 -0
  61. data/lib/roro/{cli/templates → templates}/rails/.circleci/config.yml.tt +4 -6
  62. data/lib/roro/{cli/templates → templates}/rails/.circleci/jobs/_build.yml +4 -6
  63. data/lib/roro/templates/rails/.circleci/jobs/_push.yml +11 -0
  64. data/lib/roro/templates/rails/.circleci/jobs/_test.yml +12 -0
  65. data/lib/roro/{cli/templates → templates}/rails/.circleci/setup-gem-credentials.sh +0 -0
  66. data/lib/roro/templates/rails/.circleci/workflows/_build_test_push.yml +12 -0
  67. data/lib/roro/{cli/templates → templates}/rails/.keep +0 -0
  68. data/lib/roro/templates/rails/Dockerfile.greenfield.tt +51 -0
  69. data/lib/roro/{cli/templates → templates}/rails/config/database.mysql.yml +0 -0
  70. data/lib/roro/{cli/templates → templates}/rails/config/database.pg.yml +2 -3
  71. data/lib/roro/{cli/templates/stories → templates/rails/database}/with_mysql/_service.yml +0 -0
  72. data/lib/roro/{cli/templates → templates}/rails/database/with_postgresql/.keep +0 -0
  73. data/lib/roro/{cli/templates/stories → templates/rails/database}/with_postgresql/_service.yml +0 -0
  74. data/lib/roro/{cli/templates → templates}/rails/docker-compose.yml.tt +3 -3
  75. data/lib/roro/{cli/templates → templates}/rails/dotenv/.keep +0 -0
  76. data/lib/roro/templates/rails/dotenv/database.mysql.env.tt +6 -0
  77. data/lib/roro/templates/rails/dotenv/database.pg.env.tt +4 -0
  78. data/lib/roro/{cli/templates → templates}/rails/dotenv/web.env.tt +0 -0
  79. data/lib/roro/templates/rails/kube.rake.tt +114 -0
  80. data/lib/roro/{cli/templates → templates}/rails/roro/.keep +0 -0
  81. data/lib/roro/{cli/templates → templates}/rails/roro/containers/.keep +0 -0
  82. data/lib/roro/{cli/templates → templates}/rails/roro/containers/app/.keep +0 -0
  83. data/lib/roro/templates/rails/roro/containers/app/Dockerfile.tt +34 -0
  84. data/lib/roro/{cli/templates → templates}/rails/roro/containers/frontend/.keep +0 -0
  85. data/lib/roro/{cli/templates/rails/roro/docker-entrypoint.sh.tt → templates/rails/roro/docker-entrypoint.sh} +0 -0
  86. data/lib/roro/{cli/templates/rails/roro/roro → templates/rails/roro/kube}/.keep +0 -0
  87. data/lib/roro/{cli/templates/rails/roro/roro/containers/.keep → templates/rails/roro/kube/certificate.yml.tt} +0 -0
  88. data/lib/roro/{cli/templates/rails/roro/roro/containers/app/.keep → templates/rails/roro/kube/cluster-issuer.yml.tt} +0 -0
  89. data/lib/roro/templates/rails/roro/kube/deployment.yml.tt +50 -0
  90. data/lib/roro/templates/rails/roro/kube/deployments/postgres_deploy.yaml +47 -0
  91. data/lib/roro/templates/rails/roro/kube/deployments/rails_deploy.yaml +62 -0
  92. data/lib/roro/templates/rails/roro/kube/deployments/redis_deploy.yaml +23 -0
  93. data/lib/roro/templates/rails/roro/kube/deployments/sidekiq_deploy.yaml +56 -0
  94. data/lib/roro/{cli/templates/rails/roro/roro/containers/frontend/.keep → templates/rails/roro/kube/ingress.yml.tt} +0 -0
  95. data/lib/roro/templates/rails/roro/kube/ingresses/ingress.yaml +13 -0
  96. data/lib/roro/{cli/templates/ruby_gem/.circleci/.keep → templates/rails/roro/kube/job-migrate.yml.tt} +0 -0
  97. data/lib/roro/templates/rails/roro/kube/jobs/setup.yaml +42 -0
  98. data/lib/roro/templates/rails/roro/kube/secret-digital-ocean.yml.tt +4 -0
  99. data/lib/roro/templates/rails/roro/kube/service.yml.tt +10 -0
  100. data/lib/roro/templates/rails/roro/kube/services/postgres_svc.yaml +13 -0
  101. data/lib/roro/templates/rails/roro/kube/services/rails_svc.yaml +13 -0
  102. data/lib/roro/templates/rails/roro/kube/services/redis_svc.yaml +13 -0
  103. data/lib/roro/templates/rails/roro/kube/volumes/postgres_volumes.yaml +25 -0
  104. data/lib/roro/{cli/templates/ruby_gem/roro/containers → templates/ruby_gem/.circleci}/.keep +0 -0
  105. data/lib/roro/{cli/templates → templates}/ruby_gem/.circleci/config.yml.tt +4 -4
  106. data/lib/roro/templates/ruby_gem/.circleci/jobs/_test.yml +4 -0
  107. data/lib/roro/{cli/templates → templates}/ruby_gem/.circleci/setup-gem-credentials.sh +0 -0
  108. data/lib/roro/{cli/templates → templates}/ruby_gem/docker-compose.yml +0 -0
  109. data/lib/roro/{cli/templates/ruby_gem/roro/keys → templates/ruby_gem/roro/containers}/.keep +0 -0
  110. data/lib/roro/{cli/templates → templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +1 -1
  111. data/lib/roro/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +1 -0
  112. data/lib/roro/{cli/templates/stories → templates/ruby_gem/roro/keys}/.keep +0 -0
  113. data/lib/roro/version.rb +1 -1
  114. metadata +101 -80
  115. data/lib/roro/cli/base/base.rb +0 -8
  116. data/lib/roro/cli/base/base_files.rb +0 -24
  117. data/lib/roro/cli/base/check_dependencies.rb +0 -97
  118. data/lib/roro/cli/base/continuous_integration.rb +0 -13
  119. data/lib/roro/cli/base/utilities.rb +0 -38
  120. data/lib/roro/cli/configuration.rb +0 -69
  121. data/lib/roro/cli/generate/config.rb +0 -11
  122. data/lib/roro/cli/generate/config/rails.rb +0 -17
  123. data/lib/roro/cli/rollon/rails.rb +0 -47
  124. data/lib/roro/cli/rollon/stories/stories.rb +0 -3
  125. data/lib/roro/cli/roro_configurator.yml +0 -157
  126. data/lib/roro/cli/templates/base/.circleci/_defaults.yml +0 -17
  127. data/lib/roro/cli/templates/base/.roro_config.yml +0 -15
  128. data/lib/roro/cli/templates/rails/.circleci/jobs/_push.yml +0 -23
  129. data/lib/roro/cli/templates/rails/.circleci/jobs/_test.yml +0 -13
  130. data/lib/roro/cli/templates/rails/.circleci/workflows/_build_test_push.yml +0 -9
  131. data/lib/roro/cli/templates/rails/Dockerfile.greenfield.tt +0 -47
  132. data/lib/roro/cli/templates/rails/database/with_mysql/_service.yml +0 -10
  133. data/lib/roro/cli/templates/rails/database/with_postgresql/_service.yml +0 -7
  134. data/lib/roro/cli/templates/rails/dotenv/database.mysql.env.tt +0 -3
  135. data/lib/roro/cli/templates/rails/dotenv/database.pg.env.tt +0 -4
  136. data/lib/roro/cli/templates/rails/roro/containers/app/Dockerfile.tt +0 -88
  137. data/lib/roro/cli/templates/rails/roro/roro/docker-entrypoint.sh.tt +0 -8
  138. data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -1
  139. data/lib/roro/cli/templates/stories/ruby_gem/with_ci_cd/_build.yml +0 -11
  140. data/lib/roro/cli/templates/stories/with_postgresql/.keep +0 -0
  141. data/lib/tasks/deploy.rake +0 -126
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ff432672046f38d4adb0214e9c5125be36183f2
4
- data.tar.gz: 5559ed50720181a77d4af026cd3b0b8bff90b674
3
+ metadata.gz: 28419719167db581fa026244d2628fa4c86c9d3b
4
+ data.tar.gz: b46403289b09d42a550ac9dff3a4edcc717f2c63
5
5
  SHA512:
6
- metadata.gz: 44d46961f02e97b9d21ee5c7e76f2e4d1708824c3bb50dbb24291bdc3f3c9fa64c4c2ffeb70ff235c685898e4224bc6ba558f51a6158a68888f63d2be904bb77
7
- data.tar.gz: 2b3d2e7129581279a7bca13f36a3a1287e06041b8ba1e2880251ca4aa65217cd47947c31d511509b724bf5d64119a31c47da1cb7afc82165922bc126322a31f9
6
+ metadata.gz: 3b2075ccae46a264f2d64bf2d2c09fb678bf95a44d534b0263dcb2a9e5cbf6345663d683bea3219ec728512e65eca391e1715a7334d304d4e46411a3e75f6ec1
7
+ data.tar.gz: 5ef3392e89e8e72af5e190a79f45ff7e107db744c0fe2a886b6e0e11bf6829c0fc723c6e298c0ad51d20a7b4882dbd84035b3b966a2eabdf5484e4c32827ae28
@@ -10,6 +10,11 @@ aliases:
10
10
  defaults: &defaults
11
11
  executor: machine-executor
12
12
  working_directory: ~/project
13
+
14
+ major_only: &major_only
15
+ filters:
16
+ branches:
17
+ only: master, release
13
18
 
14
19
  version: 2.1
15
20
 
@@ -74,19 +79,15 @@ workflows:
74
79
 
75
80
  build-cli:
76
81
  jobs:
77
- - build
82
+ - build
78
83
  - test-rollon-rails:
79
- filters:
80
- branches:
81
- only: development
84
+ <<: *major_only
82
85
  - test:
83
- filters:
84
- branches:
85
- only: master
86
+ <<: *major_only
86
87
 
87
88
  - release:
88
89
  requires:
89
90
  - build
90
- filters:
91
- branches:
92
- only: release
91
+ filters:
92
+ branches:
93
+ only: release
data/.gitignore CHANGED
@@ -14,11 +14,12 @@ roro/**/*.key
14
14
  *.key
15
15
  *.env
16
16
  !/.gitignore
17
-
17
+ *.gem
18
18
  tmp/*
19
19
  !tmp/.keep
20
20
  sandbox/*
21
21
  !sandbox/.keep
22
22
  !sandbox/greenfield
23
23
  sandbox/greenfield/*
24
- !sandbox/greenfield/.keep
24
+ !sandbox/greenfield/.keep
25
+ TUTORIAL.md
data/Guardfile CHANGED
@@ -1,17 +1,15 @@
1
1
  options = {
2
- all_on_start: true,
3
- all_after_pass: true,
2
+ all_on_start: false,
3
+ all_after_pass: false,
4
4
  }
5
5
 
6
6
  guard :minitest, options do
7
7
 
8
8
  watch(%r{^test/(.*)\/?(.*)_test\.rb$})
9
- watch(%r{^lib/roro/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
10
- watch(%r{^test/thor_helper\.rb$}) { 'test' }
11
- watch(%r{^lib/roro/cli/(.+)\.rb$}) { |m| "test/cli/#{m[1]}_test.rb" }
12
- watch(%r{^lib/roro/cli/templates/base(.+)\.yml$}) { |m| "test/cli" }
13
- watch(%r{^lib/roro/cli/templates/rollon(.+)\.yml$}) { |m| "test/cli/rollon" }
14
- watch(%r{^lib/roro/cli/templates/rollon(.+)\.tt$}) { |m| "test/cli/rollon" }
15
- watch(%r{^lib/roro/cli/templates/greenfield(.+)\.yml$}) { |m| "test/cli/greenfield" }
16
- watch(%r{^lib/roro/cli/templates/greenfield(.+)\.tt$}) { |m| "test/cli/greenfield" }
9
+ watch(%r{^test/helpers/(.*)\.rb$}) { 'test' }
10
+ watch(%r{^test/test_helper\.rb$}) { 'test' }
11
+ watch(%r{^lib/roro/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
12
+ watch(%r{^lib/roro/cli/(.+)\.rb$}) { |m| "test/cli/#{m[1]}_test.rb" }
13
+ watch(%r{^lib/roro/cli/(.+)\.yml$}) { |m| "test/cli" }
14
+ watch(%r{^lib/roro/cli/(.+)\.tt$}) { |m| "test/cli" }
17
15
  end
data/README.md CHANGED
@@ -217,4 +217,5 @@ $ docker system prune -af --volumes
217
217
  This gem and its associated practices are just one way of using these tools and not the canonical way. My purpose in publishing it is to get a conversation started about what conventions around these tools might look like. If you have ideas on how to make it better please put in an issue -- or fork the repo, make your changes, write your tests, and send me a pull request. It'll make me feel warm inside.
218
218
 
219
219
  ## License
220
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
220
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
221
+
@@ -1,6 +1,7 @@
1
1
  require "thor"
2
2
  require "roro/version"
3
3
  require "roro/cli"
4
+ require "roro/configurator"
4
5
 
5
6
  module Roro
6
7
  class Error < StandardError; end
@@ -1,25 +1,31 @@
1
- require 'roro/cli/base/base'
2
- require 'roro/cli/configuration'
3
- require 'roro/cli/generate/config'
1
+
4
2
  require 'roro/cli/generate/exposed'
5
3
  require 'roro/cli/generate/keys'
6
4
  require 'roro/cli/generate/obfuscated'
5
+ require 'roro/cli/generate/story'
7
6
  require 'roro/cli/greenfield/rails'
8
7
  require 'roro/cli/rollon'
9
- require 'roro/cli/rollon/rails'
8
+ require 'roro/cli/rollon/rails/base/base'
10
9
  require 'roro/cli/rollon/rails/database/with_mysql'
11
10
  require 'roro/cli/rollon/rails/database/with_postgresql'
12
11
 
13
12
  require 'roro/cli/rollon/ruby_gem'
14
13
 
15
14
  module Roro
16
-
17
15
  class CLI < Thor
18
16
 
19
17
  include Thor::Actions
20
18
 
21
19
  def self.source_root
22
- File.dirname(__FILE__) + '/cli/templates'
23
- end
20
+ File.dirname(__FILE__) + '/templates'
21
+ end
22
+
23
+ def self.story_root
24
+ File.dirname(__FILE__) + '/stories'
25
+ end
26
+
27
+ def self.roro_environments
28
+ %w(development production test staging ci)
29
+ end
24
30
  end
25
31
  end
@@ -0,0 +1,18 @@
1
+ module Roro
2
+ class CLI < Thor
3
+
4
+ desc "generate::story", "Generate a config file at .roro_config.yml to use later"
5
+ map "generate::story" => "generate_story"
6
+
7
+ def generate_story
8
+
9
+ @config ||= Roro::Configuration.new(options)
10
+ # configuration = {
11
+ # env_vars: @config.env.keys,
12
+ # intentions: @config.intentions,
13
+ # story: @config.structure['story']
14
+ # }
15
+ # create_file ".roro_configurator.yml", @config.env.to_yaml
16
+ end
17
+ end
18
+ end
@@ -5,32 +5,10 @@ module Roro
5
5
  desc "greenfield::rails", "Greenfield a new, dockerized rails app with
6
6
  either MySQL or PostgreSQL in a separate container."
7
7
 
8
- method_option :env_vars, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "key1:value1 key2:value2"
9
- method_option :interactive, desc: "Set up your environment variables as you go."
10
- method_option :force, desc: "force over-write of existing files"
11
-
12
8
  map "greenfield::rails" => "greenfield_rails"
13
9
 
14
- def greenfield_rails(*args)
15
- confirm_directory_empty
16
- configure_for_rollon
17
- copy_greenfield_files
18
- run_greenfield_commands
19
- rollon_rails(*args)
20
- end
21
-
22
- no_commands do
23
-
24
- def copy_greenfield_files
25
- @config.app['force'] = true
26
- src = 'rails/Dockerfile.greenfield.tt'
27
- dest = 'roro/containers/app/Dockerfile'
28
- template src, dest, @config.app
29
- end
30
-
31
- def run_greenfield_commands
32
- system "DOCKER_BUILDKIT=1 docker build --file roro/containers/app/Dockerfile --output . ."
33
- end
10
+ def greenfield_rails
11
+ greenfield( { story: :rails } )
34
12
  end
35
13
  end
36
14
  end
@@ -1,19 +1,146 @@
1
1
  module Roro
2
2
  class CLI < Thor
3
-
4
- no_commands do
5
-
6
- def configure_for_rollon
7
- confirm_dependencies
3
+
4
+ class << self
5
+ private
6
+ def shared_options!
7
+ method_option :omakase, default: :omakase, desc: "Use the Roro setup with some configuring. 'Omakase' translates as 'I'll leave it up to you.'", aliases: ['-d', '--default']
8
+ method_option :fatsutofodo, desc: 'Use the Roro setup without having to think.', aliases: ['-f', '--fast']
9
+ method_option :okonomi, desc: "Use Roro how you like. 'Okonomi' has the opposite meaning of omakase.", aliases: ['-i', '--interactive']
10
+ end
11
+
12
+ alias_method :orig_desc, :desc
13
+
14
+ def desc(*args)
15
+ orig_desc(*args)
16
+ shared_options!
17
+ end
18
+ end
19
+ rollonto = ' into Roro.'
20
+ desc "rollon", "Roll an existing app#{rollonto}"
21
+ def rollon(args={})
22
+ @config ||= Roro::Configuration.new(args, options)
23
+ greenfield_actions
24
+ greenfield_commands
25
+ manifest_actions
26
+ manifest_intentions
27
+ congratulations
28
+ startup_commands
29
+ end
30
+
31
+ desc "greenfield", "Greenfield a new app and roll it#{rollonto}"
32
+ def greenfield(args={})
33
+ args[:greenfield] = :greenfield
34
+
35
+ rollon(args)
36
+ end
37
+
38
+ desc "greenfield::rails", "Greenfield a new Rails app and roll it#{rollonto}"
39
+
40
+ map "greenfield::rails" => "greenfield_rails"
41
+
42
+ def greenfield_rails
43
+ greenfield( { story: :rails } )
44
+ end
45
+
46
+ desc "rollon::rails", "Roll an existing app#{rollonto}"
47
+ map "rollon::rails" => "rollon_rails"
48
+
49
+ def rollon_rails(args={})
50
+ rollon( { story: :rails } )
51
+ end
52
+
53
+ desc "rollon::rails::kubernetes", "Adds Kubernetes for production."
54
+ map "rollon::rails::kubernetes" => "rollon_rails_kubernetes"
55
+
56
+ def rollon_rails_kubernetes(args={})
57
+ story = {
58
+ rails: [
59
+ { database: :postgresql },
60
+ { kubernetes: :postgresql },
61
+ { ci_cd: :circleci}
62
+ ]
63
+ }
64
+ rollon( { story: story } )
65
+ end
66
+
67
+ desc "greenfield::rails::kubernetes", "Adds Kubernetes for production."
68
+ map "greenfield::rails::kubernetes" => "greenfield_rails_kubernetes"
69
+
70
+ def greenfield_rails_kubernetes(args={})
71
+ story = {
72
+ rails: [
73
+ { database: :postgresql },
74
+ { kubernetes: :postgresql },
75
+ { ci_cd: :circleci}
76
+ ]
77
+ }
78
+ rollon( { story: story } )
79
+ end
80
+
81
+ no_commands do
82
+
83
+ def configure_for_rollon(aroptions=nil)
8
84
  @config ||= Roro::Configuration.new(options)
9
85
  end
86
+
87
+ def manifest_actions
88
+ @config.structure[:actions].each {|a| eval a }
89
+ end
90
+
91
+ def manifest_intentions
92
+ @config.intentions.each {|k, v| eval(k.to_s) if v.eql?('y') }
93
+ end
94
+
95
+ def greenfield_actions
96
+ return unless @config.structure[:greenfield_actions]
97
+ @config.structure[:greenfield_actions].each {|a| eval a }
98
+ end
99
+
100
+ def greenfield_commands
101
+ return unless @config.structure[:greenfield_actions]
102
+ @config.structure[:greenfield_commands].each {|a| eval a }
103
+ end
104
+
105
+ def congratulations(story=nil)
106
+ ( @config.story[:rollon])
107
+ if @config.structure[:greenfield]
108
+ usecase = 'greenfielded a new '
109
+ else
110
+ usecase = 'rolled your existing '
111
+ end
112
+ array = ["You've successfully "]
113
+ array << usecase
114
+ congrats = array.join("")
115
+ puts congrats
116
+ end
117
+
118
+ def startup_commands
119
+ congratulations( @config.story[:rollon])
120
+ cmd = @config.structure[:startup]
121
+ commands = cmd[:commands]
122
+ question = []
123
+ question << "\n\n You can start your app up with some combination of these commands:\n"
124
+ commands.each { |c| question << "\t#{c}"}
125
+ question << "\nOr if you'd like Roro to try and do it for you:"
126
+ question = question.join("\n")
127
+ if ask(question, default: 'y', limited_to: ['y', 'n']).eql?("y")
128
+ commands.each {|a| system(a) }
129
+ puts "\n\n#{cmd[:success]}\n\n"
130
+ end
131
+ end
10
132
 
11
133
  def yaml_from_template(file)
12
- File.read(File.dirname(__FILE__) + "/templates/#{file}")
134
+ File.read(find_in_source_paths(file))
13
135
  end
14
136
 
15
- def take_thor_actions
16
- @config.thor_actions.each {|k, v| eval(k) if v.eql?('y') }
137
+ def generate_config_story
138
+ roro_story = {
139
+ story: @config.story,
140
+ env_vars: @config.env,
141
+ intentions: @config.intentions
142
+ }
143
+ create_file ".roro_story.yml", roro_story.to_yaml
17
144
  end
18
145
  end
19
146
  end
@@ -0,0 +1,4 @@
1
+
2
+ require_relative 'insertions.rb'
3
+ require_relative 'insert_gems.rb'
4
+
@@ -10,16 +10,8 @@ module Roro
10
10
  end
11
11
 
12
12
  def insert_db_gem(gem)
13
- gem_lines = [
14
- /gem\s['"]sqlite3['"]/,
15
- /gem\s['"]mysql2['"]/,
16
- /gem\s['"]pg['"]/,
17
-
18
- ]
19
- gem_lines.each do |line|
20
- comment_lines 'Gemfile', line
21
- gsub_file 'Gemfile', line, 'gem copied over by roro'
22
- end
13
+ gems = %w(sqlite pg mysql2)
14
+ gems.each { |g| gsub_file('Gemfile', /.*#{g}.*/, '')}
23
15
  insert_into_file 'Gemfile', "gem '#{gem}'\n\n", before: "group :development, :test"
24
16
  end
25
17
 
@@ -11,8 +11,16 @@ module Roro
11
11
  prepend_to_file(file, line, force: true)
12
12
  end
13
13
 
14
+ def copy_dockerignore
15
+ copy_file 'base/.dockerignore', '.dockerignore'
16
+ end
17
+
14
18
  def gitignore_sensitive_files
15
19
  append_to_file ".gitignore", "\nroro/**/*.env\nroro/**/*.key"
20
+ append_to_file ".gitignore", "\nroro/**/*.env\nroro/**/*.key"
21
+ append_to_file ".gitignore", "\n*kubeconfig.yaml"
22
+ append_to_file ".gitignore", "\n*kubeconfig.yml"
23
+ append_to_file ".gitignore", "\n*.roro_configurator.yml"
16
24
  end
17
25
  end
18
26
  end
@@ -5,23 +5,19 @@ module Roro
5
5
  no_commands do
6
6
 
7
7
  def configure_database
8
- database = @config.thor_actions['configure_database']
9
- vendor = @config.master['services']['database']['vendors']
8
+ database = @config.intentions[:configure_database]
10
9
  case database
11
10
  when 'p'
12
- @config.app['database_vendor'] = 'postgresql'
13
- @config.app['postgresql_env_vars'] = vendor['postgresql']['env_vars']
11
+ @config.env[:database_vendor] = 'postgresql'
14
12
  configure_for_pg
15
13
  when 'm'
16
- @config.app['database_vendor'] = 'mysql'
17
- @config.app['mysql_env_vars'] = vendor['mysql']['env_vars']
14
+ @config.env[:database_vendor] = 'mysql'
18
15
  configure_for_mysql
19
16
  end
20
-
21
17
  %w(development production test staging ci).each do |environment|
22
18
  src = 'rails/dotenv/web.env.tt'
23
19
  dest = "roro/containers/app/#{environment}.env"
24
- template src, dest, @config.app
20
+ template src, dest, @config.env
25
21
  end
26
22
  end
27
23
  end
@@ -7,10 +7,10 @@ module Roro
7
7
  def configure_for_mysql
8
8
  insert_db_gem('mysql2')
9
9
  copy_file 'rails/config/database.mysql.yml', 'config/database.yml', force: true
10
- config = @config.app.clone
10
+ config = @config.env.clone
11
11
 
12
12
  %w(development production test staging ci).each do |environment|
13
- config['rails_env'] = environment
13
+ config[:rails_env] = environment
14
14
 
15
15
  source = 'rails/dotenv/database.mysql.env.tt'
16
16
  target = "roro/containers/database/#{environment}.env"
@@ -5,14 +5,13 @@ module Roro
5
5
  no_commands do
6
6
 
7
7
  def configure_for_pg
8
- insert_db_gem('pg')
9
8
  copy_file 'rails/config/database.pg.yml', 'config/database.yml', force: true
10
- config = @config.app.clone
9
+ config = @config.env.clone
11
10
  %w(development production test staging ci).each do |environment|
12
- config['rails_env'] = environment
11
+ config[:rails_env] = environment
13
12
 
14
13
  source = 'rails/dotenv/database.pg.env.tt'
15
- target = "roro/containers/database/#{environment}.env"
14
+ target = "roro/containers/database/#{environment}.env"
16
15
  template( source, target, config )
17
16
  end
18
17
  end