roro 0.3.7 → 0.3.14

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 (63) hide show
  1. checksums.yaml +5 -5
  2. data/{lib/roro/cli/templates/dockerize → .circleci}/.keep +0 -0
  3. data/.circleci/config.yml +67 -0
  4. data/{lib/roro/cli/templates/ruby_gem → .circleci}/setup-gem-credentials.sh +1 -1
  5. data/.gitignore +2 -2
  6. data/Guardfile +2 -2
  7. data/docker-compose.yml +15 -0
  8. data/lib/roro/cli.rb +69 -3
  9. data/lib/roro/cli/cli.rb +99 -0
  10. data/lib/roro/cli/configuration.rb +1 -0
  11. data/lib/roro/cli/expose.rb +8 -7
  12. data/lib/roro/cli/generate/config.rb +5 -5
  13. data/lib/roro/cli/generate/generate_keys.rb +9 -25
  14. data/lib/roro/cli/greenfield.rb +10 -21
  15. data/lib/roro/cli/obfuscate.rb +10 -10
  16. data/lib/roro/cli/rollon.rb +2 -2
  17. data/lib/roro/cli/rollon/stories.rb +2 -3
  18. data/lib/roro/cli/{templates/ruby_gem/docker/env_files/.keep → rollon/stories/database.rb} +0 -0
  19. data/lib/roro/cli/rollon/stories/rails.rb +1 -0
  20. data/lib/roro/cli/{templates/ruby_gem/docker/keys → rollon/stories/rails}/.keep +0 -0
  21. data/lib/roro/cli/rollon/{database → stories/rails}/database.rb +2 -0
  22. data/lib/roro/cli/rollon/{database → stories/rails/database}/with_mysql.rb +0 -0
  23. data/lib/roro/cli/rollon/{database/with_postgres.rb → stories/rails/database/with_postgresql.rb} +0 -0
  24. data/lib/roro/cli/rollon/stories/ruby_gem.rb +77 -0
  25. data/lib/roro/cli/rollon/stories/ruby_gem/with_ci_cd.rb +45 -0
  26. data/lib/roro/cli/rollon/stories/stories.rb +3 -0
  27. data/lib/roro/cli/ruby_gem.rb +60 -47
  28. data/lib/roro/cli/templates/base/.dockerignore +2 -2
  29. data/lib/roro/cli/templates/base/Dockerfile.tt +53 -15
  30. data/lib/roro/cli/templates/greenfield/Dockerfile.tt +1 -1
  31. data/lib/roro/cli/templates/roro/docker-compose.yml.tt +2 -3
  32. data/{tmp/.gitkeep → lib/roro/cli/templates/ruby_gem/.circleci/.keep} +0 -0
  33. data/lib/roro/cli/templates/ruby_gem/.circleci/config.yml.tt +40 -0
  34. data/lib/roro/cli/templates/ruby_gem/.circleci/setup-gem-credentials.sh +3 -0
  35. data/lib/roro/cli/templates/ruby_gem/docker-compose.yml +10 -4
  36. data/lib/roro/cli/templates/ruby_gem/roro/containers/.keep +0 -0
  37. data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +16 -0
  38. data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +1 -0
  39. data/lib/roro/cli/templates/ruby_gem/roro/keys/.keep +0 -0
  40. data/lib/roro/cli/templates/stories/rails/database/with_mysql/_service.yml +10 -0
  41. data/lib/roro/cli/templates/stories/rails/database/with_postgresql/.keep +0 -0
  42. data/lib/roro/cli/templates/stories/rails/database/with_postgresql/_service.yml +7 -0
  43. data/lib/roro/cli/templates/stories/ruby_gem/with_ci_cd/_build.yml +11 -0
  44. data/lib/roro/version.rb +1 -1
  45. data/roro.gemspec +3 -3
  46. data/roro/containers/.keep +0 -0
  47. data/roro/containers/ruby_image/Dockerfile +16 -0
  48. data/roro/containers/ruby_image/ci.env.enc +2 -0
  49. data/roro/keys/.keep +0 -0
  50. data/tmp/.keep +0 -0
  51. data/vendor/cache/gem-release-2.1.1.gem +0 -0
  52. metadata +57 -34
  53. data/lib/roro/cli/templates/circleci/config.yml.tt +0 -70
  54. data/lib/roro/cli/templates/dockerize/Dockerfile.tt +0 -23
  55. data/lib/roro/cli/templates/dockerize/docker-compose.yml.tt +0 -60
  56. data/lib/roro/cli/templates/dockerize/docker-entrypoint.sh +0 -9
  57. data/lib/roro/cli/templates/quickstart/Dockerfile.tt +0 -20
  58. data/lib/roro/cli/templates/quickstart/database.yml +0 -85
  59. data/lib/roro/cli/templates/quickstart/docker-compose.yml +0 -17
  60. data/lib/roro/cli/templates/quickstart/entrypoint.sh +0 -8
  61. data/lib/roro/cli/templates/ruby_gem/.gitignore +0 -8
  62. data/lib/roro/cli/templates/ruby_gem/config.yml +0 -122
  63. data/lib/roro/cli/templates/ruby_gem/docker/containers/app/Dockerfile.tt +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 4ec8ef8f72b6fd4ff28b8d74e1a6b85a7dc17d62af0b4e8c9f78948c51533dd4
4
- data.tar.gz: 8583287621045a0cf864d82728480ce4a80fd814bbe99112948f13327c10ce0d
2
+ SHA1:
3
+ metadata.gz: 23af0aef63d401cf4307914b6900fca6c65204b7
4
+ data.tar.gz: c5ec5625d41f98dcf412e8d80f636a45c8dcde31
5
5
  SHA512:
6
- metadata.gz: 444be7de23db2d83ac72cc0520386c05b4b029667469d96d17cafc39c27fae94bf26168fae05b13fc8c8d64b1160b7f1201d62b1acabede65e667d312e2f6e09
7
- data.tar.gz: 9f05dcdf81371ef94275b5b262380d5ad360edcc745e61fe7b8ec99d913b7c4d69374ddeb0770362dd5133fe35abfab813f9817688cd730d3659e813bd5cf4c3
6
+ metadata.gz: 868731a885948198f1a876b554ff538abed022794b03c51c87f5906b817290c487f26e0f5e472315ae3462a90a42b11240de005d5b11581d728567e3153b543d
7
+ data.tar.gz: b1fcbe257489a6c0ef5d00054d9a18e7c8e98fdd4ce9aa81f88a838aaab163448be4e40996d47a12ae1724b5fa4a206e6536f518f934f7edf636748e53d209f5
@@ -0,0 +1,67 @@
1
+ version: 2.1
2
+
3
+ jobs:
4
+
5
+ build:
6
+ machine: true
7
+ steps:
8
+ - checkout
9
+
10
+ test-cli:
11
+ machine: true
12
+ steps:
13
+ - checkout
14
+ - run: gem install --local pkg/roro-0.3.12.gem
15
+ - run: roro greenfield --force
16
+
17
+
18
+ test:
19
+ machine: true
20
+ steps:
21
+ - checkout
22
+ - run: RUBY_VERSION=2.5 docker-compose build ruby_gem
23
+ - run: RUBY_VERSION=2.5 docker-compose up -d --force-recreate ruby_gem
24
+ - run: RUBY_VERSION=2.5 docker-compose run ruby_gem bundle exec rake test
25
+ - run: RUBY_VERSION=2.6 docker-compose build ruby_gem
26
+ - run: RUBY_VERSION=2.6 docker-compose up -d --force-recreate ruby_gem
27
+ - run: RUBY_VERSION=2.6 docker-compose run ruby_gem bundle exec rake test
28
+ - run: RUBY_VERSION=2.7 docker-compose build ruby_gem
29
+ - run: RUBY_VERSION=2.7 docker-compose up -d --force-recreate ruby_gem
30
+ - run: RUBY_VERSION=2.7 docker-compose run ruby_gem bundle exec rake test
31
+
32
+ release:
33
+ machine: true
34
+ steps:
35
+ - checkout
36
+ - run: gem install roro
37
+ - run: roro generate::exposed ci
38
+ - run: |
39
+ echo $(cat ./roro/containers/ruby_image/ci.env) >> $BASH_ENV
40
+ source $BASH_ENV
41
+ - run: chmod +x ./.circleci/setup-gem-credentials.sh
42
+ - run: ./.circleci/setup-gem-credentials.sh
43
+ - run: chmod 0600 ~/.gem/credentials
44
+ - run: git checkout .
45
+ - run: gem release
46
+
47
+ workflows:
48
+ version: 2
49
+
50
+ build-release:
51
+ jobs:
52
+ - build
53
+ - test-cli:
54
+ filters:
55
+ branches:
56
+ only: development
57
+ - test:
58
+ filters:
59
+ branches:
60
+ only: master
61
+
62
+ - release:
63
+ requires:
64
+ - build
65
+ filters:
66
+ branches:
67
+ only: release
@@ -1,3 +1,3 @@
1
1
  mkdir ~/.gem
2
2
  echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
3
- chmod 0600 /home/circleci/.gem/credentials
3
+ chmod 0600 /home/circleci/.gem/credentials
data/.gitignore CHANGED
@@ -13,10 +13,10 @@ roro/**/*.key
13
13
 
14
14
  *.key
15
15
  *.env
16
+ !/.gitignore
16
17
 
17
18
  tmp/*
18
- tmp/*
19
- !tmp/.gitkeep
19
+ !tmp/.keep
20
20
  sandbox/*
21
21
  !sandbox/.keep
22
22
  !sandbox/greenfield
data/Guardfile CHANGED
@@ -4,14 +4,14 @@
4
4
  options = {
5
5
  cli: '-f',
6
6
  all_on_start: true,
7
- all_after_pass: false
7
+ all_after_pass: true
8
8
  }
9
9
 
10
10
  guard :minitest, options do
11
11
 
12
12
  watch(%r{^test/(.*)\/?test_(.*)\.rb$})
13
13
  watch(%r{^test/(.*)\/?(.*)_test\.rb$})
14
- watch(%r{^lib/roro/cli/(.+)\.rb$}) { |m| "test/cli/#{m[1]}_test.rb" }
14
+ watch(%r{^lib/roro/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
15
15
  watch(%r{^test/thor_helper\.rb$}) { 'test' }
16
16
  watch(%r{^test/fixtures/files/(.*/)?([^/]+)\.yml$}) { 'test' }
17
17
  end
@@ -0,0 +1,15 @@
1
+ version: '3.2'
2
+
3
+ services:
4
+
5
+ ruby_gem:
6
+ build:
7
+ context: .
8
+ dockerfile: roro/containers/ruby_image/Dockerfile
9
+ environment:
10
+ - RUBY_VERSION=${RUBY_VERSION}
11
+ volumes:
12
+ - gem_cache:/gems
13
+
14
+ volumes:
15
+ gem_cache:
@@ -1,15 +1,13 @@
1
- require 'thor'
2
1
  require 'roro/cli/base/base'
3
- require 'roro/cli/rollon'
4
2
  require 'roro/cli/greenfield'
5
3
  require 'roro/cli/obfuscate'
6
4
  require 'roro/cli/expose'
7
- require 'roro/cli/ruby_gem'
8
5
  require 'roro/cli/generate/config/rails'
9
6
  require 'roro/cli/generate/config'
10
7
  require 'roro/cli/generate/generate_keys'
11
8
  require 'roro/cli/configuration'
12
9
 
10
+ require 'roro/cli/rollon'
13
11
  module Roro
14
12
 
15
13
  class CLI < Thor
@@ -19,5 +17,73 @@ module Roro
19
17
  def self.source_root
20
18
  File.dirname(__FILE__) + '/cli/templates'
21
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)
51
+ end
52
+
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
80
+ end
81
+
82
+ desc "generate::obfuscated", "obfuscates any files matching the pattern ./roro/**/*.env"
83
+ map "generate::obfuscated" => "generate_obfuscated"
84
+
85
+ def generate_obfuscated(*args)
86
+ obfuscate(*args)
87
+ end
22
88
  end
23
89
  end
@@ -0,0 +1,99 @@
1
+ require 'thor'
2
+ require 'roro/cli/base/base'
3
+ require 'roro/cli/rollon/stories'
4
+ require 'roro/cli/rollon'
5
+ require 'roro/cli/greenfield'
6
+ require 'roro/cli/obfuscate'
7
+ require 'roro/cli/expose'
8
+ require 'roro/cli/ruby_gem'
9
+ require 'roro/cli/generate/config/rails'
10
+ require 'roro/cli/generate/config'
11
+ require 'roro/cli/generate/generate_keys'
12
+ require 'roro/cli/configuration'
13
+
14
+ module Roro
15
+
16
+ class CLI < Thor
17
+
18
+ include Thor::Actions
19
+
20
+ def self.source_root
21
+ File.dirname(__FILE__) + '/cli/templates'
22
+ end
23
+
24
+ desc "rollon::ruby_gem", "Generate files for containerized gem testing, CircleCI, and releasing to RubyGems."
25
+ method_option :rubies, type: :array, banner: "2.5.3 2.4.2"
26
+ map "rollon::ruby_gem" => "rollon_ruby_gem"
27
+
28
+ def rollon_ruby_gem(*args)
29
+ ruby_gem(*args)
30
+ end
31
+
32
+ desc "rollon::rails", "Generates files for and makes changes to your app
33
+ so it can run using Docker containers."
34
+ method_option :interactive, desc: "Set up your environment variables as
35
+ you go."
36
+ map "rollon::rails" => "rollon_rails"
37
+
38
+ def rollon_rails
39
+ rollon
40
+ end
41
+
42
+
43
+ desc "greenfield::rails", "Greenfield a new, dockerized rails app with
44
+ either MySQL or PostgreSQL in a separate container."
45
+
46
+ method_option :env_vars, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "key1:value1 key2:value2"
47
+ method_option :interactive, desc: "Set up your environment variables as you go."
48
+ method_option :force, desc: "force over-write of existing files"
49
+
50
+ map "greenfield::rails" => "greenfield_rails"
51
+
52
+ def greenfield_rails(*args)
53
+ greenfield(*args)
54
+ end
55
+ desc "generate::exposed", "Generate private .env files from
56
+ encrypted .env.enc files inside the roro directory."
57
+ map "generate::exposed" => "generate_exposed"
58
+
59
+ def generate_exposed(*args)
60
+ expose(*args)
61
+ end
62
+
63
+ desc "generate::key", "Generate a key inside roro/keys. Takes the name of
64
+ an environment as an argument to private .env files from
65
+ encrypted .env.enc files inside the roro directory.
66
+ Expose encrypted files"
67
+
68
+ map "generate::key" => "generate_key"
69
+ method_option :environment, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "development, staging"
70
+
71
+ def generate_key(*args)
72
+ generate_key_or_keys(*args)
73
+ end
74
+
75
+ desc "generate::keys", "Generate keys for each environment inside roro/keys.
76
+ If you have .env files like 'roro/containers/app/[staging_env].env' and
77
+ 'roro/[circle_ci_env].env' it will generate '/roro/keys/[staging_env].key'
78
+ and '/roro/keys/[circle_ci_env].key'."
79
+ map "generate::keys" => "generate_keys"
80
+
81
+ def generate_keys(*args)
82
+ generate_key(*args)
83
+ end
84
+
85
+ desc "generate::config", "Generate a config file at .roro_config.yml"
86
+ map "generate::config" => "generate_config"
87
+
88
+ def generate_config
89
+ create_file ".roro_config.yml", @config.app.to_yaml
90
+ end
91
+
92
+ desc "generate::obfuscated", "obfuscates any files matching the pattern ./roro/**/*.env"
93
+ map "generate::obfuscated" => "generate_obfuscated"
94
+
95
+ def generate_obfuscated(*args)
96
+ obfuscate(*args)
97
+ end
98
+ end
99
+ end
@@ -1,3 +1,4 @@
1
+ require 'yaml'
1
2
  module Roro
2
3
  class Configuration < Thor
3
4
 
@@ -1,13 +1,14 @@
1
1
  module Roro
2
2
  class CLI < Thor
3
+
4
+ no_commands do
3
5
 
4
- desc "expose", "Expose encrypted files"
5
-
6
- def expose(*args)
7
- environments = args.first ? [args.first] : gather_environments
8
- environments.each do |environment|
9
- HandsomeFencer::Crypto.expose(environment, 'roro')
6
+ def expose(*args)
7
+ environments = args.first ? [args.first] : gather_environments
8
+ environments.each do |environment|
9
+ HandsomeFencer::Crypto.expose(environment, 'roro')
10
+ end
10
11
  end
11
12
  end
12
13
  end
13
- end
14
+ end
@@ -2,12 +2,12 @@ module Roro
2
2
  class CLI < Thor
3
3
  include Thor::Actions
4
4
 
5
- desc "generate::config::roro", "Generates a config file at .roro_config.yml"
6
- map "generate::config::roro" => "generate_roro_config"
5
+ # desc "generate::config::roro", "Generate a config file at .roro_config.yml"
6
+ # map "generate::config::roro" => "generate_roro_config"
7
7
 
8
8
 
9
- def generate_roro_config
10
- create_file ".roro_config.yml", @config.app.to_yaml
11
- end
9
+ # def generate_roro_config
10
+ # create_file ".roro_config.yml", @config.app.to_yaml
11
+ # end
12
12
  end
13
13
  end
@@ -1,33 +1,17 @@
1
- require 'openssl'
2
- require 'base64'
3
- require 'handsome_fencer/crypto'
4
-
5
1
  module Roro
6
2
 
7
3
  class CLI < Thor
4
+
5
+ no_commands do
8
6
 
9
- include Thor::Actions
10
- include HandsomeFencer::Crypto
11
-
12
- desc "generate_keys", "Generates keys for all environments. If you have .env files like './**/production.env' and './**/staging.env' this command assumes you need keys for the production and staging environments, and will generate them for you."
13
-
14
- def generate_keys
15
- generate_key
16
- end
17
-
18
- desc "generate_key", "Generate a key for each environment"
19
- method_option :environment, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "development, staging"
20
-
21
- def generate_key(*args)
22
- environments = args.first ? [args.first] : gather_environments
23
- environments.each do |environment|
24
-
25
- confirm_files_decrypted?(environment)
26
- create_file "roro/keys/#{environment}.key", encoded_key
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
27
14
  end
28
- end
29
-
30
- no_commands do
31
15
 
32
16
  def encoded_key
33
17
  @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
@@ -1,28 +1,17 @@
1
- require 'os'
2
-
3
1
  module Roro
4
2
 
5
3
  class CLI < Thor
6
-
7
- include Thor::Actions
8
-
9
- desc "greenfield", "Greenfield a brand new rails app using Docker's instructions"
10
-
11
- method_option :env_vars, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "key1:value1 key2:value2"
12
- method_option :interactive, desc: "Set up your environment variables as you go."
13
- method_option :force, desc: "force over-write of existing files"
14
-
15
-
16
- def greenfield
17
- confirm_directory_empty
18
- confirm_dependencies
19
- remove_roro_artifacts
20
- configure_for_greenfielding
21
- copy_greenfield_files
22
- run_greenfield_commands
23
- end
24
-
4
+
25
5
  no_commands do
6
+
7
+ def greenfield
8
+ confirm_directory_empty
9
+ confirm_dependencies
10
+ remove_roro_artifacts
11
+ configure_for_greenfielding
12
+ copy_greenfield_files
13
+ run_greenfield_commands
14
+ end
26
15
 
27
16
  def configure_for_greenfielding
28
17
  @config ||= Roro::Configuration.new(options)