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 +4 -4
- data/lib/shipper/executor.rb +10 -3
- data/lib/shipper/host.rb +6 -4
- data/lib/shipper/logger.rb +4 -0
- data/lib/shipper/run.rb +13 -3
- data/lib/shipper/service.rb +12 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edf594bb44ed2b293851240ce12773bfe0caa22abba7306d2f212b259694b658
|
4
|
+
data.tar.gz: 6eef6adcdf7459dfcfe6849f6282440bff9711cfa1bbfd6eb7593d26bfee0526
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd439c93e42cb10c935b2a055dbe50e9b9703eab6fca04e2c57c3002f0acc69fee53dc8e3527a5b006e879cf61a751cbb40b83d135e06dbc27c04b227f21e7f4
|
7
|
+
data.tar.gz: f426c088e38cb2f53651f7db847b23d44fee4185dc3c022215c8fef7ac03642be4af9bfb6519f24e16e30276818a3315c01bac1048e2b4dcf70e2f3e9caf973e
|
data/lib/shipper/executor.rb
CHANGED
@@ -34,17 +34,24 @@ module Shipper
|
|
34
34
|
logger.bold("Exec local '#{cmd}'")
|
35
35
|
|
36
36
|
Dir.chdir(path) do
|
37
|
-
Open3.
|
38
|
-
logger.puts(
|
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
|
data/lib/shipper/host.rb
CHANGED
@@ -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,
|
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'
|
data/lib/shipper/logger.rb
CHANGED
data/lib/shipper/run.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/shipper/service.rb
CHANGED
@@ -2,24 +2,30 @@
|
|
2
2
|
|
3
3
|
module Shipper
|
4
4
|
class Service
|
5
|
-
attr_reader :name, :
|
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
|
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.
|
78
|
+
rubygems_version: 3.1.2
|
79
79
|
signing_key:
|
80
80
|
specification_version: 4
|
81
81
|
summary: Docker shipping
|