kitchen-transport-express 1.0.2 → 1.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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a21e10d9f04926c86f5594321e1beef3d71c314ed61649ff1476cf4d632a4ee
|
4
|
+
data.tar.gz: 2c0d14e4ae4cc96111e2fea95fde8affc3f89686867910c459007bb06c110bd2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9aa3d0be0cb45cf030333df24ca40431e1c387c7a3d0a086dacb03c5fa2c64f7e15bd02f98e1a5b70374950d986be90dd6757b0faeb460baa614992cca477af
|
7
|
+
data.tar.gz: 95e16299ded0673a3c7fd85db9e04defe7c0d04db6c51459024cd75badd8b3a1672485f8d7f0e40af7e21c6aaa9964e153676a390173d6e7e3a068939905df4d
|
data/.github/workflows/ruby.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# kitchen-transport-express CHANGELOG
|
2
2
|
|
3
|
+
## 1.1.0
|
4
|
+
* feat: ⚡️ threaded execution of the upload and extract phase
|
5
|
+
* fix: 🩹 add binary mode to archiver when reading a file
|
6
|
+
* chore: ➕ add chefstyle and pry to development deps
|
7
|
+
* chore: 📌 set minimum ruby version
|
8
|
+
|
3
9
|
## 1.0.2
|
4
10
|
* fix: 🐛 ensure finalize_config gets called
|
5
11
|
|
@@ -30,9 +30,13 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.metadata["github_repo"] = "https://github.com/justintsteele/kitchen-transport-express"
|
31
31
|
spec.license = "Apache-2.0"
|
32
32
|
spec.require_paths = ["lib"]
|
33
|
+
spec.required_ruby_version = ">= 2.4"
|
33
34
|
spec.add_dependency "test-kitchen"
|
34
35
|
spec.add_dependency "ffi-libarchive"
|
36
|
+
spec.add_dependency "concurrent-ruby"
|
35
37
|
spec.add_development_dependency "bundler"
|
38
|
+
spec.add_development_dependency "chefstyle"
|
39
|
+
spec.add_development_dependency "pry"
|
36
40
|
spec.add_development_dependency "rake"
|
37
41
|
spec.add_development_dependency "rspec"
|
38
42
|
end
|
@@ -30,10 +30,17 @@ module Kitchen
|
|
30
30
|
archive_full_name
|
31
31
|
end
|
32
32
|
|
33
|
-
def extract(
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
def extract(session, local, remote)
|
34
|
+
return unless local.match(/.*\.tgz/)
|
35
|
+
|
36
|
+
archive_basename = File.basename(local)
|
37
|
+
logger.debug("[#{LOG_PREFIX}] Extracting #{::File.join(remote, archive_basename)}")
|
38
|
+
session.open_channel do |channel|
|
39
|
+
channel.request_pty
|
40
|
+
channel.exec("tar -xzf #{::File.join(remote, archive_basename)} -C #{remote}")
|
41
|
+
channel.exec("rm -f #{File.join(remote, archive_basename)}")
|
42
|
+
end
|
43
|
+
session.loop
|
37
44
|
end
|
38
45
|
|
39
46
|
private
|
@@ -78,7 +85,7 @@ module Kitchen
|
|
78
85
|
end
|
79
86
|
|
80
87
|
def content(file)
|
81
|
-
File.read
|
88
|
+
File.read(file, mode: "rb") unless File.directory? file
|
82
89
|
end
|
83
90
|
|
84
91
|
def size(file)
|
@@ -15,6 +15,7 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require "kitchen/transport/ssh"
|
18
|
+
require "concurrent-ruby"
|
18
19
|
require_relative "express/version"
|
19
20
|
require_relative "express/archiver"
|
20
21
|
|
@@ -56,15 +57,14 @@ module Kitchen
|
|
56
57
|
def upload(locals, remote)
|
57
58
|
return super unless valid_remote_requirements?
|
58
59
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
logger.debug("[#{LOG_PREFIX}] Uploading #{File.basename(archive || local)} to #{remote}")
|
65
|
-
super(archive || local, remote)
|
66
|
-
extract(File.basename(archive), remote) if archive
|
60
|
+
execute("mkdir -p #{remote}")
|
61
|
+
processed_locals = process_locals(locals)
|
62
|
+
pool = Concurrent::FixedThreadPool.new([processed_locals.length, 10].min)
|
63
|
+
processed_locals.each do |local|
|
64
|
+
pool.post { transfer(local, remote, session.options) }
|
67
65
|
end
|
66
|
+
pool.shutdown
|
67
|
+
pool.wait_for_termination
|
68
68
|
end
|
69
69
|
|
70
70
|
def valid_remote_requirements?
|
@@ -76,8 +76,28 @@ module Kitchen
|
|
76
76
|
false
|
77
77
|
end
|
78
78
|
|
79
|
-
|
80
|
-
|
79
|
+
private
|
80
|
+
|
81
|
+
def process_locals(locals)
|
82
|
+
processed_locals = []
|
83
|
+
Array(locals).each do |local|
|
84
|
+
if ::File.directory?(local)
|
85
|
+
archive_name = archive(local)
|
86
|
+
processed_locals.push archive_name
|
87
|
+
else
|
88
|
+
processed_locals.push local
|
89
|
+
end
|
90
|
+
end
|
91
|
+
processed_locals
|
92
|
+
end
|
93
|
+
|
94
|
+
def transfer(local, remote, opts = {})
|
95
|
+
logger.debug("[#{LOG_PREFIX}] Transferring #{local} to #{remote}")
|
96
|
+
|
97
|
+
Net::SSH.start(session.host, opts[:user], **opts) do |ssh|
|
98
|
+
ssh.scp.upload!(local, remote, opts)
|
99
|
+
extract(ssh, local, remote)
|
100
|
+
end
|
81
101
|
end
|
82
102
|
end
|
83
103
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-transport-express
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Steele
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-01-
|
11
|
+
date: 2025-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-kitchen
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: concurrent-ruby
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,34 @@ dependencies:
|
|
52
66
|
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: chefstyle
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
55
97
|
- !ruby/object:Gem::Dependency
|
56
98
|
name: rake
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
113
155
|
requirements:
|
114
156
|
- - ">="
|
115
157
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
158
|
+
version: '2.4'
|
117
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
160
|
requirements:
|
119
161
|
- - ">="
|