deplomat 0.1.1 → 0.1.3
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/VERSION +1 -1
- data/deplomat.gemspec +5 -3
- data/lib/deplomat/local_node.rb +4 -0
- data/lib/deplomat/node.rb +13 -11
- data/lib/deplomat/remote_node.rb +8 -7
- data/spec/fixtures/upload1/except1 +0 -0
- data/spec/remote_node_spec.rb +8 -1
- data/spec/spec_helper.rb +14 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19c9e18dffd7b609ac6fa97ed1dfba3657dac02f
|
4
|
+
data.tar.gz: 56669fbf77b52f128336a5e2195df31bfc12dc9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9aab773fa6a23eb5025dcd73bc83ab614d1c4e4c463bd436e3ed42d20ca81625abb9c25ff65be28b8c04b8f0b19815ffc5123726c5cb11c0140139a8378f333c
|
7
|
+
data.tar.gz: 3264cff003a6f8b327e98a516d97ee49b51aa8753035e003bacfbb42664b6844cf21cf0920f4aa487c52e369fbc95f638b941696d8e4bfa134d998e144b59fa9
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/deplomat.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: deplomat 0.1.
|
5
|
+
# stub: deplomat 0.1.3 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "deplomat"
|
9
|
-
s.version = "0.1.
|
9
|
+
s.version = "0.1.3"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Roman Snitko"]
|
14
|
-
s.date = "
|
14
|
+
s.date = "2017-04-12"
|
15
15
|
s.description = "Stack agnostic deployment system that uses bash and ssh commands"
|
16
16
|
s.email = "roman.snitko@gmail.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"README.rdoc",
|
28
28
|
"Rakefile",
|
29
29
|
"VERSION",
|
30
|
+
"deplomat.gemspec",
|
30
31
|
"examples/simple_deploy.rb",
|
31
32
|
"lib/deplomat.rb",
|
32
33
|
"lib/deplomat/directives.rb",
|
@@ -38,6 +39,7 @@ Gem::Specification.new do |s|
|
|
38
39
|
"spec/fixtures/cleaning/.keep",
|
39
40
|
"spec/fixtures/dir1/file1",
|
40
41
|
"spec/fixtures/dir1/file2",
|
42
|
+
"spec/fixtures/upload1/except1",
|
41
43
|
"spec/fixtures/upload1/uploaded_file1",
|
42
44
|
"spec/fixtures/upload1/uploaded_file2",
|
43
45
|
"spec/local_node_spec.rb",
|
data/lib/deplomat/local_node.rb
CHANGED
data/lib/deplomat/node.rb
CHANGED
@@ -5,9 +5,11 @@ module Deplomat
|
|
5
5
|
attr_accessor :log_to, :raise_exceptions, :logfile
|
6
6
|
attr_reader :current_path
|
7
7
|
|
8
|
-
def initialize(logfile: "#{Dir.pwd}/deplomat.log", log_to: [:stdout])
|
9
|
-
@log_to
|
10
|
-
@logfile
|
8
|
+
def initialize(logfile: "#{Dir.pwd}/deplomat.log", log_to: [:stdout], path: nil, raise_exceptions: true)
|
9
|
+
@log_to = log_to
|
10
|
+
@logfile = logfile
|
11
|
+
@raise_exceptions = raise_exceptions
|
12
|
+
self.cd(path) if path
|
11
13
|
end
|
12
14
|
|
13
15
|
def execute(command, path=@current_path, message: [], stdout_source: :stdout, log_command: true)
|
@@ -45,7 +47,7 @@ module Deplomat
|
|
45
47
|
log(error_out + "\n", color: 'red')
|
46
48
|
if @raise_exceptions
|
47
49
|
self.close if self.respond_to?(:close)
|
48
|
-
raise Deplomat::ExecutionError
|
50
|
+
raise Deplomat::ExecutionError
|
49
51
|
end
|
50
52
|
end
|
51
53
|
yield if block_given?
|
@@ -99,7 +101,7 @@ module Deplomat
|
|
99
101
|
end
|
100
102
|
|
101
103
|
def git_push(remote="origin", branch="master")
|
102
|
-
execute("git push
|
104
|
+
execute("git push #{remote} #{branch}")
|
103
105
|
end
|
104
106
|
|
105
107
|
def git_pull(remote="origin", branch="master")
|
@@ -126,13 +128,13 @@ module Deplomat
|
|
126
128
|
entries_by_date.each { |entry| remove("#{path}#{entry}") }
|
127
129
|
end
|
128
130
|
|
129
|
-
|
131
|
+
def log(line, color: 'light_black')
|
132
|
+
@message_color = color
|
133
|
+
# Only calls log methods mentioned in the @log_to property
|
134
|
+
@log_to.each { |logger| self.send("log_to_#{logger}", line) }
|
135
|
+
end
|
130
136
|
|
131
|
-
|
132
|
-
@message_color = color
|
133
|
-
# Only calls log methods mentioned in the @log_to property
|
134
|
-
@log_to.each { |logger| self.send("log_to_#{logger}", line) }
|
135
|
-
end
|
137
|
+
private
|
136
138
|
|
137
139
|
def log_to_file(line)
|
138
140
|
if @logfile
|
data/lib/deplomat/remote_node.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Deplomat
|
2
2
|
class RemoteNode < Node
|
3
3
|
|
4
|
-
def initialize(host:, port: 22, user: "deploy")
|
5
|
-
super()
|
4
|
+
def initialize(host:, port: 22, user: "deploy", raise_exceptions: true)
|
5
|
+
super(logfile: '~/deplomat.log')
|
6
6
|
|
7
7
|
# Create ControlMasters dir, user might not have it
|
8
8
|
unless File.exists?("#{ENV['HOME']}/.ssh/controlmasters/")
|
@@ -30,16 +30,17 @@ module Deplomat
|
|
30
30
|
end
|
31
31
|
|
32
32
|
alias :local_execute :execute
|
33
|
-
def execute(command, path=@current_path, message: [], env_vars: '', login_shell: false, stdout_source: :stdout)
|
33
|
+
def execute(command, path=@current_path, message: [], env_vars: '', login_shell: false, stdout_source: :stdout, log_command: true)
|
34
34
|
|
35
|
-
log("(#{@host}) --> " + command + "\n", color: "white")
|
35
|
+
log("(#{@host}) --> " + command + "\n", color: "white") if log_command
|
36
36
|
command = "#{env_vars} cd #{path} && #{command}" if path
|
37
37
|
command = "bash -l -c \"#{command}\"" if login_shell
|
38
38
|
super("#{@ssh_command} '#{command}'", nil, message: message, stdout_source: stdout_source, log_command: false)
|
39
39
|
end
|
40
40
|
|
41
|
-
def upload(what, where)
|
42
|
-
|
41
|
+
def upload(what, where, except: nil)
|
42
|
+
except = "--exclude '#{except}'" if except
|
43
|
+
local_execute "rsync -arzve 'ssh -p #{@port}' #{except} --delete #{what} #{@user}@#{@host}:#{where}", nil
|
43
44
|
end
|
44
45
|
|
45
46
|
def close
|
@@ -56,7 +57,7 @@ module Deplomat
|
|
56
57
|
def path_exist?(path)
|
57
58
|
old_raise_exceptions = @raise_exceptions
|
58
59
|
@raise_exceptions = false
|
59
|
-
!(execute("ls #{path}", nil){ @raise_exceptions = old_raise_exceptions}[:status] > 0)
|
60
|
+
!(execute("ls #{path}", nil, log_command: false){ @raise_exceptions = old_raise_exceptions}[:status] > 0)
|
60
61
|
end
|
61
62
|
|
62
63
|
end
|
File without changes
|
data/spec/remote_node_spec.rb
CHANGED
@@ -48,8 +48,9 @@ describe Deplomat::RemoteNode do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it "uploads files from localhost to the node" do
|
51
|
-
@node.upload("#{@local_fixtures_dir}/upload1/*", "#{@fixtures_dir}/uploaded1/")
|
51
|
+
@node.upload("#{@local_fixtures_dir}/upload1/*", "#{@fixtures_dir}/uploaded1/", except: 'except1')
|
52
52
|
expect(@node.execute("ls #{@fixtures_dir}/uploaded1/")[:out]).to have_files("uploaded_file1", "uploaded_file2")
|
53
|
+
expect(@node.execute("ls #{@fixtures_dir}/uploaded1/")[:out]).to not_have_files("except1")
|
53
54
|
end
|
54
55
|
|
55
56
|
it "changes current directory" do
|
@@ -81,6 +82,12 @@ describe Deplomat::RemoteNode do
|
|
81
82
|
expect(@node.execute("ls dir1")[:out]).to have_files("file1", "file2", "subdir1")
|
82
83
|
end
|
83
84
|
|
85
|
+
it "doesn't log ls command when checking if folder exists in `cd`" do
|
86
|
+
expect(@node).to receive(:log).with("(deplomat-test-node) --> ls /home/deploy/deplomat/dir2\n", { color: "white"}).exactly(0).times
|
87
|
+
@node.cd("#{@fixtures_dir}/dir2")
|
88
|
+
allow(@node).to receive(:log)
|
89
|
+
end
|
90
|
+
|
84
91
|
end
|
85
92
|
|
86
93
|
describe "handling status and errors" do
|
data/spec/spec_helper.rb
CHANGED
@@ -15,3 +15,17 @@ RSpec::Matchers.define :have_files do |*expected|
|
|
15
15
|
"expected these files in the directory:\n\t#{actual.split("\n").inspect}\nwould include all of these:\n\t#{expected.inspect}"
|
16
16
|
end
|
17
17
|
end
|
18
|
+
|
19
|
+
RSpec::Matchers.define :not_have_files do |*expected|
|
20
|
+
match do |actual|
|
21
|
+
actual = actual.split("\n")
|
22
|
+
actual.pop if actual.last == ""
|
23
|
+
expected.each do |e|
|
24
|
+
return false if actual.include?(e)
|
25
|
+
end
|
26
|
+
true
|
27
|
+
end
|
28
|
+
failure_message do |actual|
|
29
|
+
"expected these files in the directory:\n\t#{actual.split("\n").inspect}\nwould NOT include any of these:\n\t#{expected.inspect}"
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deplomat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Snitko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sys-proctable
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- spec/fixtures/cleaning/.keep
|
109
109
|
- spec/fixtures/dir1/file1
|
110
110
|
- spec/fixtures/dir1/file2
|
111
|
+
- spec/fixtures/upload1/except1
|
111
112
|
- spec/fixtures/upload1/uploaded_file1
|
112
113
|
- spec/fixtures/upload1/uploaded_file2
|
113
114
|
- spec/local_node_spec.rb
|