rumination 0.12.15 → 0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1cb9209a6606d4c0abac069401647b5d15eb4770
4
- data.tar.gz: 148af99713e68d13f7e079fb6cc9cae860fafa06
3
+ metadata.gz: f37ff443ac4ef4093c22b5fcf6d541433c0e6fc6
4
+ data.tar.gz: 884ba6986f9a85d092a58825e5916db578979e9c
5
5
  SHA512:
6
- metadata.gz: ad1ebd44572f6fec90797a3bfc5db771b32121eca714a1503167422f0142eb9111f89db9f25c0ea6449f1e91837672fb1d1c52adc4674305c6fbe8da44ef2eb8
7
- data.tar.gz: f28194587536f0affa9b4f412e1b421e59728876dd0acc600eb720871b87b5bfe9456956c6e070ac911b028efb5d8ac1edde608a4d4f73e01f2653650c29b816
6
+ metadata.gz: 7c59350b7d85331d45617617635047d5ab4ffc300e01566c070eceaa1b9a863a4efb9fbe41f44544cd81be8afca00fbbdf4dbb5dba45d24770ceb85733dbbabf
7
+ data.tar.gz: 7d9a018ce6310d3c12d03aa3f54ade2c765fad9622e41a7bd961f919306bd454d77105b30ea6c6bb8b984293a3eb993074295cbb970b987bf57708f89105237e
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /spec/fixtures/client_app/tmp/
@@ -3,89 +3,12 @@ require "dotenv/parser"
3
3
  require "active_support/core_ext/module/delegation"
4
4
  require "active_support/core_ext/object/blank"
5
5
  require_relative "../docker_compose"
6
- require_relative "../generate"
7
6
 
8
7
  module Rumination
9
8
  module Deploy
10
- Base ||= Struct.new(:target) do
9
+ class Base
11
10
  delegate :config, to: Deploy
12
11
 
13
- def initialize *args
14
- super
15
- load_application_config_if_exists
16
- load_target_config
17
- end
18
-
19
- def call
20
- setup_outside_env
21
- DockerCompose.build.down("--remove-orphans").up
22
- app_container.run("bundle install") if cached_gems?
23
- yield self if block_given?
24
- app_container.run("rake deploy:inside:unload[#{target}]")
25
- raise DeployError unless $? == 0
26
- app_container.run("rake deploy:inside:finish[#{target}]")
27
- raise DeployError unless $? == 0
28
- end
29
-
30
- def bootstrap
31
- raise BootstrappedAlready if bootstrapped?
32
- copy_dump_if_requested
33
- app_container.run("rake deploy:inside:write_env_file[#{target}]")
34
- app_container.run("rake deploy:inside:bootstrap[#{target}]")
35
- raise BootstrapError unless $? == 0
36
- end
37
-
38
- def bootstrap_undo
39
- setup_outside_env
40
- DockerCompose.down("--remove-orphans", "-v")
41
- raise BootstrapError unless $? == 0
42
- end
43
-
44
- def load_target_config
45
- load target_config_path
46
- rescue LoadError => e
47
- raise UnknownTarget, e.message
48
- end
49
-
50
- def setup_outside_env
51
- ENV.update env
52
- end
53
-
54
- def env
55
- env = docker_machine_env
56
- env["VIRTUAL_HOST"] = config.virtual_host
57
- if config.letsencrypt_email.present?
58
- env["LETSENCRYPT_HOST"] = config.virtual_host
59
- env["LETSENCRYPT_EMAIL"] = config.letsencrypt_email
60
- end
61
- env["COMPOSE_FILE"] = config.compose_file if config.compose_file
62
- env
63
- end
64
-
65
- def write_env_file
66
- File.open(env_file_path, "w") do |io|
67
- persistent_env.merge(generated_passwords).each do |var, val|
68
- io.puts %Q[export #{var}="#{val}"]
69
- end
70
- end
71
- end
72
-
73
- def rm_env_file
74
- FileUtils.rm(env_file_path)
75
- end
76
-
77
- def persistent_env
78
- config.persistent_env || {}
79
- end
80
-
81
- def generated_passwords
82
- password_vars.map{|var| [var, generate_password]}.to_h
83
- end
84
-
85
- def generate_password
86
- Generate.password
87
- end
88
-
89
12
  private
90
13
 
91
14
  def copy_dump_if_requested
@@ -96,21 +19,10 @@ module Rumination
96
19
  app_container.cp_to_container source, target
97
20
  end
98
21
 
99
- def load_application_config_if_exists
100
- load application_config_path if File.exists?(application_config_path)
101
- end
102
-
103
- def application_config_path
104
- "./config/deploy/application.rb"
105
- end
106
-
107
22
  def target_config_path
108
23
  (config.target_config_path || "./config/deploy/targets/%s.rb") % target
109
24
  end
110
25
 
111
- def password_vars
112
- config.generate_passwords || Array(config.generate_password)
113
- end
114
26
 
115
27
  def docker_machine_env
116
28
  dm_env_str = if config.docker_machine
@@ -125,10 +37,6 @@ module Rumination
125
37
  app_container.has_file?(env_file_path)
126
38
  end
127
39
 
128
- def env_file_path
129
- "/opt/app/env"
130
- end
131
-
132
40
  def container(name)
133
41
  DockerCompose::Container.new(name)
134
42
  end
@@ -1,8 +1,17 @@
1
- require_relative "base"
1
+ require "ostruct"
2
+ require_relative "../generate"
2
3
 
3
4
  module Rumination
4
5
  module Deploy
5
6
  module ClassMethods
7
+ def factory_reset!
8
+ config.clear
9
+ configure do |config|
10
+ config.bootstrap = OpenStruct.new
11
+ end
12
+ self.target = nil
13
+ end
14
+
6
15
  def docker_env
7
16
  env = {}
8
17
  if config.docker_machine
@@ -25,34 +34,46 @@ module Rumination
25
34
  raise UnknownTarget, e.message
26
35
  end
27
36
 
28
- def bootstrap target:
29
- deploy_class.new(target).call do |deploy|
30
- deploy.bootstrap
37
+ def write_env_file path
38
+ File.open(path, "w") do |io|
39
+ persistent_env.merge(generated_passwords).each do |var, val|
40
+ io.puts %Q[export #{var}="#{val}"]
41
+ end
31
42
  end
32
43
  end
33
44
 
34
- def bootstrap_undo target:
35
- deploy_class.new(target).bootstrap_undo
45
+ def files_to_copy_on_bootstrap
46
+ (config.bootstrap && config.bootstrap.copy_files) || []
47
+ end
48
+
49
+ def files_to_copy_on_deploy
50
+ config.copy_files || []
51
+ end
52
+
53
+ def app_container_name
54
+ config.app_container || :app
36
55
  end
37
56
 
38
- def app target:
39
- deploy_class.new(target).call
57
+ def app_container_full_name
58
+ "#{compose_project_name}_#{app_container_name}_1"
40
59
  end
41
60
 
42
- def env target:
43
- deploy_class.new(target).env
61
+ def compose_project_name
62
+ (ENV["COMPOSE_PROJECT_NAME"] || File.basename(Dir.pwd)).gsub("_","")
44
63
  end
45
64
 
46
- def write_env_file target:
47
- deploy_class.new(target).write_env_file
65
+ private
66
+
67
+ def persistent_env
68
+ config.persistent_env || {}
48
69
  end
49
70
 
50
- def rm_env_file target:
51
- deploy_class.new(target).rm_env_file
71
+ def generated_passwords
72
+ password_vars.map{|var| [var, Generate.password]}.to_h
52
73
  end
53
74
 
54
- def deploy_class
55
- config.deploy_class || Base
75
+ def password_vars
76
+ config.generate_passwords || Array(config.generate_password)
56
77
  end
57
78
  end
58
79
  end
@@ -13,5 +13,6 @@ module Rumination
13
13
  BootstrapError = Class.new(DeployError)
14
14
  BootstrappedAlready = Class.new(BootstrapError)
15
15
  DatabaseInitError = Class.new(BootstrapError)
16
+ factory_reset!
16
17
  end
17
18
  end
@@ -1,43 +1,73 @@
1
+ require "dotenv"
2
+ require "active_support/core_ext/string/strip"
3
+
1
4
  task :deploy, [:target] => "deploy:default"
2
5
 
3
- module Kernel
4
- alias_method :orig_puts, :puts
5
- def hash_puts *args
6
- print "# "
7
- orig_puts *args
8
- end
6
+ namespace :deploy do
7
+ task :default, [:target] => %w[
8
+ start
9
+ finish
10
+ ]
9
11
 
10
- def with_hash_puts
11
- Kernel.send :alias_method, :puts, :hash_puts
12
- yield
13
- ensure
14
- Kernel.send :alias_method, :puts, :orig_puts
15
- end
16
- end
12
+ task :bootstrap, [:target] => %w[
13
+ start
14
+ bootstrap:env_file
15
+ bootstrap:copy_files
16
+ bootstrap:db
17
+ on:bootstrapped
18
+ finish
19
+ ]
17
20
 
18
- namespace :deploy do
19
21
  task :env, [:target] => :load_target_config_filterd do |t, args|
20
22
  puts
21
23
  Rumination::Deploy.docker_env.each do |var, val|
22
24
  puts %Q[export #{var}="#{val}"]
23
25
  end
24
- puts <<-__
25
-
26
- # to load this into a bash environment run:
27
- #
28
- # eval $(rake deploy:env[#{Rumination::Deploy.target}])
29
-
26
+ puts <<-__.strip_heredoc
27
+ # to load this into a bash environment run:
28
+ #
29
+ # eval $(rake deploy:env[#{Rumination::Deploy.target}])
30
30
  __
31
31
  end
32
32
 
33
- task :default, [:target] => :setup_docker_env do |t, args|
33
+ namespace :on do
34
+ task :deployed
35
+ task :bootstrapped
34
36
  end
35
37
 
36
- task :bootstrap, [:target] => :setup_docker_env do |t, args|
38
+ namespace :bootstrap do
39
+ task :env_file do
40
+ env_file_path = "/opt/app/env"
41
+ temp_file_path = "tmp/#{Rumination::Deploy.target}.env"
42
+ mkdir_p File.dirname(temp_file_path)
43
+ Rumination::Deploy.write_env_file(temp_file_path)
44
+ container = Rumination::Deploy.app_container_full_name
45
+ sh "docker cp #{temp_file_path} #{container}:#{env_file_path}"
46
+ end
47
+
48
+ task :copy_files do
49
+ container = Rumination::Deploy.app_container_full_name
50
+ Rumination::Deploy.files_to_copy_on_bootstrap.each do |source, target|
51
+ sh "docker cp #{source} #{container}:#{target}"
52
+ end
53
+ end
54
+
55
+ task :db
56
+
57
+ task :undo, [:target] => %w[confirm_undo] do |t, args|
58
+ sh "docker-compose down --remove-orphans -v"
59
+ end
60
+
61
+ task :confirm_undo do |t, args|
62
+ require "highline/import"
63
+ question = "Do you really want to undo the bootstrap (database will be dropped)?"
64
+ abort("Bootstrap undo canceled, you didn't mean it") unless agree(question)
65
+ end
37
66
  end
38
67
 
39
68
  task :setup_docker_env, [:target] => :load_target_config do |t, args|
40
69
  puts "Setting up '#{Rumination::Deploy.target}' target docker environment"
70
+ Dotenv.load
41
71
  ENV.update Rumination::Deploy.docker_env
42
72
  end
43
73
 
@@ -53,14 +83,38 @@ namespace :deploy do
53
83
  end
54
84
  end
55
85
 
56
- namespace :bootstrap do
57
- task :undo, [:target] => %w[confirm_undo] do |t, args|
58
- end
86
+ task :start, [:target] => %w[
87
+ setup_docker_env
88
+ switch_containers
89
+ ]
59
90
 
60
- task :confirm_undo do |t, args|
61
- require "highline/import"
62
- question = "Do you really want to undo the bootstrap (database will be dropped)?"
63
- abort("Bootstrap undo canceled, you didn't mean it") unless agree(question)
91
+ task :finish => %w[
92
+ copy_files
93
+ on:deployed
94
+ ]
95
+
96
+ task :switch_containers => %w[
97
+ build_containers
98
+ shut_down_services
99
+ start_services
100
+ ]
101
+
102
+ task :build_containers do
103
+ sh "docker-compose build"
104
+ end
105
+
106
+ task :shut_down_services do
107
+ sh "docker-compose down --remove-orphans"
108
+ end
109
+
110
+ task :start_services do
111
+ sh "docker-compose up -d"
112
+ end
113
+
114
+ task :copy_files do
115
+ container = Rumination::Deploy.app_container_full_name
116
+ Rumination::Deploy.files_to_copy_on_deploy.each do |source, target|
117
+ sh "docker cp #{source} #{container}:#{target}"
64
118
  end
65
119
  end
66
120
  end
@@ -0,0 +1,14 @@
1
+ module Kernel
2
+ alias_method :orig_puts, :puts
3
+ def hash_puts *args
4
+ print "# "
5
+ orig_puts *args
6
+ end
7
+
8
+ def with_hash_puts
9
+ Kernel.send :alias_method, :puts, :hash_puts
10
+ yield
11
+ ensure
12
+ Kernel.send :alias_method, :puts, :orig_puts
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Rumination
2
- VERSION = "0.12.15"
2
+ VERSION = "0.13"
3
3
  end
data/lib/rumination.rb CHANGED
@@ -10,15 +10,15 @@ require_relative "rumination/dev_user"
10
10
  require_relative "rumination/pg"
11
11
 
12
12
  module Rumination
13
- def self.factory_reset
13
+ def self.factory_reset!
14
14
  config.clear
15
15
  if defined? Rumination::Deploy
16
- Rumination::Deploy.config.clear
16
+ Rumination::Deploy.factory_reset!
17
17
  end
18
18
  configure do |config|
19
19
  config.pg = Rumination::Pg.config
20
20
  end
21
21
  end
22
22
 
23
- factory_reset
23
+ factory_reset!
24
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rumination
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.15
4
+ version: '0.13'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Baguinski
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-04-25 00:00:00.000000000 Z
11
+ date: 2017-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -158,6 +158,7 @@ files:
158
158
  - lib/rumination/tasks/db/setup.rake
159
159
  - lib/rumination/tasks/deploy.rake
160
160
  - lib/rumination/tasks/deploy/inside.rake
161
+ - lib/rumination/tasks/with_hash_puts.rake
161
162
  - lib/rumination/version.rb
162
163
  - rumination.gemspec
163
164
  homepage: https://github.com/artm/rumination