roro 0.3.6 → 0.3.13
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.
- checksums.yaml +5 -5
- data/{lib/roro/cli/templates/dockerize/.env → .circleci}/.keep +0 -0
- data/.circleci/config.yml +55 -0
- data/{lib/roro/cli/templates/ruby_gem → .circleci}/setup-gem-credentials.sh +1 -1
- data/.gitignore +13 -3
- data/Guardfile +2 -12
- data/docker-compose.yml +15 -0
- data/lib/roro.rb +0 -1
- data/lib/roro/cli.rb +70 -4
- data/lib/roro/cli/cli.rb +99 -0
- data/lib/roro/cli/configuration.rb +1 -0
- data/lib/roro/cli/expose.rb +8 -7
- data/lib/roro/cli/generate/config.rb +5 -5
- data/lib/roro/cli/generate/generate_keys.rb +47 -79
- data/lib/roro/cli/greenfield.rb +11 -21
- data/lib/roro/cli/obfuscate.rb +10 -11
- data/lib/roro/cli/rollon.rb +2 -2
- data/lib/roro/cli/rollon/stories.rb +2 -3
- data/lib/roro/cli/{templates/dockerize/.env/development/.keep → rollon/stories/database.rb} +0 -0
- data/lib/roro/cli/rollon/stories/rails.rb +1 -0
- data/lib/roro/cli/{templates/dockerize → rollon/stories/rails}/.keep +0 -0
- data/lib/roro/cli/rollon/{database → stories/rails}/database.rb +2 -0
- data/lib/roro/cli/rollon/{database → stories/rails/database}/with_mysql.rb +0 -0
- data/lib/roro/cli/rollon/{database/with_postgres.rb → stories/rails/database/with_postgresql.rb} +0 -0
- data/lib/roro/cli/rollon/stories/ruby_gem.rb +77 -0
- data/lib/roro/cli/rollon/stories/ruby_gem/with_ci_cd.rb +45 -0
- data/lib/roro/cli/rollon/stories/stories.rb +3 -0
- data/lib/roro/cli/ruby_gem.rb +60 -47
- data/lib/roro/cli/templates/base/.dockerignore +2 -2
- data/lib/roro/cli/templates/base/.env/database.mysql.env.tt +0 -1
- data/lib/roro/cli/templates/base/.env/database.pg.env.tt +0 -1
- data/lib/roro/cli/templates/base/.env/web.env.tt +1 -0
- data/lib/roro/cli/templates/base/Dockerfile.tt +53 -15
- data/lib/roro/cli/templates/greenfield/Dockerfile.tt +1 -1
- data/lib/roro/cli/templates/ruby_gem/{docker/env_files → .circleci}/.keep +0 -0
- data/lib/roro/cli/templates/ruby_gem/.circleci/config.yml.tt +40 -0
- data/lib/roro/cli/templates/ruby_gem/.circleci/setup-gem-credentials.sh +3 -0
- data/lib/roro/cli/templates/ruby_gem/docker-compose.yml +10 -4
- data/lib/roro/cli/templates/ruby_gem/{docker/keys → roro/containers}/.keep +0 -0
- data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +16 -0
- data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +1 -0
- data/lib/roro/cli/templates/ruby_gem/roro/keys/.keep +0 -0
- data/lib/roro/cli/templates/stories/rails/database/with_mysql/_service.yml +10 -0
- data/lib/roro/cli/templates/stories/rails/database/with_postgresql/.keep +0 -0
- data/lib/roro/cli/templates/stories/rails/database/with_postgresql/_service.yml +7 -0
- data/lib/roro/cli/templates/stories/ruby_gem/with_ci_cd/_build.yml +11 -0
- data/lib/roro/version.rb +1 -1
- data/roro.gemspec +3 -3
- data/roro/containers/.keep +0 -0
- data/roro/containers/ruby_image/Dockerfile +16 -0
- data/roro/containers/ruby_image/ci.env.enc +2 -0
- data/roro/keys/.keep +0 -0
- data/sandbox/.keep +0 -0
- data/tmp/.keep +0 -0
- data/vendor/cache/concurrent-ruby-1.1.7.gem +0 -0
- data/vendor/cache/gem-release-2.1.1.gem +0 -0
- metadata +59 -35
- data/lib/roro/cli/generate_keys.rb +0 -79
- data/lib/roro/cli/templates/circleci/config.yml.tt +0 -70
- data/lib/roro/cli/templates/dockerize/.env/development/database +0 -3
- data/lib/roro/cli/templates/dockerize/.env/development/web +0 -1
- data/lib/roro/cli/templates/dockerize/Dockerfile.tt +0 -23
- data/lib/roro/cli/templates/dockerize/docker-compose.yml.tt +0 -60
- data/lib/roro/cli/templates/dockerize/docker-entrypoint.sh +0 -9
- data/lib/roro/cli/templates/quickstart/Dockerfile.tt +0 -20
- data/lib/roro/cli/templates/quickstart/database.yml +0 -85
- data/lib/roro/cli/templates/quickstart/docker-compose.yml +0 -17
- data/lib/roro/cli/templates/quickstart/entrypoint.sh +0 -8
- data/lib/roro/cli/templates/ruby_gem/.gitignore +0 -8
- data/lib/roro/cli/templates/ruby_gem/config.yml +0 -122
- data/lib/roro/cli/templates/ruby_gem/docker/containers/app/Dockerfile.tt +0 -10
- data/vendor/cache/concurrent-ruby-1.1.6.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6b8dac88c95d43a7e4531d2b44849f30e1e37c9e
|
4
|
+
data.tar.gz: 20af42166d1cc70f7b20d327d8cbc8027255cc6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c05e7ff871bcfb14a52602ef71b3a331113ff87da423cca594fb07b41fb5463a432809e0526b8ca77987fb6838829c5ccacfc6e85e1823bf92d6d66a5c1bc3f9
|
7
|
+
data.tar.gz: db4039537980f16d922c0f08add246f66d1229b3055e0cfc0880f5bbdd968eca374d142639fb09d1b4d3d6246efac5dbe381239f516170e065ef3e72ab400366
|
File without changes
|
@@ -0,0 +1,55 @@
|
|
1
|
+
version: 2.1
|
2
|
+
|
3
|
+
jobs:
|
4
|
+
|
5
|
+
build:
|
6
|
+
machine: true
|
7
|
+
steps:
|
8
|
+
- checkout
|
9
|
+
|
10
|
+
test:
|
11
|
+
machine: true
|
12
|
+
steps:
|
13
|
+
- checkout
|
14
|
+
- run: RUBY_VERSION=2.5 docker-compose build ruby_gem
|
15
|
+
- run: RUBY_VERSION=2.5 docker-compose up -d --force-recreate ruby_gem
|
16
|
+
- run: RUBY_VERSION=2.5 docker-compose run ruby_gem bundle exec rake test
|
17
|
+
- run: RUBY_VERSION=2.6 docker-compose build ruby_gem
|
18
|
+
- run: RUBY_VERSION=2.6 docker-compose up -d --force-recreate ruby_gem
|
19
|
+
- run: RUBY_VERSION=2.6 docker-compose run ruby_gem bundle exec rake test
|
20
|
+
- run: RUBY_VERSION=2.7 docker-compose build ruby_gem
|
21
|
+
- run: RUBY_VERSION=2.7 docker-compose up -d --force-recreate ruby_gem
|
22
|
+
- run: RUBY_VERSION=2.7 docker-compose run ruby_gem bundle exec rake test
|
23
|
+
|
24
|
+
release:
|
25
|
+
machine: true
|
26
|
+
steps:
|
27
|
+
- checkout
|
28
|
+
- run: gem install roro
|
29
|
+
- run: roro generate::exposed ci
|
30
|
+
- run: |
|
31
|
+
echo $(cat ./roro/containers/ruby_image/ci.env) >> $BASH_ENV
|
32
|
+
source $BASH_ENV
|
33
|
+
- run: chmod +x ./.circleci/setup-gem-credentials.sh
|
34
|
+
- run: ./.circleci/setup-gem-credentials.sh
|
35
|
+
- run: chmod 0600 ~/.gem/credentials
|
36
|
+
- run: git checkout .
|
37
|
+
- run: gem release
|
38
|
+
|
39
|
+
workflows:
|
40
|
+
version: 2
|
41
|
+
|
42
|
+
build-release:
|
43
|
+
jobs:
|
44
|
+
- build
|
45
|
+
- test:
|
46
|
+
filters:
|
47
|
+
branches:
|
48
|
+
only: master
|
49
|
+
|
50
|
+
- release:
|
51
|
+
requires:
|
52
|
+
- build
|
53
|
+
filters:
|
54
|
+
branches:
|
55
|
+
only: release
|
data/.gitignore
CHANGED
@@ -5,10 +5,20 @@
|
|
5
5
|
/doc/
|
6
6
|
/pkg/
|
7
7
|
/spec/reports/
|
8
|
-
tmp/*
|
9
8
|
Gemfile.lock
|
10
9
|
.byebug_history
|
11
|
-
/sandbox/**/*
|
12
10
|
|
13
11
|
roro/**/*.env
|
14
|
-
roro/**/*.key
|
12
|
+
roro/**/*.key
|
13
|
+
|
14
|
+
*.key
|
15
|
+
*.env
|
16
|
+
!/.gitignore
|
17
|
+
|
18
|
+
tmp/*
|
19
|
+
!tmp/.keep
|
20
|
+
sandbox/*
|
21
|
+
!sandbox/.keep
|
22
|
+
!sandbox/greenfield
|
23
|
+
sandbox/greenfield/*
|
24
|
+
!sandbox/greenfield/.keep
|
data/Guardfile
CHANGED
@@ -4,24 +4,14 @@
|
|
4
4
|
options = {
|
5
5
|
cli: '-f',
|
6
6
|
all_on_start: true,
|
7
|
-
all_after_pass:
|
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/
|
15
|
-
watch(%r{^lib/roro/cli/rollon/*.rb$}) { 'test/generators' }
|
16
|
-
watch(%r{^lib/roro/cli/roro_configurator.yml$}) { 'test/cli/configuration_test.rb' }
|
17
|
-
# watch(%r{^lib/roro/cli/(.+).rb$}) { 'test' }
|
18
|
-
# watch(%r{^lib/roro/cli/templates/roro(.+).rb$}) do
|
19
|
-
# 'test/generators/rollon/rollon_as_roro_test.rb'
|
20
|
-
# end
|
21
|
-
|
22
|
-
|
14
|
+
watch(%r{^lib/roro/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
|
23
15
|
watch(%r{^test/thor_helper\.rb$}) { 'test' }
|
24
|
-
|
25
16
|
watch(%r{^test/fixtures/files/(.*/)?([^/]+)\.yml$}) { 'test' }
|
26
|
-
|
27
17
|
end
|
data/docker-compose.yml
ADDED
data/lib/roro.rb
CHANGED
data/lib/roro/cli.rb
CHANGED
@@ -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
|
-
require 'roro/cli/generate_keys'
|
6
3
|
require 'roro/cli/obfuscate'
|
7
4
|
require 'roro/cli/expose'
|
8
|
-
require 'roro/cli/ruby_gem'
|
9
5
|
require 'roro/cli/generate/config/rails'
|
10
6
|
require 'roro/cli/generate/config'
|
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
|
data/lib/roro/cli/cli.rb
ADDED
@@ -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
|
data/lib/roro/cli/expose.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
module Roro
|
2
2
|
class CLI < Thor
|
3
|
+
|
4
|
+
no_commands do
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
HandsomeFencer::Crypto.expose(environment, 'docker')
|
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", "
|
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
|
-
|
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,79 +1,47 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
# def confirm_files_decrypted?(environment)
|
50
|
-
# orphan_encrypted = []
|
51
|
-
# HandsomeFencer::Crypto.source_files('.', '.env.enc').each do |file|
|
52
|
-
# orphan_encrypted << file unless File.exist? file.split('.enc').first
|
53
|
-
# end
|
54
|
-
|
55
|
-
# if !orphan_encrypted.empty?
|
56
|
-
# 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}.")
|
57
|
-
# end
|
58
|
-
# true
|
59
|
-
# end
|
60
|
-
# end
|
61
|
-
# end
|
62
|
-
|
63
|
-
# # desc "generate keys", "Generate keys on a per-environment basis"
|
64
|
-
# #
|
65
|
-
# # method_option :environment, type: :string, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "development, staging"
|
66
|
-
# #
|
67
|
-
|
68
|
-
# # def generate_keys
|
69
|
-
# # default_environments = %w[circleci development production]
|
70
|
-
# # environments = args.first ? [args.first] : default_environments
|
71
|
-
# # environments.each do |environment|
|
72
|
-
# # @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
|
73
|
-
# # @salt = '8 octets'
|
74
|
-
# # @new_key = @cipher.random_key
|
75
|
-
# #
|
76
|
-
# # create_file "docker/keys/#{environment}.key", Base64.encode64(@new_key)
|
77
|
-
# # end
|
78
|
-
# # end
|
79
|
-
# end
|
1
|
+
module Roro
|
2
|
+
|
3
|
+
class CLI < Thor
|
4
|
+
|
5
|
+
no_commands do
|
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
|
15
|
+
|
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
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|