mr-shipper 0.0.5 → 0.1.0

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: 31a86d4c088e0331f1ee1a54b56bec7ad625064c32da630c0c2e1d18089df45d
4
- data.tar.gz: bc8d182606080ab3be29c8761d6d38b7416ff5b349cc5213a07b4ff3f14261ec
3
+ metadata.gz: edf594bb44ed2b293851240ce12773bfe0caa22abba7306d2f212b259694b658
4
+ data.tar.gz: 6eef6adcdf7459dfcfe6849f6282440bff9711cfa1bbfd6eb7593d26bfee0526
5
5
  SHA512:
6
- metadata.gz: 2f110e2d4973736e313503c6d5a032cd33ddda218eaa43f662accabd970cdf33ca36cd0c9baa5a14f40381524eab9410e781b633cd4385ae0efa6e4fe4bb2118
7
- data.tar.gz: c8dbaeea4aa1deeaec1b7c4ad9a10a6e9c60dee949d5914f93177bb8747f845f05e09fe8d7615c11db35259189f31371ae198abb9c4ade9e2d09a0b6e839f2a1
6
+ metadata.gz: fd439c93e42cb10c935b2a055dbe50e9b9703eab6fca04e2c57c3002f0acc69fee53dc8e3527a5b006e879cf61a751cbb40b83d135e06dbc27c04b227f21e7f4
7
+ data.tar.gz: f426c088e38cb2f53651f7db847b23d44fee4185dc3c022215c8fef7ac03642be4af9bfb6519f24e16e30276818a3315c01bac1048e2b4dcf70e2f3e9caf973e
@@ -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_thread|
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
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,12 +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)
8
- @config = ::Shipper::Config.new(env: options[0] || 'production')
10
+ pop_env!(options)
11
+ @config = ::Shipper::Config.new(env: env)
9
12
  @options = options.empty? ? nil : options
10
- @options&.delete(0) # remove env
11
13
  end
12
14
 
13
15
  def perform
@@ -23,5 +25,13 @@ module Shipper
23
25
  def restart?
24
26
  options&.size == 1 && options[0] == 'restart'
25
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
26
36
  end
27
37
  end
@@ -2,24 +2,30 @@
2
2
 
3
3
  module Shipper
4
4
  class Service
5
- attr_reader :name, :path, :before_build, :repo
5
+ attr_reader :name, :options, :path
6
6
 
7
7
  def initialize(name, options)
8
8
  @name = name
9
+ @options = options
9
10
  @path = "#{Dir.pwd}/#{options['path']}"
10
- @before_build = options['before_build']
11
- @repo = options['repo']
12
11
  end
13
12
 
14
13
  def ship!
15
14
  executor.cd(path)
16
- before_build&.each { |cmd| exec(cmd) }
17
- exec "docker build . -t #{repo}"
18
- exec "docker push #{repo}"
15
+ options['before_build']&.each { |cmd| exec(cmd) }
16
+ exec "docker build . -t #{options.fetch('repo')} #{build_args}".strip
17
+ exec "docker push #{options.fetch('repo')}"
19
18
  end
20
19
 
21
20
  private
22
21
 
22
+ def build_args
23
+ return nil if options['args'].nil?
24
+
25
+ options['args'].map { |key, value| "--build-arg #{key}=#{value}" }
26
+ .join(' ')
27
+ end
28
+
23
29
  def exec(cmd)
24
30
  executor.exec(cmd)
25
31
  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.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rostyslav Safonov
@@ -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.6
78
+ rubygems_version: 3.1.2
79
79
  signing_key:
80
80
  specification_version: 4
81
81
  summary: Docker shipping