roro 0.3.13 → 0.3.21

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 (214) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +55 -11
  3. data/.gitignore +3 -2
  4. data/Guardfile +8 -10
  5. data/README.md +2 -1
  6. data/lib/roro.rb +3 -1
  7. data/lib/roro/cli.rb +16 -74
  8. data/lib/roro/cli/generate/exposed.rb +14 -0
  9. data/lib/roro/cli/generate/{generate_keys.rb → keys.rb} +24 -2
  10. data/lib/roro/cli/generate/obfuscated.rb +17 -0
  11. data/lib/roro/cli/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 +73 -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/rails/.circleci}/.keep +0 -0
  67. data/lib/roro/templates/rails/.circleci/config.yml.tt +11 -0
  68. data/lib/roro/templates/rails/.circleci/jobs/_build.yml +14 -0
  69. data/lib/roro/templates/rails/.circleci/jobs/_push.yml +11 -0
  70. data/lib/roro/templates/rails/.circleci/jobs/_test.yml +12 -0
  71. data/lib/roro/{cli/templates/ruby_gem → templates/rails}/.circleci/setup-gem-credentials.sh +0 -0
  72. data/lib/roro/templates/rails/.circleci/workflows/_build_test_push.yml +12 -0
  73. data/lib/roro/{cli/templates/roro/roro/containers/frontend → templates/rails}/.keep +0 -0
  74. data/lib/roro/templates/rails/Dockerfile.greenfield.tt +51 -0
  75. data/lib/roro/{cli/templates/base → templates/rails}/config/database.mysql.yml +0 -0
  76. data/lib/roro/{cli/templates/base → templates/rails}/config/database.pg.yml +2 -3
  77. data/lib/roro/templates/rails/database/with_mysql/_service.yml +10 -0
  78. data/lib/roro/{cli/templates/ruby_gem/.circleci → templates/rails/database/with_postgresql}/.keep +0 -0
  79. data/lib/roro/templates/rails/database/with_postgresql/_service.yml +7 -0
  80. data/lib/roro/{cli/templates/roro → templates/rails}/docker-compose.yml.tt +9 -10
  81. data/lib/roro/{cli/templates/ruby_gem/roro/containers → templates/rails/dotenv}/.keep +0 -0
  82. data/lib/roro/templates/rails/dotenv/database.mysql.env.tt +6 -0
  83. data/lib/roro/templates/rails/dotenv/database.pg.env.tt +4 -0
  84. data/lib/roro/templates/rails/dotenv/web.env.tt +2 -0
  85. data/lib/roro/templates/rails/kube.rake.tt +114 -0
  86. data/lib/roro/{cli/templates/ruby_gem/roro/keys → templates/rails/roro}/.keep +0 -0
  87. data/lib/roro/{cli/templates/stories → templates/rails/roro/containers}/.keep +0 -0
  88. data/lib/roro/{cli/templates/stories/rails/database/with_postgresql → templates/rails/roro/containers/app}/.keep +0 -0
  89. data/lib/roro/templates/rails/roro/containers/app/Dockerfile.tt +34 -0
  90. data/lib/roro/{cli/templates/stories/with_postgresql → templates/rails/roro/containers/frontend}/.keep +0 -0
  91. data/lib/roro/templates/rails/roro/docker-entrypoint.sh +8 -0
  92. data/lib/roro/{cli/rollon/stories/database.rb → templates/rails/roro/kube/.keep} +0 -0
  93. data/lib/roro/templates/rails/roro/kube/certificate.yml.tt +0 -0
  94. data/lib/roro/templates/rails/roro/kube/cluster-issuer.yml.tt +0 -0
  95. data/lib/roro/templates/rails/roro/kube/deployment.yml.tt +50 -0
  96. data/lib/roro/templates/rails/roro/kube/deployments/postgres_deploy.yaml +47 -0
  97. data/lib/roro/templates/rails/roro/kube/deployments/rails_deploy.yaml +62 -0
  98. data/lib/roro/templates/rails/roro/kube/deployments/redis_deploy.yaml +23 -0
  99. data/lib/roro/templates/rails/roro/kube/deployments/sidekiq_deploy.yaml +56 -0
  100. data/lib/roro/templates/rails/roro/kube/ingress.yml.tt +0 -0
  101. data/lib/roro/templates/rails/roro/kube/ingresses/ingress.yaml +13 -0
  102. data/lib/roro/templates/rails/roro/kube/job-migrate.yml.tt +0 -0
  103. data/lib/roro/templates/rails/roro/kube/jobs/setup.yaml +42 -0
  104. data/lib/roro/templates/rails/roro/kube/secret-digital-ocean.yml.tt +4 -0
  105. data/lib/roro/templates/rails/roro/kube/service.yml.tt +10 -0
  106. data/lib/roro/templates/rails/roro/kube/services/postgres_svc.yaml +13 -0
  107. data/lib/roro/templates/rails/roro/kube/services/rails_svc.yaml +13 -0
  108. data/lib/roro/templates/rails/roro/kube/services/redis_svc.yaml +13 -0
  109. data/lib/roro/templates/rails/roro/kube/volumes/postgres_volumes.yaml +25 -0
  110. data/lib/roro/templates/ruby_gem/.circleci/.keep +0 -0
  111. data/lib/roro/templates/ruby_gem/.circleci/config.yml.tt +16 -0
  112. data/lib/roro/templates/ruby_gem/.circleci/jobs/_test.yml +4 -0
  113. data/lib/roro/templates/ruby_gem/.circleci/setup-gem-credentials.sh +3 -0
  114. data/lib/roro/{cli/templates → templates}/ruby_gem/docker-compose.yml +0 -0
  115. data/lib/roro/templates/ruby_gem/roro/containers/.keep +0 -0
  116. data/lib/roro/{cli/templates → templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +1 -1
  117. data/lib/roro/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +1 -0
  118. data/lib/roro/templates/ruby_gem/roro/keys/.keep +0 -0
  119. data/lib/roro/version.rb +1 -1
  120. data/roro.gemspec +11 -21
  121. data/roro/containers/app/Dockerfile +51 -0
  122. metadata +165 -173
  123. data/lib/roro/cli/base/base.rb +0 -8
  124. data/lib/roro/cli/base/base_files.rb +0 -24
  125. data/lib/roro/cli/base/check_dependencies.rb +0 -98
  126. data/lib/roro/cli/base/continuous_integration.rb +0 -13
  127. data/lib/roro/cli/base/utilities.rb +0 -39
  128. data/lib/roro/cli/cli.rb +0 -99
  129. data/lib/roro/cli/configuration.rb +0 -69
  130. data/lib/roro/cli/expose.rb +0 -14
  131. data/lib/roro/cli/generate/config.rb +0 -13
  132. data/lib/roro/cli/generate/config/rails.rb +0 -17
  133. data/lib/roro/cli/greenfield.rb +0 -31
  134. data/lib/roro/cli/obfuscate.rb +0 -19
  135. data/lib/roro/cli/rollon/stories/rails.rb +0 -1
  136. data/lib/roro/cli/rollon/stories/rails/database.rb +0 -33
  137. data/lib/roro/cli/rollon/stories/ruby_gem.rb +0 -77
  138. data/lib/roro/cli/rollon/stories/stories.rb +0 -3
  139. data/lib/roro/cli/roro_configurator.yml +0 -157
  140. data/lib/roro/cli/ruby_gem.rb +0 -67
  141. data/lib/roro/cli/templates/base/.roro_config.yml +0 -15
  142. data/lib/roro/cli/templates/base/Dockerfile.tt +0 -82
  143. data/lib/roro/cli/templates/greenfield/Dockerfile.tt +0 -43
  144. data/lib/roro/cli/templates/ruby_gem/.circleci/config.yml.tt +0 -40
  145. data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -1
  146. data/lib/roro/cli/templates/stories/rails/database/with_mysql/_service.yml +0 -10
  147. data/lib/roro/cli/templates/stories/rails/database/with_postgresql/_service.yml +0 -7
  148. data/lib/roro/cli/templates/stories/ruby_gem/with_ci_cd/_build.yml +0 -11
  149. data/lib/roro/cli/templates/stories/with_mysql/_service.yml +0 -10
  150. data/lib/roro/cli/templates/stories/with_postgresql/_service.yml +0 -7
  151. data/lib/tasks/deploy.rake +0 -126
  152. data/vendor/cache/actionpack-6.0.3.2.gem +0 -0
  153. data/vendor/cache/actionview-6.0.3.2.gem +0 -0
  154. data/vendor/cache/activesupport-6.0.3.2.gem +0 -0
  155. data/vendor/cache/addressable-2.7.0.gem +0 -0
  156. data/vendor/cache/builder-3.2.4.gem +0 -0
  157. data/vendor/cache/byebug-11.1.3.gem +0 -0
  158. data/vendor/cache/coderay-1.1.3.gem +0 -0
  159. data/vendor/cache/concurrent-ruby-1.1.7.gem +0 -0
  160. data/vendor/cache/crass-1.0.6.gem +0 -0
  161. data/vendor/cache/em-websocket-0.5.1.gem +0 -0
  162. data/vendor/cache/erubi-1.9.0.gem +0 -0
  163. data/vendor/cache/eventmachine-1.2.7.gem +0 -0
  164. data/vendor/cache/ffi-1.13.1.gem +0 -0
  165. data/vendor/cache/formatador-0.2.5.gem +0 -0
  166. data/vendor/cache/gem-release-2.1.1.gem +0 -0
  167. data/vendor/cache/given_core-3.8.0.gem +0 -0
  168. data/vendor/cache/guard-2.16.2.gem +0 -0
  169. data/vendor/cache/guard-compat-1.2.1.gem +0 -0
  170. data/vendor/cache/guard-livereload-2.5.2.gem +0 -0
  171. data/vendor/cache/guard-minitest-2.4.6.gem +0 -0
  172. data/vendor/cache/handsome_fencer-crypto-0.1.6.gem +0 -0
  173. data/vendor/cache/handsome_fencer-test-0.1.1.gem +0 -0
  174. data/vendor/cache/http_parser.rb-0.6.0.gem +0 -0
  175. data/vendor/cache/i18n-1.8.5.gem +0 -0
  176. data/vendor/cache/launchy-2.5.0.gem +0 -0
  177. data/vendor/cache/listen-3.2.1.gem +0 -0
  178. data/vendor/cache/loofah-2.6.0.gem +0 -0
  179. data/vendor/cache/lumberjack-1.2.7.gem +0 -0
  180. data/vendor/cache/method_source-1.0.0.gem +0 -0
  181. data/vendor/cache/mini_portile2-2.4.0.gem +0 -0
  182. data/vendor/cache/minitest-5.14.1.gem +0 -0
  183. data/vendor/cache/minitest-given-3.8.0.gem +0 -0
  184. data/vendor/cache/minitest-matchers_vaccine-1.0.4.gem +0 -0
  185. data/vendor/cache/minitest-rails-6.0.1.gem +0 -0
  186. data/vendor/cache/mocha-1.11.2.gem +0 -0
  187. data/vendor/cache/multi_json-1.15.0.gem +0 -0
  188. data/vendor/cache/nenv-0.3.0.gem +0 -0
  189. data/vendor/cache/net-scp-3.0.0.gem +0 -0
  190. data/vendor/cache/net-ssh-6.1.0.gem +0 -0
  191. data/vendor/cache/nokogiri-1.10.10.gem +0 -0
  192. data/vendor/cache/notiffany-0.1.3.gem +0 -0
  193. data/vendor/cache/os-1.0.0.gem +0 -0
  194. data/vendor/cache/pry-0.13.1.gem +0 -0
  195. data/vendor/cache/public_suffix-4.0.5.gem +0 -0
  196. data/vendor/cache/rack-2.2.3.gem +0 -0
  197. data/vendor/cache/rack-livereload-0.3.17.gem +0 -0
  198. data/vendor/cache/rack-test-1.1.0.gem +0 -0
  199. data/vendor/cache/rails-dom-testing-2.0.3.gem +0 -0
  200. data/vendor/cache/rails-html-sanitizer-1.3.0.gem +0 -0
  201. data/vendor/cache/railties-6.0.3.2.gem +0 -0
  202. data/vendor/cache/rake-13.0.1.gem +0 -0
  203. data/vendor/cache/rb-fsevent-0.10.4.gem +0 -0
  204. data/vendor/cache/rb-inotify-0.10.1.gem +0 -0
  205. data/vendor/cache/shellany-0.0.1.gem +0 -0
  206. data/vendor/cache/shoulda-4.0.0.gem +0 -0
  207. data/vendor/cache/shoulda-context-2.0.0.gem +0 -0
  208. data/vendor/cache/shoulda-matchers-4.3.0.gem +0 -0
  209. data/vendor/cache/sorcerer-2.0.1.gem +0 -0
  210. data/vendor/cache/sshkit-1.18.2.gem +0 -0
  211. data/vendor/cache/thor-1.0.1.gem +0 -0
  212. data/vendor/cache/thread_safe-0.3.6.gem +0 -0
  213. data/vendor/cache/tzinfo-1.2.7.gem +0 -0
  214. data/vendor/cache/zeitwerk-2.4.0.gem +0 -0
@@ -0,0 +1,73 @@
1
+ require "openssl"
2
+ require "base64"
3
+ module Roro::Crypto
4
+
5
+ class << self
6
+
7
+ def generate_key
8
+ @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
9
+ @salt = '8 octets'
10
+ @new_key = @cipher.random_key
11
+ Base64.encode64(@new_key)
12
+ end
13
+
14
+ def write_to_file(data, filename)
15
+ File.open(filename, "w") { |io| io.write data }
16
+ end
17
+
18
+ def generate_key_file(directory, environment)
19
+ write_to_file(generate_key, directory + "/" + environment + ".key")
20
+ end
21
+
22
+ def source_files(directory=nil, extension=nil)
23
+ Dir.glob(directory + "/**/*#{extension}")
24
+ end
25
+
26
+ def build_cipher(environment)
27
+ @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
28
+ @salt = '8 octets'
29
+ @pass_phrase = get_key(environment)
30
+ @cipher.encrypt.pkcs5_keyivgen @pass_phrase, @salt
31
+ end
32
+
33
+ def encrypt(file, environment=nil)
34
+ environment ||= file.split('.')[-2].split('/').last
35
+ build_cipher(environment)
36
+ encrypted = @cipher.update(File.read file) + @cipher.final
37
+ write_to_file(Base64.encode64(encrypted), file + '.enc')
38
+ end
39
+
40
+ def decrypt(file, environment=nil)
41
+ environment ||= file.split('.')[-3].split('/').last
42
+ build_cipher(environment)
43
+ encrypted = Base64.decode64 File.read(file)
44
+ @cipher.decrypt.pkcs5_keyivgen @pass_phrase, @salt
45
+ decrypted = @cipher.update(encrypted) + @cipher.final
46
+ decrypted_file = file.split('.enc').first
47
+ write_to_file decrypted, decrypted_file
48
+ end
49
+
50
+ def obfuscate(env=nil, dir=nil, ext=nil)
51
+ ext = ext || "#{env}.env"
52
+ source_files(dir, ext).each { |file| encrypt(file, env) }
53
+ end
54
+
55
+ def expose(env=nil, dir=nil, ext=nil)
56
+ ext = ext || "#{env}.env.enc"
57
+ source_files(dir, ext).each { |file| decrypt(file, env) }
58
+ end
59
+
60
+ def get_key(environment, directory=nil)
61
+ env_key = environment.upcase + '_KEY'
62
+ key_file = source_files('./.', "#{directory}/#{environment}.key").first
63
+ case
64
+ when ENV[env_key].nil? && key_file.nil?
65
+ raise DeployKeyError, "No #{env_key} set."
66
+ when ENV[env_key]
67
+ ENV[env_key]
68
+ when File.exist?(key_file)
69
+ File.read(key_file).strip
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1 @@
1
+ stories: rails
@@ -0,0 +1,9 @@
1
+ greenfield_actions:
2
+ - "@config.env['force'] = true"
3
+ - |
4
+ src = 'rails/Dockerfile.greenfield.tt'
5
+ dest = 'roro/containers/app/Dockerfile'
6
+ template src, dest, @config.env
7
+
8
+ greenfield_commands:
9
+ - system "DOCKER_BUILDKIT=1 docker build --file roro/containers/app/Dockerfile --output . ."
@@ -0,0 +1,42 @@
1
+ stories: rails
2
+
3
+ intentions:
4
+
5
+ env_vars:
6
+ main_app_name:
7
+ developer:
8
+ name: your-name
9
+ email: your.email@example.com
10
+ docker_email: your-docker-registry-email
11
+ docker_org: your-docker-registry-org-name
12
+ docker_password: your-docker-registry-password
13
+ docker_token: your-docker-registry-token
14
+ docker_username: your-docker-registry-user-name
15
+
16
+ choices:
17
+
18
+ generate_config_story:
19
+ question: |
20
+ Would you like to create a Roro Config file to help with debugging,
21
+ sharing your desired story, or both?
22
+ choices:
23
+ y: 'Yes'
24
+ n: 'No'
25
+ default: y
26
+
27
+ backup_existing_files:
28
+ question: |
29
+ RoRo will be generating a number of files, some of which will
30
+ replace existing ones. Would you like to back them up?
31
+ choices:
32
+ y: 'Yes'
33
+ n: 'No'
34
+ default: n
35
+
36
+ copy_dockerignore:
37
+ question: |
38
+ Would you like to create a .dockerignore file?
39
+ choices:
40
+ y: 'Yes'
41
+ n: 'No'
42
+ default: y
@@ -0,0 +1,76 @@
1
+ stories:
2
+ - database
3
+ - ci_cd
4
+ - kubernetes
5
+
6
+ actions:
7
+ - template 'rails/.circleci/config.yml.tt', './.circleci/config.yml'
8
+ - template 'rails/docker-compose.yml.tt', './docker-compose.yml', @config.env
9
+ - template 'base/dotenv', './.env', @config.env
10
+ - directory 'rails/roro', './roro', @config.env
11
+ - chmod "roro/docker-entrypoint.sh", 0755
12
+
13
+
14
+ startup:
15
+ success: "Your app should be available at http://localhost:3000"
16
+ commands:
17
+ - docker-compose build --no-cache
18
+ - docker-compose up -d
19
+ - docker-compose run app bin/rails db:create
20
+ - docker-compose run app bin/rails db:migrate
21
+ - 'docker-compose run app echo #{success_msg}'
22
+
23
+ env_vars:
24
+ ruby_version: '2.7'
25
+ database_host: database
26
+ frontend_service: frontend
27
+ database_service: database
28
+
29
+ choices:
30
+ config_std_out_true:
31
+ question: |
32
+ The team at Heroku, among others, recommend logging to STDOUT
33
+ and treating your logs as streams. We'll set this to
34
+ true as an environment variable but it may also be helpful
35
+ to configure './config/boot.rb' with '$stdout.sync = true'
36
+ just in case that doesn't work.
37
+ Would you like to configure this?
38
+ choices:
39
+ y: 'Yes'
40
+ n: 'No'
41
+ default: y
42
+
43
+ insert_roro_gem_into_gemfile:
44
+ question: |
45
+ Many developers believe it's good idea to secure sensitive
46
+ environment files and variables. You can use RoRo to
47
+ generate secret keys known only to you for use in any
48
+ environment, and then use them to encrypt and decrypt
49
+ these files. Would you like to add RoRo to your Gemfile?
50
+ choices:
51
+ y: 'Yes'
52
+ n: 'No'
53
+ default: n
54
+
55
+ gitignore_sensitive_files:
56
+ question: |
57
+ If you plan to use the environment files RoRo generates for
58
+ your own environment variables, it's a good idea to keep
59
+ these files out of source control. Would you like RoRo to
60
+ modify your .gitignore file to accomplish this for you ?
61
+ choices:
62
+ y: 'Yes'
63
+ n: 'No'
64
+ default: y
65
+
66
+ insert_hfci_gem_into_gemfile:
67
+ question: |
68
+ Jim Weirich passed too soon and remains missed. In addition
69
+ to Rake, Jim wrote a beautiful gem called 'Given' that makes
70
+ Rspec and Minitest less ugly and thus your tests more easy to
71
+ write. Would you like to install a gem called
72
+ handsome_fencer-test that allows you to try it out?
73
+ choices:
74
+ y: 'Yes'
75
+ n: 'No'
76
+ default: n
@@ -0,0 +1 @@
1
+ stories: circleci
@@ -0,0 +1,2 @@
1
+ env_vars:
2
+ deploy_tag: "${CIRCLE_SHA1:0:7}"
@@ -0,0 +1,9 @@
1
+ stories: postgresql
2
+
3
+ actions:
4
+ - |
5
+ Roro::CLI.roro_environments.each do |environment|
6
+ src = 'rails/dotenv/web.env.tt'
7
+ dest = "roro/containers/app/#{environment}.env"
8
+ template src, dest, @config.env
9
+ end
@@ -0,0 +1,17 @@
1
+ env_vars:
2
+ mysql_root_password: 'root-mysql-password'
3
+ mysql_password: your-mysql-password
4
+ mysql_username: 'root'
5
+ mysql_database_port: '3306'
6
+ database_vendor: mysql
7
+
8
+ actions:
9
+ - copy_file 'rails/config/database.mysql.yml', 'config/database.yml', @config.env
10
+ - |
11
+ Roro::CLI.roro_environments.each do |e|
12
+ @config.env[:rails_env] = e
13
+ source = 'rails/dotenv/database.mysql.env.tt'
14
+ target = "roro/containers/database/#{e}.env"
15
+ template( source, target, @config.env)
16
+ end
17
+
@@ -0,0 +1,15 @@
1
+ env_vars:
2
+ postgres_username: postgres
3
+ postgres_password: your-postgres-password
4
+ database_vendor: postgresql
5
+
6
+ actions:
7
+ - copy_file 'rails/config/database.pg.yml', 'config/database.yml', @config.env
8
+ - |
9
+ Roro::CLI.roro_environments.each do |e|
10
+ @config.env[:rails_env] = e
11
+ source = 'rails/dotenv/database.pg.env.tt'
12
+ target = "roro/containers/database/#{e}.env"
13
+ template( source, target, @config.env)
14
+ end
15
+
@@ -0,0 +1 @@
1
+ stories: postgresql
@@ -0,0 +1,10 @@
1
+ stories:
2
+ - default
3
+ - edge
4
+
5
+ actions:
6
+ - template 'rails/.circleci/config.yml.tt', './.circleci/config.yml'
7
+ - template 'rails/docker-compose.yml.tt', './docker-compose.yml', @config.env
8
+ - template 'base/dotenv', './.env', @config.env
9
+ - directory 'rails/roro', './roro', @config.env
10
+ - template 'rails/kube.rake.tt', './lib/tasks/kube.rake', @config.env
@@ -0,0 +1,5 @@
1
+ story:
2
+ ci_cd: circleci
3
+ env_vars:
4
+ ruby_version: '2.7'
5
+
@@ -0,0 +1,8 @@
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
@@ -0,0 +1,31 @@
1
+ commands:
2
+ setup-docker-builds:
3
+ steps:
4
+ - setup_remote_docker:
5
+ docker_layer_caching: false
6
+
7
+ source-ci-vars:
8
+ steps:
9
+ - run: |
10
+ echo 'source roro/containers/app/ci.env' >> ${BASH_ENV}
11
+ source ${BASH_ENV}
12
+
13
+ attach-roro:
14
+ steps:
15
+ - attach_workspace:
16
+ at: workspace
17
+ - run: cp -rf workspace/roro .
18
+ - source-ci-vars
19
+
20
+ tag-and-push:
21
+ parameters:
22
+ deploy_tag:
23
+ type: string
24
+ default: latest
25
+ steps:
26
+ - run: |
27
+ SOURCE=$(docker images | grep project_app | awk '{ print $3 }')
28
+ DOCKER_REPO=${DOCKER_ORG}/${APP_NAME}_app
29
+ TAGGED_IMAGE=${DOCKER_REPO}:<< parameters.deploy_tag >>
30
+ docker tag ${SOURCE} ${TAGGED_IMAGE}
31
+ docker push ${TAGGED_IMAGE}
@@ -0,0 +1,5 @@
1
+ defaults: &defaults
2
+ executor: machine-layer-caching
3
+ working_directory: ~/project
4
+ environment:
5
+ RORO_ENV: ci
@@ -0,0 +1,11 @@
1
+ executors:
2
+ machine-layer-caching:
3
+ machine:
4
+ image: circleci/classic:latest
5
+ docker_layer_caching: true
6
+ machine-executor:
7
+ machine:
8
+ image: circleci/classic:latest
9
+ ruby-executor:
10
+ docker:
11
+ - image: cimg/ruby:2.7
@@ -0,0 +1,4 @@
1
+ major_only: &major_only
2
+ filters:
3
+ branches:
4
+ only: master
@@ -0,0 +1 @@
1
+ version: 2.1
@@ -0,0 +1,2 @@
1
+ workflows:
2
+ version: 2
@@ -0,0 +1,33 @@
1
+ defaults: &defaults
2
+ working_directory: /tmp
3
+
4
+ version: 2
5
+
6
+ jobs:
7
+
8
+ build:
9
+ machine: true
10
+ steps:
11
+ - checkout
12
+ - add_ssh_keys
13
+
14
+ - run: gem install handsome_fencer-circle_c_i
15
+ - run: handsome_fencer-circle_c_i expose circleci
16
+ - run: handsome_fencer-circle_c_i expose development
17
+ - run: echo 'source docker/env_files/circleci.env' >> $BASH_ENV
18
+ - run: docker-compose build
19
+ - run: docker-compose up -d
20
+ - run: docker-compose exec app bin/rails db:create db:migrate
21
+ - run: docker login -u $docker_USER -p $DOCKER_PASS
22
+ - run:
23
+ name: Tag app image
24
+ command: docker tag $(docker images | grep project_app | awk '{ print $3 }') ${DOCKER_ORG_NAME}/${APP_NAME}_app:$DEPLOY_TAG
25
+ - run:
26
+ name: Tag web image
27
+ command: docker tag $(docker images | grep project_web | awk '{ print $3 }') ${DOCKER_ORG_NAME}/${APP_NAME}_web:$DEPLOY_TAG
28
+
29
+
30
+ - run: docker push ${DOCKER_ORG_NAME}/${APP_NAME}_app:$DEPLOY_TAG
31
+ - run: docker push ${DOCKER_ORG_NAME}/${APP_NAME}_web:$DEPLOY_TAG
32
+
33
+ - run: rake --rakefile .circleci/Rakefile
@@ -0,0 +1,4 @@
1
+ build:
2
+ machine: true
3
+ steps:
4
+ - checkout
@@ -0,0 +1,12 @@
1
+ release:
2
+ machine: true
3
+ steps:
4
+ - checkout
5
+ - run: gem install roro
6
+ - run: roro generate::exposed ci
7
+ - run: echo 'source roro/containers/ruby_image/ci.env' >> $BASH_ENV
8
+ - run: chmod +x ./.circleci/setup-gem-credentials.sh
9
+ - run: ./.circleci/setup-gem-credentials.sh
10
+ - run: cat ~/.gem/credentials
11
+ - run: git checkout .
12
+ - run: gem release
@@ -0,0 +1,10 @@
1
+ build-release:
2
+ jobs:
3
+ - build
4
+ - test
5
+ - release:
6
+ requires:
7
+ - build
8
+ filters:
9
+ branches:
10
+ only: release
@@ -0,0 +1 @@
1
+ RORO_ENV=development