mr-shipper 0.0.4 → 0.0.9

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
  SHA256:
3
- metadata.gz: 1d8bafba34011cd5cae3f192c1295fe9000a7e7fef372e87dff5d5aa9ddc3e87
4
- data.tar.gz: 037550c907e063a829f97b66a039a1fda746c500572c07728c6e2c8c7ebe156c
3
+ metadata.gz: 305478ea7dce83929bc1baf921e612486097332fd12509724e289ddcd97f01a7
4
+ data.tar.gz: 84f4b81e6e8d790287a2cdc82b2680a613a7eded1c0a83b1d71952548ea6dc84
5
5
  SHA512:
6
- metadata.gz: 905efb0a06fb836bbee45683da2a0c7c5d13a3f21b48ff9b1036865201536548b10f95c5615f6091e95c552e8fb4f0b5aac3d0f456c27eb05210b1b593cee526
7
- data.tar.gz: c84bbf53143af3e6272e1e10f4f047ce3c92e9c37d7d4cd00f91e9c471acf39551ca77f1fa194405ed0f5afaf7e34f95aa654a89631bbe6594d772566cff7b65
6
+ metadata.gz: bb5e3d17bd095b5afc081e8e55fa1b5378123cd3dcdeeb7b21491c75a9be86d14fa11e1614bf9d3134596c164500736920ee57aba7a1da4ac96b74e928403fa9
7
+ data.tar.gz: 1efc384e8a116d7f6c234003d8614ccaad696e9d719918843247549bf56e82ba559268576f359c3ce58ff19588a055ce51d1f5596b955202498792ae395c8a7e
@@ -6,11 +6,35 @@ require 'yaml'
6
6
 
7
7
  module Shipper
8
8
  class Config < ::OpenStruct
9
- include Singleton
9
+ def initialize(config_path: nil, env: nil)
10
+ config_path ||= "#{Dir.pwd}/shipper.yml"
11
+ env ||= 'production'
10
12
 
11
- def initialize
12
- config = ::YAML::load_file("#{Dir.pwd}/shipper.yml")
13
+ config = load_env_config(config_path, env)
13
14
  super(config)
14
15
  end
16
+
17
+ private
18
+
19
+ def load_env_config(config_path, env)
20
+ full_config = ::YAML.load_file(config_path)
21
+ check_env_available!(full_config, env)
22
+
23
+ hosts = full_config.delete('hosts')
24
+ services = full_config.delete('services')
25
+
26
+ full_config['host'] = hosts[env]
27
+ full_config['services'] = services[env]
28
+ full_config
29
+ end
30
+
31
+ def check_env_available!(config, env)
32
+ services = !config.dig('services', env).nil?
33
+ hosts = !config.dig('hosts', env).nil?
34
+
35
+ puts "Error: No host available for env '#{env}'" unless hosts
36
+ puts "Error: No services available for env '#{env}'" unless services
37
+ exit(0) if !hosts || !services
38
+ end
15
39
  end
16
40
  end
@@ -32,7 +32,7 @@ module Shipper
32
32
 
33
33
  def load_services
34
34
  config.services
35
- .select { |name, _| !service_ignored?(name) }
35
+ .reject { |name, _| service_ignored?(name) }
36
36
  .map { |name, config| ::Shipper::Service.new(name, config) }
37
37
  end
38
38
 
@@ -25,7 +25,7 @@ module Shipper
25
25
  def exec_host(cmd)
26
26
  logger.bold("Exec host '#{cmd}'")
27
27
 
28
- host_bash.exec!("cd #{path}; #{cmd}") do |channel, stream, data|
28
+ host_bash.exec!("cd #{path}; #{cmd}") do |_channel, _stream, data|
29
29
  logger.puts(data)
30
30
  end
31
31
  end
@@ -34,17 +34,24 @@ module Shipper
34
34
  logger.bold("Exec local '#{cmd}'")
35
35
 
36
36
  Dir.chdir(path) do
37
- Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
38
- logger.puts(stdout.gets)
39
- logger.puts(stderr.gets)
37
+ status = Open3.popen2e(cmd) do |_stdin, stdout, wait_thread|
38
+ stdout.each_line { |line| logger.puts(line) }
40
39
 
41
- wait_thr.value
40
+ wait_thread.value
42
41
  end
42
+ fall_down!(cmd) unless status.exitstatus.zero?
43
43
  end
44
44
  end
45
45
 
46
46
  def logger
47
47
  ::Shipper::Logger.instance
48
48
  end
49
+
50
+ def fall_down!(failed_cmd)
51
+ logger.error 'Command finished with non-zero code:'
52
+ logger.puts "'#{failed_cmd}'"
53
+ logger.puts 'halt.'
54
+ exit
55
+ end
49
56
  end
50
57
  end
@@ -2,10 +2,13 @@
2
2
 
3
3
  module Shipper
4
4
  class Host
5
- attr_accessor :user, :host, :location, :executor
5
+ attr_accessor :user, :host, :port, :location, :executor
6
6
 
7
7
  def initialize(options)
8
- @user, @host = options['ssh_entry'].split('@')
8
+ @user, full_host = options['ssh_entry'].split('@')
9
+ @host, @port = full_host.split(':')
10
+ @port = @port || 22
11
+
9
12
  @location = options['location']
10
13
  @executor = nil
11
14
  end
@@ -15,9 +18,8 @@ module Shipper
15
18
  end
16
19
 
17
20
  def restart!(pull_changes: false)
18
- ::Net::SSH.start(host, user) do |ssh|
21
+ ::Net::SSH.start(host, user, port: port) do |ssh|
19
22
  load_executor(ssh)
20
-
21
23
  executor.cd location
22
24
  exec 'docker-compose pull' if pull_changes
23
25
  exec 'docker-compose down'
@@ -20,6 +20,10 @@ module Shipper
20
20
  puts "# #{phrase}".bold.yellow
21
21
  end
22
22
 
23
+ def error(phrase)
24
+ puts "# #{phrase}".bold.red
25
+ end
26
+
23
27
  def puts(phrase)
24
28
  super(phrase)
25
29
  end
@@ -2,11 +2,14 @@
2
2
 
3
3
  module Shipper
4
4
  class Run
5
- attr_reader :config, :options
5
+ attr_reader :config, :options, :env
6
+
7
+ COMMANDS = %w[restart].freeze
6
8
 
7
9
  def initialize(options)
10
+ pop_env!(options)
11
+ @config = ::Shipper::Config.new(env: env)
8
12
  @options = options.empty? ? nil : options
9
- @config = ::Shipper::Config.instance
10
13
  end
11
14
 
12
15
  def perform
@@ -22,5 +25,13 @@ module Shipper
22
25
  def restart?
23
26
  options&.size == 1 && options[0] == 'restart'
24
27
  end
28
+
29
+ def pop_env!(options)
30
+ if options.empty? || COMMANDS.include?(options[0])
31
+ @env = 'production'
32
+ else
33
+ @env = options.delete_at(0)
34
+ end
35
+ end
25
36
  end
26
37
  end
@@ -13,7 +13,7 @@ module Shipper
13
13
 
14
14
  def ship!
15
15
  executor.cd(path)
16
- before_build.each { |cmd| exec(cmd) } if before_build
16
+ before_build&.each { |cmd| exec(cmd) }
17
17
  exec "docker build . -t #{repo}"
18
18
  exec "docker push #{repo}"
19
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mr-shipper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rostyslav Safonov
@@ -11,33 +11,33 @@ cert_chain: []
11
11
  date: 2019-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: net-ssh
14
+ name: colorize
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: '5.1'
19
+ version: 0.8.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: '5.1'
26
+ version: 0.8.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: colorize
28
+ name: net-ssh
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.8.1
33
+ version: '5.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.8.1
40
+ version: '5.1'
41
41
  description: The simple way to deploy docker-compose based apps
42
42
  email: elhowm@gmail.com
43
43
  executables:
@@ -75,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
75
  - !ruby/object:Gem::Version
76
76
  version: '0'
77
77
  requirements: []
78
- rubygems_version: 3.0.3
78
+ rubygems_version: 3.1.2
79
79
  signing_key:
80
80
  specification_version: 4
81
81
  summary: Docker shipping