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.
- checksums.yaml +5 -5
- data/.circleci/config.yml +55 -11
- data/.gitignore +3 -2
- data/Guardfile +8 -10
- data/README.md +2 -1
- data/lib/roro.rb +3 -1
- data/lib/roro/cli.rb +16 -74
- data/lib/roro/cli/generate/exposed.rb +14 -0
- data/lib/roro/cli/generate/{generate_keys.rb → keys.rb} +24 -2
- data/lib/roro/cli/generate/obfuscated.rb +17 -0
- data/lib/roro/cli/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 +73 -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/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/roro/roro/containers/frontend → 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/.circleci → 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 +9 -10
- data/lib/roro/{cli/templates/ruby_gem/roro/containers → 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/ruby_gem/roro/keys → templates/rails/roro}/.keep +0 -0
- data/lib/roro/{cli/templates/stories → templates/rails/roro/containers}/.keep +0 -0
- data/lib/roro/{cli/templates/stories/rails/database/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/templates/stories/with_postgresql → templates/rails/roro/containers/frontend}/.keep +0 -0
- data/lib/roro/templates/rails/roro/docker-entrypoint.sh +8 -0
- data/lib/roro/{cli/rollon/stories/database.rb → 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 +11 -21
- data/roro/containers/app/Dockerfile +51 -0
- metadata +165 -173
- 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/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
data/lib/roro/cli/base/base.rb
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
module Roro
|
|
2
|
-
|
|
3
|
-
class CLI < Thor
|
|
4
|
-
|
|
5
|
-
no_commands do
|
|
6
|
-
|
|
7
|
-
def copy_dockerignore
|
|
8
|
-
copy_file 'base/.dockerignore', '.dockerignore'
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def copy_host_example
|
|
12
|
-
copy_file 'base/livereload/hosts.example', 'hosts.example'
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def copy_docker_compose
|
|
16
|
-
template "base/docker-compose.yml", 'docker-compose.yml', @env_hash
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def copy_database_yml_pg
|
|
20
|
-
copy_file "base/config/database.pg.yml", 'config/database.yml', force: @env_hash[:use_force]
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
module Roro
|
|
2
|
-
|
|
3
|
-
class CLI < Thor
|
|
4
|
-
|
|
5
|
-
no_commands do
|
|
6
|
-
|
|
7
|
-
def confirm_directory_not_empty
|
|
8
|
-
confirm_dependency({
|
|
9
|
-
system_query: "ls -A",
|
|
10
|
-
warning: "This is an empty directory. You can generate a new and fully
|
|
11
|
-
dockerized Rails app using the 'greenfield' command here here but if
|
|
12
|
-
you want to containerize an existing app -- which is what the 'rollon'
|
|
13
|
-
command is for -- you'll need to navigate to a directory with an app we
|
|
14
|
-
can roll onto.",
|
|
15
|
-
suggestion: "$ roro greenfield",
|
|
16
|
-
conditional: "!Dir.glob('*').empty?" })
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def confirm_directory_empty
|
|
20
|
-
confirm = confirm_dependency({
|
|
21
|
-
system_query: "ls -A",
|
|
22
|
-
warning: "this is not an empty directory. Roro will not greenfield a new Rails app unless either a) the current directory is empty or b) you run greenfield with the --force flag",
|
|
23
|
-
suggestion: "$ roro greenfield --force",
|
|
24
|
-
conditional: "Dir.glob('*').empty?" })
|
|
25
|
-
confirm || true
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def remove_roro_artifacts
|
|
29
|
-
appname = Dir.pwd.split('/').last
|
|
30
|
-
check_for_clashes = "docker ps --filter name=#{appname}* -aq"
|
|
31
|
-
no_artifact_containers = IO.popen(check_for_clashes).count.eql?(0)
|
|
32
|
-
no_artifact_volumes = IO.popen("docker volume ls --filter name=greenfield*").count > (1)
|
|
33
|
-
unless (no_artifact_containers && no_artifact_volumes)
|
|
34
|
-
remove_clashes = ["docker ps --filter name=#{appname}* -aq | xargs docker stop | xargs docker rm"]
|
|
35
|
-
volumes = %w(db_data app)
|
|
36
|
-
volumes.each {|v| remove_clashes << "docker volume rm #{appname}_#{v}"}
|
|
37
|
-
question = [
|
|
38
|
-
"\n\nWe found some container and volume artifacts which may clash",
|
|
39
|
-
"with RoRo moving forward. You can verify their existence in a ",
|
|
40
|
-
"separate terminal with:",
|
|
41
|
-
"\n\t$ #{check_for_clashes}'\n",
|
|
42
|
-
"You can remove these artifacts with something like:\n"
|
|
43
|
-
]
|
|
44
|
-
remove_clashes.each { |c| question << "\t$ #{c}"}
|
|
45
|
-
question << "\nWould you like RoRo to attempt to remove them for you?"
|
|
46
|
-
question = question.join("\n")
|
|
47
|
-
|
|
48
|
-
prompt = [question]
|
|
49
|
-
choices = {'y' => 'Yes', 'n' => 'No'}
|
|
50
|
-
choices.each { |k,v| prompt << "(#{k}) #{v.to_s}" }
|
|
51
|
-
answer = ask((prompt.join("\n\n") + "\n\n"),
|
|
52
|
-
default: 'y', limited_to: choices.keys)
|
|
53
|
-
remove_clashes.each {|c| system c }
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def confirm_dependency(options)
|
|
58
|
-
msg = []
|
|
59
|
-
msg << ""
|
|
60
|
-
msg << delineator
|
|
61
|
-
msg << "It looks like #{options[:warning]}. The following bash command returns false:"
|
|
62
|
-
msg << "\t$ #{options[:system_query]}"
|
|
63
|
-
msg << "Please try these instructions:"
|
|
64
|
-
msg << ("\t" + options[:suggestion])
|
|
65
|
-
msg << delineator
|
|
66
|
-
conditional = options[:conditional] ? eval(options[:conditional]) : system(options[:system_query])
|
|
67
|
-
if conditional == false
|
|
68
|
-
raise(Roro::Error.new(msg.join("\n\n")))
|
|
69
|
-
else
|
|
70
|
-
true
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def confirm_dependencies
|
|
75
|
-
dependencies = [
|
|
76
|
-
{
|
|
77
|
-
system_query: "which docker",
|
|
78
|
-
warning: "Docker isn't installed",
|
|
79
|
-
suggestion: "https://docs.docker.com/install/"
|
|
80
|
-
}, {
|
|
81
|
-
system_query: "which docker-compose",
|
|
82
|
-
warning: "Docker Compose isn't installed",
|
|
83
|
-
suggestion: "https://docs.docker.com/compose/install/"
|
|
84
|
-
|
|
85
|
-
}, {
|
|
86
|
-
system_query: "docker info",
|
|
87
|
-
warning: "the Docker daemon isn't running",
|
|
88
|
-
suggestion: "https://docs.docker.com/config/daemon/#start-the-daemon-manually"
|
|
89
|
-
}
|
|
90
|
-
]
|
|
91
|
-
|
|
92
|
-
dependencies.each do |dependency|
|
|
93
|
-
confirm_dependency(dependency)
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
module Roro
|
|
3
|
-
|
|
4
|
-
class CLI < Thor
|
|
5
|
-
|
|
6
|
-
no_commands do
|
|
7
|
-
|
|
8
|
-
def choices
|
|
9
|
-
{ default: 'y', limited_to: ["y", "n"] }
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def own_if_required
|
|
13
|
-
system 'sudo chown -R $USER .'
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def as_system(command)
|
|
17
|
-
command = OS.linux? ? "sudo #{command}" : command
|
|
18
|
-
system command
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def chown_if_required()
|
|
22
|
-
warning = "It looks like you're running Docker on some flavor of Linux, in which case the files created by your containers are owned by the root user of the container, and not by the user of the host machine. Please change their ownership by supplying your password at the prompt.",
|
|
23
|
-
action = "system 'sudo chown -R $USER .'"
|
|
24
|
-
msg = []
|
|
25
|
-
msg << ""
|
|
26
|
-
msg << delineator
|
|
27
|
-
msg << warning
|
|
28
|
-
msg << ""
|
|
29
|
-
msg.join("\n\n")
|
|
30
|
-
puts msg
|
|
31
|
-
eval(action)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def delineator
|
|
35
|
-
("-" * 80)
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
data/lib/roro/cli/cli.rb
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
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,69 +0,0 @@
|
|
|
1
|
-
require 'yaml'
|
|
2
|
-
module Roro
|
|
3
|
-
class Configuration < Thor
|
|
4
|
-
|
|
5
|
-
attr_reader :master, :app, :choices, :thor_actions
|
|
6
|
-
|
|
7
|
-
def initialize(options={})
|
|
8
|
-
@options = options || {}
|
|
9
|
-
@master = YAML.load_file(File.dirname(__FILE__) + '/roro_configurator.yml')
|
|
10
|
-
@master['services']['server_app']['vendors']['rails']['version'] = `ruby -v`.scan(/\d.\d/).first
|
|
11
|
-
@choices = @master['services']['server_app']['vendors']['rails']['choices']
|
|
12
|
-
@app = {}
|
|
13
|
-
@thor_actions = {}
|
|
14
|
-
configure
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
no_commands do
|
|
18
|
-
|
|
19
|
-
def configure
|
|
20
|
-
set_from_defaults
|
|
21
|
-
case
|
|
22
|
-
when @options['interactive'] && File.exist?('.roro_config.yml')
|
|
23
|
-
set_from_roro_config
|
|
24
|
-
set_from_interactive
|
|
25
|
-
when File.exist?('.roro_config.yml')
|
|
26
|
-
set_from_roro_config
|
|
27
|
-
when @options['interactive']
|
|
28
|
-
set_from_interactive
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def set_from_defaults
|
|
33
|
-
svcs = @master['services']
|
|
34
|
-
rails = svcs['server_app']['vendors']['rails']
|
|
35
|
-
@app = {
|
|
36
|
-
'main_app_name' => Dir.pwd.split('/').last,
|
|
37
|
-
'database_host' => rails['env_vars']['DATABASE_HOST'],
|
|
38
|
-
'ruby_version' => rails['version'],
|
|
39
|
-
'frontend_service' => svcs['frontend']['name'],
|
|
40
|
-
'webserver_service' => svcs['webserver']['default'],
|
|
41
|
-
'database_service' => svcs['database']['name'],
|
|
42
|
-
'database_vendor' => svcs['database']['vendor'],
|
|
43
|
-
}
|
|
44
|
-
@choices.each { |key, value| @thor_actions[key] = value["default"] }
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def set_from_roro_config
|
|
48
|
-
yaml = YAML.load_file(Dir.pwd + '/.roro_config.yml')
|
|
49
|
-
yaml.each { |key, value| @app[key] = value }
|
|
50
|
-
if yaml['thor_actions']
|
|
51
|
-
yaml['thor_actions'].each do |key, value|
|
|
52
|
-
@thor_actions[key] = value
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def set_from_interactive
|
|
58
|
-
@choices.each do |key, v|
|
|
59
|
-
prompt = ["\n\n" + v['question']]
|
|
60
|
-
v['choices'].each { |k,v| prompt << "(#{k}) #{v.to_s}" }
|
|
61
|
-
answer = ask((prompt.join("\n\n") + "\n\n"),
|
|
62
|
-
default: v['default'],
|
|
63
|
-
limited_to: v['choices'].keys)
|
|
64
|
-
@thor_actions[key] = answer
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
data/lib/roro/cli/expose.rb
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
module Roro
|
|
2
|
-
class CLI < Thor
|
|
3
|
-
|
|
4
|
-
no_commands do
|
|
5
|
-
|
|
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
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
module Roro
|
|
2
|
-
class CLI < Thor
|
|
3
|
-
include Thor::Actions
|
|
4
|
-
|
|
5
|
-
# desc "generate::config::roro", "Generate a config file at .roro_config.yml"
|
|
6
|
-
# map "generate::config::roro" => "generate_roro_config"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# def generate_roro_config
|
|
10
|
-
# create_file ".roro_config.yml", @config.app.to_yaml
|
|
11
|
-
# end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# module Roro
|
|
2
|
-
# class CLI < Thor
|
|
3
|
-
# include Thor::Actions
|
|
4
|
-
|
|
5
|
-
# desc "generate::config::rails", "Generates a config file to use roro with
|
|
6
|
-
# a rails app at .roro.yml"
|
|
7
|
-
# map "generate::config::rails" => "generate_config_rails"
|
|
8
|
-
|
|
9
|
-
# def generate_config_rails
|
|
10
|
-
# master_config = YAML.load_file(ENV['PWD'] + "/lib/roro/cli/roro_configurator.yml")
|
|
11
|
-
# template 'base/.roro_config.yml', '.roro_config.yml'
|
|
12
|
-
# end
|
|
13
|
-
|
|
14
|
-
# no_commands do
|
|
15
|
-
# end
|
|
16
|
-
# end
|
|
17
|
-
# end
|
data/lib/roro/cli/greenfield.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
module Roro
|
|
2
|
-
|
|
3
|
-
class CLI < Thor
|
|
4
|
-
|
|
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
|
|
15
|
-
|
|
16
|
-
def configure_for_greenfielding
|
|
17
|
-
@config ||= Roro::Configuration.new(options)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def run_greenfield_commands
|
|
21
|
-
system "DOCKER_BUILDKIT=1 docker build --file Dockerfile --output . ."
|
|
22
|
-
rollon
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def copy_greenfield_files
|
|
26
|
-
template 'greenfield/Dockerfile.tt', 'Dockerfile', @config.app
|
|
27
|
-
template 'roro/docker-compose.yml.tt', 'docker-compose.yml', @config.app
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
data/lib/roro/cli/obfuscate.rb
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
require 'handsome_fencer/crypto'
|
|
2
|
-
|
|
3
|
-
module Roro
|
|
4
|
-
|
|
5
|
-
class CLI < Thor
|
|
6
|
-
|
|
7
|
-
no_commands do
|
|
8
|
-
include Thor::Actions
|
|
9
|
-
include HandsomeFencer::Crypto
|
|
10
|
-
|
|
11
|
-
def obfuscate(*args)
|
|
12
|
-
environments = args.first ? [args.first] : gather_environments
|
|
13
|
-
environments.each do |environment|
|
|
14
|
-
HandsomeFencer::Crypto.obfuscate(environment, 'roro')
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|