roro 0.3.18 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 28419719167db581fa026244d2628fa4c86c9d3b
4
- data.tar.gz: b46403289b09d42a550ac9dff3a4edcc717f2c63
2
+ SHA256:
3
+ metadata.gz: 43e30bd9aa551984852307e9c258049546a167e89aaab22e3f8b7256cec22a23
4
+ data.tar.gz: 790ad729852cf34c8bbdfa6499ab325f399334d1df2c385d20e7ae5757dcd707
5
5
  SHA512:
6
- metadata.gz: 3b2075ccae46a264f2d64bf2d2c09fb678bf95a44d534b0263dcb2a9e5cbf6345663d683bea3219ec728512e65eca391e1715a7334d304d4e46411a3e75f6ec1
7
- data.tar.gz: 5ef3392e89e8e72af5e190a79f45ff7e107db744c0fe2a886b6e0e11bf6829c0fc723c6e298c0ad51d20a7b4882dbd84035b3b966a2eabdf5484e4c32827ae28
6
+ metadata.gz: 4de76d1807c627790a721e968e458bcff335d9a972b8b496d5a1dfc494c8b750332eae75411dc689482bb3e60fab44319fa46cc95c63547cedfa5c849e527ce5
7
+ data.tar.gz: b7f2647884d116fc849431070829e2806f244771580a532f57e65cabbf17d856bf209d76e425eee28e370eee90ef6d10f0ab8de10998503bc058da846387bb78
data/.circleci/config.yml CHANGED
@@ -14,8 +14,14 @@ defaults: &defaults
14
14
  major_only: &major_only
15
15
  filters:
16
16
  branches:
17
- only: master, release
18
-
17
+ only: master
18
+
19
+ release: &release
20
+ filters:
21
+ branches:
22
+ only: release
23
+
24
+
19
25
  version: 2.1
20
26
 
21
27
  executors:
@@ -79,7 +85,9 @@ workflows:
79
85
 
80
86
  build-cli:
81
87
  jobs:
82
- - build
88
+ - build:
89
+ <<: *major_only
90
+ <<: *release
83
91
  - test-rollon-rails:
84
92
  <<: *major_only
85
93
  - test:
@@ -88,6 +96,4 @@ workflows:
88
96
  - release:
89
97
  requires:
90
98
  - build
91
- filters:
92
- branches:
93
- only: release
99
+ <<: *release
data/lib/roro.rb CHANGED
@@ -2,6 +2,7 @@ require "thor"
2
2
  require "roro/version"
3
3
  require "roro/cli"
4
4
  require "roro/configurator"
5
+ require "roro/crypto"
5
6
 
6
7
  module Roro
7
8
  class Error < StandardError; end
@@ -7,7 +7,7 @@ module Roro
7
7
  def generate_exposed(*args)
8
8
  environments = args.first ? [args.first] : gather_environments
9
9
  environments.each do |environment|
10
- HandsomeFencer::Crypto.expose(environment, 'roro')
10
+ Roro::Crypto.expose(environment, 'roro')
11
11
  end
12
12
  end
13
13
  end
@@ -45,7 +45,7 @@ module Roro
45
45
  def gather_environments
46
46
  environments = []
47
47
  ['.env', '.env.enc'].each do |extension|
48
- HandsomeFencer::Crypto.source_files('roro', extension).each do |env_file|
48
+ Roro::Crypto.source_files('roro', extension).each do |env_file|
49
49
  environments << env_file.split('/').last.split(extension).last
50
50
  end
51
51
  end
@@ -54,7 +54,7 @@ module Roro
54
54
 
55
55
  def confirm_files_decrypted?(environment)
56
56
  orphan_encrypted = []
57
- HandsomeFencer::Crypto.source_files('.', '.env.enc').each do |file|
57
+ Roro::Crypto.source_files('.', '.env.enc').each do |file|
58
58
  unless File.exist? file.split('.enc').first
59
59
  orphan_encrypted << file
60
60
  end
@@ -1,4 +1,4 @@
1
- require 'handsome_fencer/crypto'
1
+ require 'roro/crypto'
2
2
 
3
3
  module Roro
4
4
 
@@ -6,11 +6,11 @@ module Roro
6
6
 
7
7
  desc "generate::obfuscated", "obfuscates any files matching the pattern ./roro/**/*.env"
8
8
  map "generate::obfuscated" => "generate_obfuscated"
9
-
10
- def generate_obfuscated(*args)
9
+
10
+ def generate_obfuscated(*args)
11
11
  environments = args.first ? [args.first] : gather_environments
12
12
  environments.each do |environment|
13
- HandsomeFencer::Crypto.obfuscate(environment, 'roro')
13
+ Roro::Crypto.obfuscate(environment, 'roro')
14
14
  end
15
15
  end
16
16
  end
@@ -4,7 +4,7 @@ module Roro
4
4
  class << self
5
5
  private
6
6
  def shared_options!
7
- method_option :omakase, default: :omakase, desc: "Use the Roro setup with some configuring. 'Omakase' translates as 'I'll leave it up to you.'", aliases: ['-d', '--default']
7
+ method_option :omakase, desc: "Use the Roro setup with some configuring. 'Omakase' translates as 'I'll leave it up to you.'", aliases: ['-d', '--default']
8
8
  method_option :fatsutofodo, desc: 'Use the Roro setup without having to think.', aliases: ['-f', '--fast']
9
9
  method_option :okonomi, desc: "Use Roro how you like. 'Okonomi' has the opposite meaning of omakase.", aliases: ['-i', '--interactive']
10
10
  end
@@ -0,0 +1,73 @@
1
+ require "openssl"
2
+ require "base64"
3
+ module Roro::Crypto
4
+
5
+ class << self
6
+
7
+ def generate_key
8
+ @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
9
+ @salt = '8 octets'
10
+ @new_key = @cipher.random_key
11
+ Base64.encode64(@new_key)
12
+ end
13
+
14
+ def write_to_file(data, filename)
15
+ File.open(filename, "w") { |io| io.write data }
16
+ end
17
+
18
+ def generate_key_file(directory, environment)
19
+ write_to_file(generate_key, directory + "/" + environment + ".key")
20
+ end
21
+
22
+ def source_files(directory=nil, extension=nil)
23
+ Dir.glob(directory + "/**/*#{extension}")
24
+ end
25
+
26
+ def build_cipher(environment)
27
+ @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
28
+ @salt = '8 octets'
29
+ @pass_phrase = get_key(environment)
30
+ @cipher.encrypt.pkcs5_keyivgen @pass_phrase, @salt
31
+ end
32
+
33
+ def encrypt(file, environment=nil)
34
+ environment ||= file.split('.')[-2].split('/').last
35
+ build_cipher(environment)
36
+ encrypted = @cipher.update(File.read file) + @cipher.final
37
+ write_to_file(Base64.encode64(encrypted), file + '.enc')
38
+ end
39
+
40
+ def decrypt(file, environment=nil)
41
+ environment ||= file.split('.')[-3].split('/').last
42
+ build_cipher(environment)
43
+ encrypted = Base64.decode64 File.read(file)
44
+ @cipher.decrypt.pkcs5_keyivgen @pass_phrase, @salt
45
+ decrypted = @cipher.update(encrypted) + @cipher.final
46
+ decrypted_file = file.split('.enc').first
47
+ write_to_file decrypted, decrypted_file
48
+ end
49
+
50
+ def obfuscate(env=nil, dir=nil, ext=nil)
51
+ ext = ext || "#{env}.env"
52
+ source_files(dir, ext).each { |file| encrypt(file, env) }
53
+ end
54
+
55
+ def expose(env=nil, dir=nil, ext=nil)
56
+ ext = ext || "#{env}.env.enc"
57
+ source_files(dir, ext).each { |file| decrypt(file, env) }
58
+ end
59
+
60
+ def get_key(environment, directory=nil)
61
+ env_key = environment.upcase + '_KEY'
62
+ key_file = source_files('./.', "#{directory}/#{environment}.key").first
63
+ case
64
+ when ENV[env_key].nil? && key_file.nil?
65
+ raise DeployKeyError, "No #{env_key} set."
66
+ when ENV[env_key]
67
+ ENV[env_key]
68
+ when File.exist?(key_file)
69
+ File.read(key_file).strip
70
+ end
71
+ end
72
+ end
73
+ end
data/lib/roro/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Roro
2
- VERSION = "0.3.18"
2
+ VERSION = "0.3.21"
3
3
  end
data/roro.gemspec CHANGED
@@ -14,37 +14,28 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/schadenfred/roro"
15
15
  spec.license = "MIT"
16
16
 
17
- # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
- # to allow pushing to a single host or delete this section to allow pushing to any host.
19
17
  if spec.respond_to?(:metadata)
20
-
21
18
  spec.metadata["homepage_uri"] = spec.homepage
22
19
  spec.metadata["source_code_uri"] = "https://github.com/schadenfred/roro"
23
-
24
20
  else
25
21
  raise "RubyGems 2.0 or newer is required to protect against " \
26
22
  "public gem pushes."
27
23
  end
28
24
 
29
- # Specify which files should be added to the gem when it is released.
30
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
31
25
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
32
26
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
33
27
  end
34
-
28
+
35
29
  spec.executables << 'roro'
36
- # spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
- # spec.bindir = "exe"
38
- # spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
39
30
  spec.require_paths = ['lib']
40
31
  spec.add_dependency 'gem-release', '~> 2.1'
41
- spec.add_dependency 'handsome_fencer-crypto', '~> 0.1.9'
42
32
  spec.add_dependency 'rake', '~> 13.0', '>= 13.0.1'
43
33
  spec.add_dependency 'sshkit', '~> 1.21'
44
34
  spec.add_dependency 'thor', '~> 1.0', '>= 1.0.1'
45
35
  spec.add_development_dependency 'bundler', '~> 2.1', '>= 2.1.4'
46
36
  spec.add_development_dependency 'byebug', '~> 11.1', '>= 11.1.3'
47
37
  spec.add_development_dependency 'handsome_fencer-test', '~> 0.2.2'
38
+ spec.add_development_dependency 'readline'
48
39
  spec.add_development_dependency 'mocha', '~> 1.11', '>= 1.11.2'
49
40
 
50
41
  end
@@ -0,0 +1,51 @@
1
+ FROM ruby:2.7.0-alpine AS builder
2
+
3
+ LABEL maintainer="your-docker-registry-email using RoRo"
4
+
5
+ # Add basic packages
6
+ RUN apk add --no-cache \
7
+ build-base \
8
+ postgresql-dev \
9
+ git \
10
+ nodejs \
11
+ yarn \
12
+ tzdata \
13
+ file
14
+
15
+ ## Set APP_HOME and BUNDLE_PATH as using ENV instructions:
16
+ ENV APP_HOME /usr/src/app/
17
+ ENV BUNDLE_PATH /gems
18
+
19
+ ## Create both as directories to make sure they exist:
20
+ RUN mkdir -p ${APP_HOME}
21
+ RUN mkdir ${BUNDLE_PATH}
22
+
23
+ ## Tell Docker to create volumes for our workspace and gems
24
+ ## so other containers can access them.
25
+
26
+ RUN gem install bundler:2.1.4
27
+
28
+ WORKDIR ${APP_HOME}
29
+
30
+ ## Create a Gemfile with just the Rails gem inside:
31
+ RUN echo -e "source 'https://rubygems.org'\ngem 'rails'" > Gemfile
32
+
33
+ ## Bundle to install rails:
34
+ RUN bundle install
35
+
36
+ ## Use Rails to generate a new app. We'll configure it later.
37
+ RUN bundle exec rails new . \
38
+ --database=postgresql \
39
+ --skip-bundle \
40
+ --skip-webpack-install
41
+ RUN bundle --jobs 4
42
+ RUN bundle exec rails webpacker:install
43
+ RUN bundle exec rails yarn:install
44
+ ## Tell docker not to create a layer:
45
+ FROM scratch AS export-stage
46
+
47
+ ## Copy the generated files onto the host. Note that because we are in a
48
+ ## new container, we don't have access to the previous ${APP_HOME}
49
+ ## variable and so we must hard code it as our source:
50
+ COPY --from=builder /usr/src/app/ .
51
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.18
4
+ version: 0.3.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - schadenfred
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-15 00:00:00.000000000 Z
11
+ date: 2021-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem-release
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.1'
27
- - !ruby/object:Gem::Dependency
28
- name: handsome_fencer-crypto
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 0.1.9
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 0.1.9
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -146,6 +132,20 @@ dependencies:
146
132
  - - "~>"
147
133
  - !ruby/object:Gem::Version
148
134
  version: 0.2.2
135
+ - !ruby/object:Gem::Dependency
136
+ name: readline
137
+ requirement: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ type: :development
143
+ prerelease: false
144
+ version_requirements: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
149
  - !ruby/object:Gem::Dependency
150
150
  name: mocha
151
151
  requirement: !ruby/object:Gem::Requirement
@@ -214,6 +214,7 @@ files:
214
214
  - lib/roro/configurator/eligibility.rb
215
215
  - lib/roro/configurator/okonomi.rb
216
216
  - lib/roro/configurator/omakase.rb
217
+ - lib/roro/crypto.rb
217
218
  - lib/roro/stories/greenfield.yml
218
219
  - lib/roro/stories/greenfield/rails.yml
219
220
  - lib/roro/stories/rollon.yml
@@ -308,6 +309,7 @@ files:
308
309
  - lib/roro/version.rb
309
310
  - roro.gemspec
310
311
  - roro/containers/.keep
312
+ - roro/containers/app/Dockerfile
311
313
  - roro/containers/ruby_image/Dockerfile
312
314
  - roro/containers/ruby_image/ci.env.enc
313
315
  - roro/keys/.keep
@@ -335,8 +337,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
335
337
  - !ruby/object:Gem::Version
336
338
  version: '0'
337
339
  requirements: []
338
- rubyforge_project:
339
- rubygems_version: 2.6.13
340
+ rubygems_version: 3.1.2
340
341
  signing_key:
341
342
  specification_version: 4
342
343
  summary: Containerization framwork for Ruby on Rails applications.