roro 0.3.14 → 0.3.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.circleci/config.yml +52 -20
- data/.gitignore +7 -4
- data/Guardfile +9 -9
- data/README.md +2 -1
- data/lib/roro.rb +12 -1
- data/lib/roro/cli.rb +18 -73
- data/lib/roro/cli/generate/generate_exposed.rb +18 -0
- data/lib/roro/cli/generate/generate_keys.rb +6 -39
- data/lib/roro/cli/generate/generate_obfuscated.rb +34 -0
- data/lib/roro/cli/generate/generate_story.rb +18 -0
- data/lib/roro/cli/greenfield/rails.rb +14 -0
- data/lib/roro/cli/rollon.rb +126 -63
- data/lib/roro/cli/rollon/rails/base/base.rb +4 -0
- data/lib/roro/cli/{base → rollon/rails/base}/insert_gems.rb +2 -10
- data/lib/roro/cli/{base → rollon/rails/base}/insertions.rb +8 -0
- data/lib/roro/cli/rollon/rails/database.rb +26 -0
- data/lib/roro/cli/rollon/{stories/rails → rails}/database/with_mysql.rb +4 -4
- data/lib/roro/cli/rollon/{stories/rails → rails}/database/with_postgresql.rb +5 -6
- data/lib/roro/cli/rollon/ruby_gem.rb +1 -0
- data/lib/roro/cli/rollon/{stories/ruby_gem → ruby_gem}/with_ci_cd.rb +8 -8
- data/lib/roro/cli/rollon/stories.rb +2 -2
- data/lib/roro/configurator.rb +15 -0
- data/lib/roro/configurator/eligibility.rb +137 -0
- data/lib/roro/configurator/okonomi.rb +28 -0
- data/lib/roro/configurator/omakase.rb +170 -0
- data/lib/roro/crypto.rb +113 -0
- data/lib/roro/stories/greenfield.yml +1 -0
- data/lib/roro/stories/greenfield/rails.yml +9 -0
- data/lib/roro/stories/rollon.yml +42 -0
- data/lib/roro/stories/rollon/rails.yml +76 -0
- data/lib/roro/stories/rollon/rails/ci_cd.yml +1 -0
- data/lib/roro/stories/rollon/rails/ci_cd/circleci.yml +2 -0
- data/lib/roro/stories/rollon/rails/database.yml +9 -0
- data/lib/roro/stories/rollon/rails/database/mysql.yml +17 -0
- data/lib/roro/stories/rollon/rails/database/postgresql.yml +15 -0
- data/lib/roro/stories/rollon/rails/kubernetes.yml +1 -0
- data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +10 -0
- data/lib/roro/stories/rollon/rails/kubernetes/postgresql/default.yml +1 -0
- data/lib/roro/stories/rollon/rails/kubernetes/postgresql/edge.yml +1 -0
- data/lib/roro/stories/rollon/ruby_gem.yml +5 -0
- data/lib/roro/templates/base/.circleci/_aliases.yml +8 -0
- data/lib/roro/templates/base/.circleci/_commands.yml +31 -0
- data/lib/roro/templates/base/.circleci/_defaults.yml +5 -0
- data/lib/roro/templates/base/.circleci/_executors.yml +11 -0
- data/lib/roro/templates/base/.circleci/_major_only.yml +4 -0
- data/lib/roro/templates/base/.circleci/_version.yml +1 -0
- data/lib/roro/templates/base/.circleci/_workflow.yml +2 -0
- data/lib/roro/templates/base/.circleci/config.job-example.yml +33 -0
- data/lib/roro/templates/base/.circleci/jobs/_build.yml +4 -0
- data/lib/roro/templates/base/.circleci/jobs/_release.yml +12 -0
- data/lib/roro/templates/base/.circleci/workflows/_build_release.yml +10 -0
- data/lib/roro/{cli/templates → templates}/base/.dockerignore +0 -0
- data/lib/roro/templates/base/dotenv +1 -0
- data/lib/roro/{cli/rollon/stories/rails → templates/base/jumpstart}/.keep +0 -0
- data/lib/roro/{cli/templates → templates/base}/jumpstart/Dockerfile.tt +0 -0
- data/lib/roro/{cli/templates → templates/base}/jumpstart/docker-compose.yml +0 -0
- data/lib/roro/{cli/templates → templates/base}/jumpstart/docker-entrypoint.sh +0 -0
- data/lib/roro/{cli/templates → templates/base}/livereload/hosts.example +0 -0
- data/lib/roro/{cli/templates/base → templates/base/roro}/.keep +0 -0
- data/lib/roro/{cli/templates/jumpstart → templates/base/roro/roro}/.keep +0 -0
- data/lib/roro/{cli/templates/roro → templates/base/roro/roro/containers}/.keep +0 -0
- data/lib/roro/{cli/templates/roro/roro → templates/base/roro/roro/containers/app}/.keep +0 -0
- data/lib/roro/{cli/templates/roro/roro/containers → templates/base/roro/roro/containers/frontend}/.keep +0 -0
- data/lib/roro/{cli/templates → templates/base}/roro/roro/docker-entrypoint.sh.tt +0 -0
- data/lib/roro/{cli/templates/roro/roro/containers/app → templates/base/roro/roro/keys}/.keep +0 -0
- data/lib/roro/{cli/templates/roro/roro/containers/frontend → templates/rails/.circleci}/.keep +0 -0
- data/lib/roro/templates/rails/.circleci/config.yml.tt +11 -0
- data/lib/roro/templates/rails/.circleci/jobs/_build.yml +14 -0
- data/lib/roro/templates/rails/.circleci/jobs/_push.yml +11 -0
- data/lib/roro/templates/rails/.circleci/jobs/_test.yml +12 -0
- data/lib/roro/{cli/templates/ruby_gem → templates/rails}/.circleci/setup-gem-credentials.sh +0 -0
- data/lib/roro/templates/rails/.circleci/workflows/_build_test_push.yml +12 -0
- data/lib/roro/{cli/templates/ruby_gem/.circleci → templates/rails}/.keep +0 -0
- data/lib/roro/templates/rails/Dockerfile.greenfield.tt +51 -0
- data/lib/roro/{cli/templates/base → templates/rails}/config/database.mysql.yml +0 -0
- data/lib/roro/{cli/templates/base → templates/rails}/config/database.pg.yml +2 -3
- data/lib/roro/templates/rails/database/with_mysql/_service.yml +10 -0
- data/lib/roro/{cli/templates/ruby_gem/roro/containers → templates/rails/database/with_postgresql}/.keep +0 -0
- data/lib/roro/templates/rails/database/with_postgresql/_service.yml +7 -0
- data/lib/roro/{cli/templates/roro → templates/rails}/docker-compose.yml.tt +7 -7
- data/lib/roro/{cli/templates/ruby_gem/roro/keys → templates/rails/dotenv}/.keep +0 -0
- data/lib/roro/templates/rails/dotenv/database.mysql.env.tt +6 -0
- data/lib/roro/templates/rails/dotenv/database.pg.env.tt +4 -0
- data/lib/roro/templates/rails/dotenv/web.env.tt +2 -0
- data/lib/roro/templates/rails/kube.rake.tt +114 -0
- data/lib/roro/{cli/templates/stories → templates/rails/roro}/.keep +0 -0
- data/lib/roro/{cli/templates/stories/rails/database/with_postgresql → templates/rails/roro/containers}/.keep +0 -0
- data/lib/roro/{cli/templates/stories/with_postgresql → templates/rails/roro/containers/app}/.keep +0 -0
- data/lib/roro/templates/rails/roro/containers/app/Dockerfile.tt +34 -0
- data/lib/roro/{cli/rollon/stories/database.rb → templates/rails/roro/containers/frontend/.keep} +0 -0
- data/lib/roro/templates/rails/roro/docker-entrypoint.sh +8 -0
- data/lib/roro/templates/rails/roro/keys/.keep +0 -0
- data/lib/roro/templates/rails/roro/kube/.keep +0 -0
- data/lib/roro/templates/rails/roro/kube/certificate.yml.tt +0 -0
- data/lib/roro/templates/rails/roro/kube/cluster-issuer.yml.tt +0 -0
- data/lib/roro/templates/rails/roro/kube/deployment.yml.tt +50 -0
- data/lib/roro/templates/rails/roro/kube/deployments/postgres_deploy.yaml +47 -0
- data/lib/roro/templates/rails/roro/kube/deployments/rails_deploy.yaml +62 -0
- data/lib/roro/templates/rails/roro/kube/deployments/redis_deploy.yaml +23 -0
- data/lib/roro/templates/rails/roro/kube/deployments/sidekiq_deploy.yaml +56 -0
- data/lib/roro/templates/rails/roro/kube/ingress.yml.tt +0 -0
- data/lib/roro/templates/rails/roro/kube/ingresses/ingress.yaml +13 -0
- data/lib/roro/templates/rails/roro/kube/job-migrate.yml.tt +0 -0
- data/lib/roro/templates/rails/roro/kube/jobs/setup.yaml +42 -0
- data/lib/roro/templates/rails/roro/kube/secret-digital-ocean.yml.tt +4 -0
- data/lib/roro/templates/rails/roro/kube/service.yml.tt +10 -0
- data/lib/roro/templates/rails/roro/kube/services/postgres_svc.yaml +13 -0
- data/lib/roro/templates/rails/roro/kube/services/rails_svc.yaml +13 -0
- data/lib/roro/templates/rails/roro/kube/services/redis_svc.yaml +13 -0
- data/lib/roro/templates/rails/roro/kube/volumes/postgres_volumes.yaml +25 -0
- data/lib/roro/templates/ruby_gem/.circleci/.keep +0 -0
- data/lib/roro/templates/ruby_gem/.circleci/config.yml.tt +16 -0
- data/lib/roro/templates/ruby_gem/.circleci/jobs/_test.yml +4 -0
- data/lib/roro/templates/ruby_gem/.circleci/setup-gem-credentials.sh +3 -0
- data/lib/roro/{cli/templates → templates}/ruby_gem/docker-compose.yml +0 -0
- data/lib/roro/templates/ruby_gem/roro/containers/.keep +0 -0
- data/lib/roro/{cli/templates → templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +1 -1
- data/lib/roro/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +1 -0
- data/lib/roro/templates/ruby_gem/roro/keys/.keep +0 -0
- data/lib/roro/version.rb +1 -1
- data/roro.gemspec +12 -21
- data/roro/containers/app/Dockerfile +51 -0
- data/roro/containers/app/dotenv +1 -0
- metadata +179 -171
- data/lib/roro/cli/base/base.rb +0 -8
- data/lib/roro/cli/base/base_files.rb +0 -24
- data/lib/roro/cli/base/check_dependencies.rb +0 -98
- data/lib/roro/cli/base/continuous_integration.rb +0 -13
- data/lib/roro/cli/base/utilities.rb +0 -39
- data/lib/roro/cli/cli.rb +0 -99
- data/lib/roro/cli/configuration.rb +0 -69
- data/lib/roro/cli/expose.rb +0 -14
- data/lib/roro/cli/generate/config.rb +0 -13
- data/lib/roro/cli/generate/config/rails.rb +0 -17
- data/lib/roro/cli/greenfield.rb +0 -31
- data/lib/roro/cli/obfuscate.rb +0 -19
- data/lib/roro/cli/rollon/stories/rails.rb +0 -1
- data/lib/roro/cli/rollon/stories/rails/database.rb +0 -33
- data/lib/roro/cli/rollon/stories/ruby_gem.rb +0 -77
- data/lib/roro/cli/rollon/stories/stories.rb +0 -3
- data/lib/roro/cli/roro_configurator.yml +0 -157
- data/lib/roro/cli/ruby_gem.rb +0 -67
- data/lib/roro/cli/templates/base/.roro_config.yml +0 -15
- data/lib/roro/cli/templates/base/Dockerfile.tt +0 -82
- data/lib/roro/cli/templates/greenfield/Dockerfile.tt +0 -43
- data/lib/roro/cli/templates/ruby_gem/.circleci/config.yml.tt +0 -40
- data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -1
- data/lib/roro/cli/templates/stories/rails/database/with_mysql/_service.yml +0 -10
- data/lib/roro/cli/templates/stories/rails/database/with_postgresql/_service.yml +0 -7
- data/lib/roro/cli/templates/stories/ruby_gem/with_ci_cd/_build.yml +0 -11
- data/lib/roro/cli/templates/stories/with_mysql/_service.yml +0 -10
- data/lib/roro/cli/templates/stories/with_postgresql/_service.yml +0 -7
- data/lib/tasks/deploy.rake +0 -126
- data/roro/containers/ruby_image/ci.env.enc +0 -2
- data/vendor/cache/actionpack-6.0.3.2.gem +0 -0
- data/vendor/cache/actionview-6.0.3.2.gem +0 -0
- data/vendor/cache/activesupport-6.0.3.2.gem +0 -0
- data/vendor/cache/addressable-2.7.0.gem +0 -0
- data/vendor/cache/builder-3.2.4.gem +0 -0
- data/vendor/cache/byebug-11.1.3.gem +0 -0
- data/vendor/cache/coderay-1.1.3.gem +0 -0
- data/vendor/cache/concurrent-ruby-1.1.7.gem +0 -0
- data/vendor/cache/crass-1.0.6.gem +0 -0
- data/vendor/cache/em-websocket-0.5.1.gem +0 -0
- data/vendor/cache/erubi-1.9.0.gem +0 -0
- data/vendor/cache/eventmachine-1.2.7.gem +0 -0
- data/vendor/cache/ffi-1.13.1.gem +0 -0
- data/vendor/cache/formatador-0.2.5.gem +0 -0
- data/vendor/cache/gem-release-2.1.1.gem +0 -0
- data/vendor/cache/given_core-3.8.0.gem +0 -0
- data/vendor/cache/guard-2.16.2.gem +0 -0
- data/vendor/cache/guard-compat-1.2.1.gem +0 -0
- data/vendor/cache/guard-livereload-2.5.2.gem +0 -0
- data/vendor/cache/guard-minitest-2.4.6.gem +0 -0
- data/vendor/cache/handsome_fencer-crypto-0.1.6.gem +0 -0
- data/vendor/cache/handsome_fencer-test-0.1.1.gem +0 -0
- data/vendor/cache/http_parser.rb-0.6.0.gem +0 -0
- data/vendor/cache/i18n-1.8.5.gem +0 -0
- data/vendor/cache/launchy-2.5.0.gem +0 -0
- data/vendor/cache/listen-3.2.1.gem +0 -0
- data/vendor/cache/loofah-2.6.0.gem +0 -0
- data/vendor/cache/lumberjack-1.2.7.gem +0 -0
- data/vendor/cache/method_source-1.0.0.gem +0 -0
- data/vendor/cache/mini_portile2-2.4.0.gem +0 -0
- data/vendor/cache/minitest-5.14.1.gem +0 -0
- data/vendor/cache/minitest-given-3.8.0.gem +0 -0
- data/vendor/cache/minitest-matchers_vaccine-1.0.4.gem +0 -0
- data/vendor/cache/minitest-rails-6.0.1.gem +0 -0
- data/vendor/cache/mocha-1.11.2.gem +0 -0
- data/vendor/cache/multi_json-1.15.0.gem +0 -0
- data/vendor/cache/nenv-0.3.0.gem +0 -0
- data/vendor/cache/net-scp-3.0.0.gem +0 -0
- data/vendor/cache/net-ssh-6.1.0.gem +0 -0
- data/vendor/cache/nokogiri-1.10.10.gem +0 -0
- data/vendor/cache/notiffany-0.1.3.gem +0 -0
- data/vendor/cache/os-1.0.0.gem +0 -0
- data/vendor/cache/pry-0.13.1.gem +0 -0
- data/vendor/cache/public_suffix-4.0.5.gem +0 -0
- data/vendor/cache/rack-2.2.3.gem +0 -0
- data/vendor/cache/rack-livereload-0.3.17.gem +0 -0
- data/vendor/cache/rack-test-1.1.0.gem +0 -0
- data/vendor/cache/rails-dom-testing-2.0.3.gem +0 -0
- data/vendor/cache/rails-html-sanitizer-1.3.0.gem +0 -0
- data/vendor/cache/railties-6.0.3.2.gem +0 -0
- data/vendor/cache/rake-13.0.1.gem +0 -0
- data/vendor/cache/rb-fsevent-0.10.4.gem +0 -0
- data/vendor/cache/rb-inotify-0.10.1.gem +0 -0
- data/vendor/cache/shellany-0.0.1.gem +0 -0
- data/vendor/cache/shoulda-4.0.0.gem +0 -0
- data/vendor/cache/shoulda-context-2.0.0.gem +0 -0
- data/vendor/cache/shoulda-matchers-4.3.0.gem +0 -0
- data/vendor/cache/sorcerer-2.0.1.gem +0 -0
- data/vendor/cache/sshkit-1.18.2.gem +0 -0
- data/vendor/cache/thor-1.0.1.gem +0 -0
- data/vendor/cache/thread_safe-0.3.6.gem +0 -0
- data/vendor/cache/tzinfo-1.2.7.gem +0 -0
- data/vendor/cache/zeitwerk-2.4.0.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d21bacda1161bc7f1cb8b57ebbca68cbe4f9647c2d02b33464c6a162f3661d31
|
4
|
+
data.tar.gz: d40e7d418705dd50e38e8d5a6f337d313f8cae3fadb1a37a7114c504cd8bbb46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
+
- ©-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
|
-
|
37
|
+
<<: *defaults
|
7
38
|
steps:
|
8
39
|
- checkout
|
9
40
|
|
10
|
-
test-
|
11
|
-
|
41
|
+
test-rollon-rails:
|
42
|
+
executor: ruby-executor
|
12
43
|
steps:
|
13
44
|
- checkout
|
14
|
-
-
|
15
|
-
|
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
|
-
|
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
|
-
|
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-
|
86
|
+
build-cli:
|
51
87
|
jobs:
|
52
|
-
- build
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
88
|
+
- build:
|
89
|
+
<<: *major_only
|
90
|
+
<<: *release
|
91
|
+
- test-rollon-rails:
|
92
|
+
<<: *major_only
|
57
93
|
- test:
|
58
|
-
|
59
|
-
branches:
|
60
|
-
only: master
|
94
|
+
<<: *major_only
|
61
95
|
|
62
96
|
- release:
|
63
97
|
requires:
|
64
98
|
- build
|
65
|
-
|
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:
|
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{^
|
15
|
-
watch(%r{^test/
|
16
|
-
watch(%r{^
|
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__) + '/
|
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
|
-
|
54
|
-
|
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
|
-
|
83
|
-
|
26
|
+
def self.test_fixture_root
|
27
|
+
File.dirname(__FILE__) + '/test/fixtures'
|
28
|
+
end
|
84
29
|
|
85
|
-
def
|
86
|
-
|
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
|
-
|
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
|
-
|
8
|
-
|
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
|
-
|
17
|
-
|
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
|