roro 0.3.14 → 0.3.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (218) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +52 -20
  3. data/.gitignore +7 -4
  4. data/Guardfile +9 -9
  5. data/README.md +2 -1
  6. data/lib/roro.rb +12 -1
  7. data/lib/roro/cli.rb +18 -73
  8. data/lib/roro/cli/generate/generate_exposed.rb +18 -0
  9. data/lib/roro/cli/generate/generate_keys.rb +6 -39
  10. data/lib/roro/cli/generate/generate_obfuscated.rb +34 -0
  11. data/lib/roro/cli/generate/generate_story.rb +18 -0
  12. data/lib/roro/cli/greenfield/rails.rb +14 -0
  13. data/lib/roro/cli/rollon.rb +126 -63
  14. data/lib/roro/cli/rollon/rails/base/base.rb +4 -0
  15. data/lib/roro/cli/{base → rollon/rails/base}/insert_gems.rb +2 -10
  16. data/lib/roro/cli/{base → rollon/rails/base}/insertions.rb +8 -0
  17. data/lib/roro/cli/rollon/rails/database.rb +26 -0
  18. data/lib/roro/cli/rollon/{stories/rails → rails}/database/with_mysql.rb +4 -4
  19. data/lib/roro/cli/rollon/{stories/rails → rails}/database/with_postgresql.rb +5 -6
  20. data/lib/roro/cli/rollon/ruby_gem.rb +1 -0
  21. data/lib/roro/cli/rollon/{stories/ruby_gem → ruby_gem}/with_ci_cd.rb +8 -8
  22. data/lib/roro/cli/rollon/stories.rb +2 -2
  23. data/lib/roro/configurator.rb +15 -0
  24. data/lib/roro/configurator/eligibility.rb +137 -0
  25. data/lib/roro/configurator/okonomi.rb +28 -0
  26. data/lib/roro/configurator/omakase.rb +170 -0
  27. data/lib/roro/crypto.rb +113 -0
  28. data/lib/roro/stories/greenfield.yml +1 -0
  29. data/lib/roro/stories/greenfield/rails.yml +9 -0
  30. data/lib/roro/stories/rollon.yml +42 -0
  31. data/lib/roro/stories/rollon/rails.yml +76 -0
  32. data/lib/roro/stories/rollon/rails/ci_cd.yml +1 -0
  33. data/lib/roro/stories/rollon/rails/ci_cd/circleci.yml +2 -0
  34. data/lib/roro/stories/rollon/rails/database.yml +9 -0
  35. data/lib/roro/stories/rollon/rails/database/mysql.yml +17 -0
  36. data/lib/roro/stories/rollon/rails/database/postgresql.yml +15 -0
  37. data/lib/roro/stories/rollon/rails/kubernetes.yml +1 -0
  38. data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +10 -0
  39. data/lib/roro/stories/rollon/rails/kubernetes/postgresql/default.yml +1 -0
  40. data/lib/roro/stories/rollon/rails/kubernetes/postgresql/edge.yml +1 -0
  41. data/lib/roro/stories/rollon/ruby_gem.yml +5 -0
  42. data/lib/roro/templates/base/.circleci/_aliases.yml +8 -0
  43. data/lib/roro/templates/base/.circleci/_commands.yml +31 -0
  44. data/lib/roro/templates/base/.circleci/_defaults.yml +5 -0
  45. data/lib/roro/templates/base/.circleci/_executors.yml +11 -0
  46. data/lib/roro/templates/base/.circleci/_major_only.yml +4 -0
  47. data/lib/roro/templates/base/.circleci/_version.yml +1 -0
  48. data/lib/roro/templates/base/.circleci/_workflow.yml +2 -0
  49. data/lib/roro/templates/base/.circleci/config.job-example.yml +33 -0
  50. data/lib/roro/templates/base/.circleci/jobs/_build.yml +4 -0
  51. data/lib/roro/templates/base/.circleci/jobs/_release.yml +12 -0
  52. data/lib/roro/templates/base/.circleci/workflows/_build_release.yml +10 -0
  53. data/lib/roro/{cli/templates → templates}/base/.dockerignore +0 -0
  54. data/lib/roro/templates/base/dotenv +1 -0
  55. data/lib/roro/{cli/rollon/stories/rails → templates/base/jumpstart}/.keep +0 -0
  56. data/lib/roro/{cli/templates → templates/base}/jumpstart/Dockerfile.tt +0 -0
  57. data/lib/roro/{cli/templates → templates/base}/jumpstart/docker-compose.yml +0 -0
  58. data/lib/roro/{cli/templates → templates/base}/jumpstart/docker-entrypoint.sh +0 -0
  59. data/lib/roro/{cli/templates → templates/base}/livereload/hosts.example +0 -0
  60. data/lib/roro/{cli/templates/base → templates/base/roro}/.keep +0 -0
  61. data/lib/roro/{cli/templates/jumpstart → templates/base/roro/roro}/.keep +0 -0
  62. data/lib/roro/{cli/templates/roro → templates/base/roro/roro/containers}/.keep +0 -0
  63. data/lib/roro/{cli/templates/roro/roro → templates/base/roro/roro/containers/app}/.keep +0 -0
  64. data/lib/roro/{cli/templates/roro/roro/containers → templates/base/roro/roro/containers/frontend}/.keep +0 -0
  65. data/lib/roro/{cli/templates → templates/base}/roro/roro/docker-entrypoint.sh.tt +0 -0
  66. data/lib/roro/{cli/templates/roro/roro/containers/app → templates/base/roro/roro/keys}/.keep +0 -0
  67. data/lib/roro/{cli/templates/roro/roro/containers/frontend → templates/rails/.circleci}/.keep +0 -0
  68. data/lib/roro/templates/rails/.circleci/config.yml.tt +11 -0
  69. data/lib/roro/templates/rails/.circleci/jobs/_build.yml +14 -0
  70. data/lib/roro/templates/rails/.circleci/jobs/_push.yml +11 -0
  71. data/lib/roro/templates/rails/.circleci/jobs/_test.yml +12 -0
  72. data/lib/roro/{cli/templates/ruby_gem → templates/rails}/.circleci/setup-gem-credentials.sh +0 -0
  73. data/lib/roro/templates/rails/.circleci/workflows/_build_test_push.yml +12 -0
  74. data/lib/roro/{cli/templates/ruby_gem/.circleci → templates/rails}/.keep +0 -0
  75. data/lib/roro/templates/rails/Dockerfile.greenfield.tt +51 -0
  76. data/lib/roro/{cli/templates/base → templates/rails}/config/database.mysql.yml +0 -0
  77. data/lib/roro/{cli/templates/base → templates/rails}/config/database.pg.yml +2 -3
  78. data/lib/roro/templates/rails/database/with_mysql/_service.yml +10 -0
  79. data/lib/roro/{cli/templates/ruby_gem/roro/containers → templates/rails/database/with_postgresql}/.keep +0 -0
  80. data/lib/roro/templates/rails/database/with_postgresql/_service.yml +7 -0
  81. data/lib/roro/{cli/templates/roro → templates/rails}/docker-compose.yml.tt +7 -7
  82. data/lib/roro/{cli/templates/ruby_gem/roro/keys → templates/rails/dotenv}/.keep +0 -0
  83. data/lib/roro/templates/rails/dotenv/database.mysql.env.tt +6 -0
  84. data/lib/roro/templates/rails/dotenv/database.pg.env.tt +4 -0
  85. data/lib/roro/templates/rails/dotenv/web.env.tt +2 -0
  86. data/lib/roro/templates/rails/kube.rake.tt +114 -0
  87. data/lib/roro/{cli/templates/stories → templates/rails/roro}/.keep +0 -0
  88. data/lib/roro/{cli/templates/stories/rails/database/with_postgresql → templates/rails/roro/containers}/.keep +0 -0
  89. data/lib/roro/{cli/templates/stories/with_postgresql → templates/rails/roro/containers/app}/.keep +0 -0
  90. data/lib/roro/templates/rails/roro/containers/app/Dockerfile.tt +34 -0
  91. data/lib/roro/{cli/rollon/stories/database.rb → templates/rails/roro/containers/frontend/.keep} +0 -0
  92. data/lib/roro/templates/rails/roro/docker-entrypoint.sh +8 -0
  93. data/lib/roro/templates/rails/roro/keys/.keep +0 -0
  94. data/lib/roro/templates/rails/roro/kube/.keep +0 -0
  95. data/lib/roro/templates/rails/roro/kube/certificate.yml.tt +0 -0
  96. data/lib/roro/templates/rails/roro/kube/cluster-issuer.yml.tt +0 -0
  97. data/lib/roro/templates/rails/roro/kube/deployment.yml.tt +50 -0
  98. data/lib/roro/templates/rails/roro/kube/deployments/postgres_deploy.yaml +47 -0
  99. data/lib/roro/templates/rails/roro/kube/deployments/rails_deploy.yaml +62 -0
  100. data/lib/roro/templates/rails/roro/kube/deployments/redis_deploy.yaml +23 -0
  101. data/lib/roro/templates/rails/roro/kube/deployments/sidekiq_deploy.yaml +56 -0
  102. data/lib/roro/templates/rails/roro/kube/ingress.yml.tt +0 -0
  103. data/lib/roro/templates/rails/roro/kube/ingresses/ingress.yaml +13 -0
  104. data/lib/roro/templates/rails/roro/kube/job-migrate.yml.tt +0 -0
  105. data/lib/roro/templates/rails/roro/kube/jobs/setup.yaml +42 -0
  106. data/lib/roro/templates/rails/roro/kube/secret-digital-ocean.yml.tt +4 -0
  107. data/lib/roro/templates/rails/roro/kube/service.yml.tt +10 -0
  108. data/lib/roro/templates/rails/roro/kube/services/postgres_svc.yaml +13 -0
  109. data/lib/roro/templates/rails/roro/kube/services/rails_svc.yaml +13 -0
  110. data/lib/roro/templates/rails/roro/kube/services/redis_svc.yaml +13 -0
  111. data/lib/roro/templates/rails/roro/kube/volumes/postgres_volumes.yaml +25 -0
  112. data/lib/roro/templates/ruby_gem/.circleci/.keep +0 -0
  113. data/lib/roro/templates/ruby_gem/.circleci/config.yml.tt +16 -0
  114. data/lib/roro/templates/ruby_gem/.circleci/jobs/_test.yml +4 -0
  115. data/lib/roro/templates/ruby_gem/.circleci/setup-gem-credentials.sh +3 -0
  116. data/lib/roro/{cli/templates → templates}/ruby_gem/docker-compose.yml +0 -0
  117. data/lib/roro/templates/ruby_gem/roro/containers/.keep +0 -0
  118. data/lib/roro/{cli/templates → templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +1 -1
  119. data/lib/roro/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +1 -0
  120. data/lib/roro/templates/ruby_gem/roro/keys/.keep +0 -0
  121. data/lib/roro/version.rb +1 -1
  122. data/roro.gemspec +12 -21
  123. data/roro/containers/app/Dockerfile +51 -0
  124. data/roro/containers/app/dotenv +1 -0
  125. metadata +179 -171
  126. data/lib/roro/cli/base/base.rb +0 -8
  127. data/lib/roro/cli/base/base_files.rb +0 -24
  128. data/lib/roro/cli/base/check_dependencies.rb +0 -98
  129. data/lib/roro/cli/base/continuous_integration.rb +0 -13
  130. data/lib/roro/cli/base/utilities.rb +0 -39
  131. data/lib/roro/cli/cli.rb +0 -99
  132. data/lib/roro/cli/configuration.rb +0 -69
  133. data/lib/roro/cli/expose.rb +0 -14
  134. data/lib/roro/cli/generate/config.rb +0 -13
  135. data/lib/roro/cli/generate/config/rails.rb +0 -17
  136. data/lib/roro/cli/greenfield.rb +0 -31
  137. data/lib/roro/cli/obfuscate.rb +0 -19
  138. data/lib/roro/cli/rollon/stories/rails.rb +0 -1
  139. data/lib/roro/cli/rollon/stories/rails/database.rb +0 -33
  140. data/lib/roro/cli/rollon/stories/ruby_gem.rb +0 -77
  141. data/lib/roro/cli/rollon/stories/stories.rb +0 -3
  142. data/lib/roro/cli/roro_configurator.yml +0 -157
  143. data/lib/roro/cli/ruby_gem.rb +0 -67
  144. data/lib/roro/cli/templates/base/.roro_config.yml +0 -15
  145. data/lib/roro/cli/templates/base/Dockerfile.tt +0 -82
  146. data/lib/roro/cli/templates/greenfield/Dockerfile.tt +0 -43
  147. data/lib/roro/cli/templates/ruby_gem/.circleci/config.yml.tt +0 -40
  148. data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -1
  149. data/lib/roro/cli/templates/stories/rails/database/with_mysql/_service.yml +0 -10
  150. data/lib/roro/cli/templates/stories/rails/database/with_postgresql/_service.yml +0 -7
  151. data/lib/roro/cli/templates/stories/ruby_gem/with_ci_cd/_build.yml +0 -11
  152. data/lib/roro/cli/templates/stories/with_mysql/_service.yml +0 -10
  153. data/lib/roro/cli/templates/stories/with_postgresql/_service.yml +0 -7
  154. data/lib/tasks/deploy.rake +0 -126
  155. data/roro/containers/ruby_image/ci.env.enc +0 -2
  156. data/vendor/cache/actionpack-6.0.3.2.gem +0 -0
  157. data/vendor/cache/actionview-6.0.3.2.gem +0 -0
  158. data/vendor/cache/activesupport-6.0.3.2.gem +0 -0
  159. data/vendor/cache/addressable-2.7.0.gem +0 -0
  160. data/vendor/cache/builder-3.2.4.gem +0 -0
  161. data/vendor/cache/byebug-11.1.3.gem +0 -0
  162. data/vendor/cache/coderay-1.1.3.gem +0 -0
  163. data/vendor/cache/concurrent-ruby-1.1.7.gem +0 -0
  164. data/vendor/cache/crass-1.0.6.gem +0 -0
  165. data/vendor/cache/em-websocket-0.5.1.gem +0 -0
  166. data/vendor/cache/erubi-1.9.0.gem +0 -0
  167. data/vendor/cache/eventmachine-1.2.7.gem +0 -0
  168. data/vendor/cache/ffi-1.13.1.gem +0 -0
  169. data/vendor/cache/formatador-0.2.5.gem +0 -0
  170. data/vendor/cache/gem-release-2.1.1.gem +0 -0
  171. data/vendor/cache/given_core-3.8.0.gem +0 -0
  172. data/vendor/cache/guard-2.16.2.gem +0 -0
  173. data/vendor/cache/guard-compat-1.2.1.gem +0 -0
  174. data/vendor/cache/guard-livereload-2.5.2.gem +0 -0
  175. data/vendor/cache/guard-minitest-2.4.6.gem +0 -0
  176. data/vendor/cache/handsome_fencer-crypto-0.1.6.gem +0 -0
  177. data/vendor/cache/handsome_fencer-test-0.1.1.gem +0 -0
  178. data/vendor/cache/http_parser.rb-0.6.0.gem +0 -0
  179. data/vendor/cache/i18n-1.8.5.gem +0 -0
  180. data/vendor/cache/launchy-2.5.0.gem +0 -0
  181. data/vendor/cache/listen-3.2.1.gem +0 -0
  182. data/vendor/cache/loofah-2.6.0.gem +0 -0
  183. data/vendor/cache/lumberjack-1.2.7.gem +0 -0
  184. data/vendor/cache/method_source-1.0.0.gem +0 -0
  185. data/vendor/cache/mini_portile2-2.4.0.gem +0 -0
  186. data/vendor/cache/minitest-5.14.1.gem +0 -0
  187. data/vendor/cache/minitest-given-3.8.0.gem +0 -0
  188. data/vendor/cache/minitest-matchers_vaccine-1.0.4.gem +0 -0
  189. data/vendor/cache/minitest-rails-6.0.1.gem +0 -0
  190. data/vendor/cache/mocha-1.11.2.gem +0 -0
  191. data/vendor/cache/multi_json-1.15.0.gem +0 -0
  192. data/vendor/cache/nenv-0.3.0.gem +0 -0
  193. data/vendor/cache/net-scp-3.0.0.gem +0 -0
  194. data/vendor/cache/net-ssh-6.1.0.gem +0 -0
  195. data/vendor/cache/nokogiri-1.10.10.gem +0 -0
  196. data/vendor/cache/notiffany-0.1.3.gem +0 -0
  197. data/vendor/cache/os-1.0.0.gem +0 -0
  198. data/vendor/cache/pry-0.13.1.gem +0 -0
  199. data/vendor/cache/public_suffix-4.0.5.gem +0 -0
  200. data/vendor/cache/rack-2.2.3.gem +0 -0
  201. data/vendor/cache/rack-livereload-0.3.17.gem +0 -0
  202. data/vendor/cache/rack-test-1.1.0.gem +0 -0
  203. data/vendor/cache/rails-dom-testing-2.0.3.gem +0 -0
  204. data/vendor/cache/rails-html-sanitizer-1.3.0.gem +0 -0
  205. data/vendor/cache/railties-6.0.3.2.gem +0 -0
  206. data/vendor/cache/rake-13.0.1.gem +0 -0
  207. data/vendor/cache/rb-fsevent-0.10.4.gem +0 -0
  208. data/vendor/cache/rb-inotify-0.10.1.gem +0 -0
  209. data/vendor/cache/shellany-0.0.1.gem +0 -0
  210. data/vendor/cache/shoulda-4.0.0.gem +0 -0
  211. data/vendor/cache/shoulda-context-2.0.0.gem +0 -0
  212. data/vendor/cache/shoulda-matchers-4.3.0.gem +0 -0
  213. data/vendor/cache/sorcerer-2.0.1.gem +0 -0
  214. data/vendor/cache/sshkit-1.18.2.gem +0 -0
  215. data/vendor/cache/thor-1.0.1.gem +0 -0
  216. data/vendor/cache/thread_safe-0.3.6.gem +0 -0
  217. data/vendor/cache/tzinfo-1.2.7.gem +0 -0
  218. data/vendor/cache/zeitwerk-2.4.0.gem +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 23af0aef63d401cf4307914b6900fca6c65204b7
4
- data.tar.gz: c5ec5625d41f98dcf412e8d80f636a45c8dcde31
2
+ SHA256:
3
+ metadata.gz: d21bacda1161bc7f1cb8b57ebbca68cbe4f9647c2d02b33464c6a162f3661d31
4
+ data.tar.gz: d40e7d418705dd50e38e8d5a6f337d313f8cae3fadb1a37a7114c504cd8bbb46
5
5
  SHA512:
6
- metadata.gz: 868731a885948198f1a876b554ff538abed022794b03c51c87f5906b817290c487f26e0f5e472315ae3462a90a42b11240de005d5b11581d728567e3153b543d
7
- data.tar.gz: b1fcbe257489a6c0ef5d00054d9a18e7c8e98fdd4ce9aa81f88a838aaab163448be4e40996d47a12ae1724b5fa4a206e6536f518f934f7edf636748e53d209f5
6
+ metadata.gz: af1f1072843ad1d6919afd41398c31ae7357a9d492bb8e811a3d9da825bef9eb1def20a5577f059655b22eceac1bc387b0760f710a257412202a61f6497d8818
7
+ data.tar.gz: ed48d94a0902e9123e4790b44d77249ddee40e4d122524fcfe5afe92a661ebc3903ff96cc75210e85e200eb66388033d824934b6675b976ca543aa39981ac2f5
data/.circleci/config.yml CHANGED
@@ -1,22 +1,58 @@
1
+ aliases:
2
+ - &workspace-location
3
+ at: /tmp/workspace
4
+ - &copy-ci-dotenv |
5
+ cp -rf /tmp/workspace/roro .
6
+ - &source-ci-variables |
7
+ echo 'source roro/containers/app/ci.env' >> $BASH_ENV
8
+ source $BASH_ENV
9
+
10
+ defaults: &defaults
11
+ executor: machine-executor
12
+ working_directory: ~/project
13
+
14
+ major_only: &major_only
15
+ filters:
16
+ branches:
17
+ only: master
18
+
19
+ release: &release
20
+ filters:
21
+ branches:
22
+ only: release
23
+
24
+
1
25
  version: 2.1
2
26
 
27
+ executors:
28
+ machine-executor:
29
+ machine: true
30
+ ruby-executor:
31
+ docker:
32
+ - image: cimg/ruby:2.7
33
+
3
34
  jobs:
4
35
 
5
36
  build:
6
- machine: true
37
+ <<: *defaults
7
38
  steps:
8
39
  - checkout
9
40
 
10
- test-cli:
11
- machine: true
41
+ test-rollon-rails:
42
+ executor: ruby-executor
12
43
  steps:
13
44
  - checkout
14
- - run: gem install --local pkg/roro-0.3.12.gem
15
- - run: roro greenfield --force
16
-
45
+ - setup_remote_docker:
46
+ version: 19.03.12
47
+ - run: |
48
+ rake install
49
+ mkdir greenfield
50
+ cd greenfield
51
+ (yes || true) | roro greenfield
52
+ - run: echo 'success'
17
53
 
18
54
  test:
19
- machine: true
55
+ <<: *defaults
20
56
  steps:
21
57
  - checkout
22
58
  - run: RUBY_VERSION=2.5 docker-compose build ruby_gem
@@ -30,7 +66,7 @@ jobs:
30
66
  - run: RUBY_VERSION=2.7 docker-compose run ruby_gem bundle exec rake test
31
67
 
32
68
  release:
33
- machine: true
69
+ <<: *defaults
34
70
  steps:
35
71
  - checkout
36
72
  - run: gem install roro
@@ -47,21 +83,17 @@ jobs:
47
83
  workflows:
48
84
  version: 2
49
85
 
50
- build-release:
86
+ build-cli:
51
87
  jobs:
52
- - build
53
- - test-cli:
54
- filters:
55
- branches:
56
- only: development
88
+ - build:
89
+ <<: *major_only
90
+ <<: *release
91
+ - test-rollon-rails:
92
+ <<: *major_only
57
93
  - test:
58
- filters:
59
- branches:
60
- only: master
94
+ <<: *major_only
61
95
 
62
96
  - release:
63
97
  requires:
64
98
  - build
65
- filters:
66
- branches:
67
- only: release
99
+ <<: *release
data/.gitignore CHANGED
@@ -14,11 +14,14 @@ roro/**/*.key
14
14
  *.key
15
15
  *.env
16
16
  !/.gitignore
17
-
17
+ *.gem
18
18
  tmp/*
19
- !tmp/.keep
19
+ !tmp/.keep
20
20
  sandbox/*
21
- !sandbox/.keep
21
+ !sandbox/.keep
22
22
  !sandbox/greenfield
23
23
  sandbox/greenfield/*
24
- !sandbox/greenfield/.keep
24
+ !sandbox/greenfield/.keep
25
+ TUTORIAL.md
26
+
27
+ .idea
data/Guardfile CHANGED
@@ -1,17 +1,17 @@
1
- # A sample Guardfile
2
- # More info at https://github.com/guard/guard#readme
3
-
4
1
  options = {
5
- cli: '-f',
6
2
  all_on_start: true,
7
- all_after_pass: true
3
+ all_after_pass: false,
8
4
  }
9
5
 
10
6
  guard :minitest, options do
11
7
 
12
- watch(%r{^test/(.*)\/?test_(.*)\.rb$})
13
8
  watch(%r{^test/(.*)\/?(.*)_test\.rb$})
14
- watch(%r{^lib/roro/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
15
- watch(%r{^test/thor_helper\.rb$}) { 'test' }
16
- watch(%r{^test/fixtures/files/(.*/)?([^/]+)\.yml$}) { 'test' }
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/(.+)\.rb$}) { "test/crypto_test.rb" }
13
+ # watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
14
+ # watch(%r{^lib/roro/cli/(.+)\.rb$}) { |m| "test/cli/#{m[1]}_test.rb" }
15
+ # watch(%r{^lib/roro/cli/(.+)\.yml$}) { |m| "test/cli" }
16
+ # watch(%r{^lib/roro/cli/(.+)\.tt$}) { |m| "test/cli" }
17
17
  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
+
data/lib/roro.rb CHANGED
@@ -1,7 +1,18 @@
1
- require "roro/version"
2
1
  require "thor"
2
+ require "roro/version"
3
3
  require "roro/cli"
4
+ require "roro/configurator"
5
+ require "roro/crypto"
4
6
 
5
7
  module Roro
8
+ module Crypto
9
+ class KeyError < StandardError; end
10
+ class EnvironmentError < StandardError; end
11
+ class DataDestructionError < StandardError; end
12
+ class EncryptableError < StandardError; end
13
+ class DecryptableError < StandardError; end
14
+ end
15
+
16
+
6
17
  class Error < StandardError; end
7
18
  end
data/lib/roro/cli.rb CHANGED
@@ -1,89 +1,34 @@
1
- require 'roro/cli/base/base'
2
- require 'roro/cli/greenfield'
3
- require 'roro/cli/obfuscate'
4
- require 'roro/cli/expose'
5
- require 'roro/cli/generate/config/rails'
6
- require 'roro/cli/generate/config'
7
- require 'roro/cli/generate/generate_keys'
8
- require 'roro/cli/configuration'
9
1
 
2
+ require 'roro/cli/generate/generate_exposed'
3
+ require 'roro/cli/generate/generate_keys'
4
+ require 'roro/cli/generate/generate_obfuscated'
5
+ require 'roro/cli/generate/generate_story'
6
+ require 'roro/cli/greenfield/rails'
10
7
  require 'roro/cli/rollon'
8
+ require 'roro/cli/rollon/rails/base/base'
9
+ require 'roro/cli/rollon/rails/database/with_mysql'
10
+ require 'roro/cli/rollon/rails/database/with_postgresql'
11
+ require 'roro/cli/rollon/ruby_gem'
12
+
11
13
  module Roro
12
-
13
14
  class CLI < Thor
14
15
 
15
16
  include Thor::Actions
16
17
 
17
18
  def self.source_root
18
- File.dirname(__FILE__) + '/cli/templates'
19
- end
20
-
21
-
22
- desc "rollon::rails", "Generates files for and makes changes to your app
23
- so it can run using Docker containers."
24
- method_option :interactive, desc: "Set up your environment variables as
25
- you go."
26
- map "rollon::rails" => "rollon_rails"
27
-
28
- def rollon_rails
29
- rollon
30
- end
31
-
32
-
33
- desc "greenfield::rails", "Greenfield a new, dockerized rails app with
34
- either MySQL or PostgreSQL in a separate container."
35
-
36
- method_option :env_vars, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "key1:value1 key2:value2"
37
- method_option :interactive, desc: "Set up your environment variables as you go."
38
- method_option :force, desc: "force over-write of existing files"
39
-
40
- map "greenfield::rails" => "greenfield_rails"
41
-
42
- def greenfield_rails(*args)
43
- greenfield(*args)
44
- end
45
- desc "generate::exposed", "Generate private .env files from
46
- encrypted .env.enc files inside the roro directory."
47
- map "generate::exposed" => "generate_exposed"
48
-
49
- def generate_exposed(*args)
50
- expose(*args)
19
+ File.dirname(__FILE__) + '/templates'
51
20
  end
52
21
 
53
- desc "generate::key", "Generate a key inside roro/keys. Takes the name of
54
- an environment as an argument to private .env files from
55
- encrypted .env.enc files inside the roro directory.
56
- Expose encrypted files"
57
-
58
- map "generate::key" => "generate_key"
59
- method_option :environment, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "development, staging"
60
-
61
- def generate_key(*args)
62
- generate_key_or_keys(*args)
63
- end
64
-
65
- desc "generate::keys", "Generate keys for each environment inside roro/keys.
66
- If you have .env files like 'roro/containers/app/[staging_env].env' and
67
- 'roro/[circle_ci_env].env' it will generate '/roro/keys/[staging_env].key'
68
- and '/roro/keys/[circle_ci_env].key'."
69
- map "generate::keys" => "generate_keys"
70
-
71
- def generate_keys(*args)
72
- generate_key(*args)
73
- end
74
-
75
- desc "generate::config", "Generate a config file at .roro_config.yml"
76
- map "generate::config" => "generate_config"
77
-
78
- def generate_config
79
- create_file ".roro_config.yml", @config.app.to_yaml
22
+ def self.story_root
23
+ File.dirname(__FILE__) + '/stories'
80
24
  end
81
25
 
82
- desc "generate::obfuscated", "obfuscates any files matching the pattern ./roro/**/*.env"
83
- map "generate::obfuscated" => "generate_obfuscated"
26
+ def self.test_fixture_root
27
+ File.dirname(__FILE__) + '/test/fixtures'
28
+ end
84
29
 
85
- def generate_obfuscated(*args)
86
- obfuscate(*args)
30
+ def self.roro_environments
31
+ %w(development production test staging ci)
87
32
  end
88
33
  end
89
34
  end
@@ -0,0 +1,18 @@
1
+ module Roro
2
+ class CLI < Thor
3
+
4
+ desc "generate::exposed", "Decrypts .env.enc files for all environments or those specified."
5
+ map "generate::exposed" => "generate_exposed"
6
+
7
+
8
+ def generate_exposed(*environments)
9
+ Roro::Crypto.expose(environments, './roro', '.env.enc')
10
+ end
11
+ # def generate_exposed(*args)
12
+ # environments = args.first ? [args.first] : gather_environments
13
+ # environments.each do |environment|
14
+ # Roro::Crypto.expose(environment, 'roro')
15
+ # end
16
+ # end
17
+ end
18
+ end
@@ -1,47 +1,14 @@
1
1
  module Roro
2
2
 
3
3
  class CLI < Thor
4
-
5
- no_commands do
4
+ map "generate::key" => "generate_keys"
5
+ method_option :environment, type: :hash, default: {}, desc: "Generates a key for each argument.", banner: "development, staging"
6
6
 
7
- def generate_key_or_keys(*args)
8
- environments = args.first ? [args.first] : gather_environments
9
- environments.each do |environment|
10
-
11
- confirm_files_decrypted?(environment)
12
- create_file "roro/keys/#{environment}.key", encoded_key
13
- end
14
- end
7
+ desc "generate::keys", "Generates a key for each <environment>.env file."
8
+ map "generate::keys" => "generate_keys"
15
9
 
16
- def encoded_key
17
- @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
18
- @salt = '8 octets'
19
- @new_key = @cipher.random_key
20
- Base64.encode64(@new_key)
21
- end
22
-
23
- def gather_environments
24
- environments = []
25
- ['.env', '.env.enc'].each do |extension|
26
- HandsomeFencer::Crypto.source_files('roro', extension).each do |env_file|
27
- environments << env_file.split('/').last.split(extension).last
28
- end
29
- end
30
- environments.uniq
31
- end
32
-
33
- def confirm_files_decrypted?(environment)
34
- orphan_encrypted = []
35
- HandsomeFencer::Crypto.source_files('.', '.env.enc').each do |file|
36
- unless File.exist? file.split('.enc').first
37
- orphan_encrypted << file
38
- end
39
- end
40
- if !orphan_encrypted.empty?
41
- raise Roro::Error.new("You have an encrypted files (.env.enc) #{orphan_encrypted} that do not have corresponding decrypted files (.env). Please decrypt or remove these encrypted files before generating a new key for #{environment}.")
42
- end
43
- true
44
- end
10
+ def generate_keys(*environments)
11
+ Roro::Crypto.generate_keys(environments, './roro', '.env')
45
12
  end
46
13
  end
47
14
  end
@@ -0,0 +1,34 @@
1
+ require 'roro/crypto'
2
+
3
+ module Roro
4
+
5
+ class CLI < Thor
6
+
7
+ desc "generate::obfuscated", "Encrypts .env files for safe storage."
8
+ map "generate::obfuscated" => "generate_obfuscated"
9
+
10
+ def generate_obfuscated(*environments)
11
+ Roro::Crypto.obfuscate(environments, './roro', '.env')
12
+ end
13
+
14
+ no_commands do
15
+
16
+ def check_for_obfuscatable(environments)
17
+ if environments.empty?
18
+ msg = "No .env files matching the
19
+ pattern roro/**/*.env'. Please create one."
20
+ raise Roro::Error.new(msg)
21
+ end
22
+ end
23
+
24
+ def check_for_keys(environments)
25
+ environments.each do |e|
26
+ unless File.exist?("roro/keys/#{e}.key")
27
+ msg = "No #{e} key file at roro/keys/{e}.key. Please generate one."
28
+ raise Roro::Error.new(msg)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ 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
@@ -0,0 +1,14 @@
1
+ module Roro
2
+
3
+ class CLI < Thor
4
+
5
+ desc "greenfield::rails", "Greenfield a new, dockerized rails app with
6
+ either MySQL or PostgreSQL in a separate container."
7
+
8
+ map "greenfield::rails" => "greenfield_rails"
9
+
10
+ def greenfield_rails
11
+ greenfield( { story: :rails } )
12
+ end
13
+ end
14
+ end