dockly 1.12.3 → 1.13.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.
- data/.travis.yml +7 -3
- data/Rakefile +5 -0
- data/dockly.gemspec +1 -0
- data/lib/dockly.rb +2 -0
- data/lib/dockly/deb.rb +14 -3
- data/lib/dockly/docker.rb +16 -6
- data/lib/dockly/history.rb +64 -0
- data/lib/dockly/rake_task.rb +34 -0
- data/lib/dockly/version.rb +1 -1
- data/spec/dockly/history_spec.rb +94 -0
- metadata +54 -4
- checksums.yaml +0 -15
data/.travis.yml
CHANGED
data/Rakefile
CHANGED
data/dockly.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |gem|
|
|
22
22
|
gem.add_dependency 'foreman'
|
23
23
|
gem.add_dependency 'fpm', '~> 1.2.0'
|
24
24
|
gem.add_dependency 'grit'
|
25
|
+
gem.add_dependency 'rugged'
|
25
26
|
gem.add_development_dependency 'cane'
|
26
27
|
gem.add_development_dependency 'pry'
|
27
28
|
gem.add_development_dependency 'rake'
|
data/lib/dockly.rb
CHANGED
@@ -4,6 +4,7 @@ require 'dockly/util/git'
|
|
4
4
|
require 'fog'
|
5
5
|
require 'foreman/cli_fix'
|
6
6
|
require 'foreman/export/base_fix'
|
7
|
+
require 'rugged'
|
7
8
|
|
8
9
|
module Dockly
|
9
10
|
attr_reader :instance, :git_sha
|
@@ -15,6 +16,7 @@ module Dockly
|
|
15
16
|
autoload :BuildCache, 'dockly/build_cache'
|
16
17
|
autoload :Docker, 'dockly/docker'
|
17
18
|
autoload :Deb, 'dockly/deb'
|
19
|
+
autoload :History, 'dockly/history'
|
18
20
|
autoload :Rpm, 'dockly/rpm'
|
19
21
|
autoload :TarDiff, 'dockly/tar_diff'
|
20
22
|
|
data/lib/dockly/deb.rb
CHANGED
@@ -48,6 +48,14 @@ class Dockly::Deb
|
|
48
48
|
upload_to_s3
|
49
49
|
end
|
50
50
|
|
51
|
+
def copy_from_s3(sha)
|
52
|
+
ensure_present! :s3_bucket
|
53
|
+
object = s3_object_name_for(sha)
|
54
|
+
info "Copying s3://#{s3_bucket}/#{object} to s3://#{s3_bucket}/#{s3_object_name}"
|
55
|
+
Dockly::AWS.s3.copy_object(s3_bucket, object, s3_bucket, s3_object_name)
|
56
|
+
info "Successfully copied s3://#{s3_bucket}/#{object} to s3://#{s3_bucket}/#{s3_object_name}"
|
57
|
+
end
|
58
|
+
|
51
59
|
def build_path
|
52
60
|
ensure_present! :build_dir, :deb_build_dir
|
53
61
|
File.join(build_dir, deb_build_dir, output_filename)
|
@@ -59,8 +67,7 @@ class Dockly::Deb
|
|
59
67
|
info "#{name}: found package: #{s3_url}"
|
60
68
|
true
|
61
69
|
rescue
|
62
|
-
info "#{name}: could not find package: "
|
63
|
-
"#{s3_url}"
|
70
|
+
info "#{name}: could not find package: #{s3_url}"
|
64
71
|
false
|
65
72
|
end
|
66
73
|
|
@@ -78,7 +85,11 @@ class Dockly::Deb
|
|
78
85
|
end
|
79
86
|
|
80
87
|
def s3_object_name
|
81
|
-
|
88
|
+
s3_object_name_for(Dockly::Util::Git.git_sha)
|
89
|
+
end
|
90
|
+
|
91
|
+
def s3_object_name_for(sha)
|
92
|
+
"#{package_name}/#{sha}/#{output_filename}"
|
82
93
|
end
|
83
94
|
|
84
95
|
def output_filename
|
data/lib/dockly/docker.rb
CHANGED
@@ -32,6 +32,14 @@ class Dockly::Docker
|
|
32
32
|
(@build_env ||= {}).tap { |env| env.merge!(hash) if hash.is_a?(Hash) }
|
33
33
|
end
|
34
34
|
|
35
|
+
def copy_from_s3(sha)
|
36
|
+
return if s3_bucket.nil?
|
37
|
+
object = s3_object_for(sha)
|
38
|
+
info "Copying s3://#{s3_bucket}/#{object} to #{s3_bucket}/#{s3_object}"
|
39
|
+
Dockly::AWS.s3.copy_object(s3_bucket, object, s3_bucket, s3_object)
|
40
|
+
info "Successfully copied s3://#{s3_bucket}/#{object} to s3://#{s3_bucket}/#{s3_object}"
|
41
|
+
end
|
42
|
+
|
35
43
|
def generate!
|
36
44
|
image = generate_build
|
37
45
|
export_image(image)
|
@@ -220,10 +228,10 @@ class Dockly::Docker
|
|
220
228
|
container = image.run('true')
|
221
229
|
info "created the container: #{container.id}"
|
222
230
|
|
223
|
-
|
224
|
-
output = Dockly::AWS::S3Writer.new(connection, s3_bucket, s3_object)
|
225
|
-
else
|
231
|
+
if s3_bucket.nil?
|
226
232
|
output = File.open(tar_path, 'wb')
|
233
|
+
else
|
234
|
+
output = Dockly::AWS::S3Writer.new(connection, s3_bucket, s3_object)
|
227
235
|
end
|
228
236
|
|
229
237
|
gzip_output = Zlib::GzipWriter.new(output)
|
@@ -285,9 +293,11 @@ class Dockly::Docker
|
|
285
293
|
end
|
286
294
|
|
287
295
|
def s3_object
|
288
|
-
|
289
|
-
|
290
|
-
|
296
|
+
s3_object_for(Dockly::Util::Git.git_sha)
|
297
|
+
end
|
298
|
+
|
299
|
+
def s3_object_for(sha)
|
300
|
+
[s3_object_prefix, sha, '/', export_filename].join
|
291
301
|
end
|
292
302
|
|
293
303
|
def push_to_registry(image)
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# This module contains logic to find matching content hash for a given commit.
|
2
|
+
module Dockly::History
|
3
|
+
module_function
|
4
|
+
|
5
|
+
ASCII_FILE_SEP = 28.chr
|
6
|
+
ASCII_RECORD_SEP = 30.chr
|
7
|
+
|
8
|
+
TAG_PREFIX = 'dockly-'
|
9
|
+
|
10
|
+
def push_content_tag!
|
11
|
+
fail 'An SSH agent must be running to push the tag' if ENV['SSH_AGENT_PID'].nil?
|
12
|
+
refs = ["refs/tags/#{content_tag}"]
|
13
|
+
repo.remotes.each do |remote|
|
14
|
+
username = remote.url.split('@').first
|
15
|
+
creds = Rugged::Credentials::SshKeyFromAgent.new(username: username)
|
16
|
+
remote.push(refs, credentials: creds)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def write_content_tag!
|
21
|
+
repo.tags.create(content_tag, repo.head.target_id, true)
|
22
|
+
end
|
23
|
+
|
24
|
+
def duplicate_build?
|
25
|
+
!duplicate_build_sha.nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
def duplicate_build_sha
|
29
|
+
return @duplicate_build_sha if @duplicate_build_sha
|
30
|
+
sha = tags[content_tag]
|
31
|
+
@duplicate_build_sha = sha unless sha == repo.head.target_id
|
32
|
+
end
|
33
|
+
|
34
|
+
def tags
|
35
|
+
@tags ||= Hash.new do |hash, key|
|
36
|
+
tag = repo.tags[key]
|
37
|
+
hash[key] = tag.target_id if tag
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def content_tag
|
42
|
+
@content_tag ||= TAG_PREFIX + content_hash_for(ls_files)
|
43
|
+
end
|
44
|
+
|
45
|
+
def ls_files
|
46
|
+
repo.head.target.tree.walk(:preorder)
|
47
|
+
.map { |root, elem| [root, elem[:name]].compact.join }
|
48
|
+
.select(&File.method(:file?))
|
49
|
+
end
|
50
|
+
|
51
|
+
def content_hash_for(paths)
|
52
|
+
paths.sort.each_with_object(Digest::SHA384.new) do |path, hash|
|
53
|
+
next unless File.exist?(path)
|
54
|
+
mode = File::Stat.new(path).mode
|
55
|
+
data = File.read(path)
|
56
|
+
str = [path, mode, data].join(ASCII_RECORD_SEP.chr) + ASCII_FILE_SEP.chr
|
57
|
+
hash.update(str)
|
58
|
+
end.hexdigest
|
59
|
+
end
|
60
|
+
|
61
|
+
def repo
|
62
|
+
@repo ||= Rugged::Repository.discover('.')
|
63
|
+
end
|
64
|
+
end
|
data/lib/dockly/rake_task.rb
CHANGED
@@ -56,6 +56,7 @@ namespace :dockly do
|
|
56
56
|
prepare_targets = []
|
57
57
|
upload_targets = []
|
58
58
|
build_targets = []
|
59
|
+
copy_targets = []
|
59
60
|
|
60
61
|
namespace :deb do
|
61
62
|
Dockly.debs.values.each do |inst|
|
@@ -71,6 +72,12 @@ namespace :dockly do
|
|
71
72
|
end
|
72
73
|
end
|
73
74
|
|
75
|
+
namespace :copy do
|
76
|
+
task inst.name => 'dockly:load' do |name|
|
77
|
+
inst.copy_from_s3(Dockly::History.duplicate_build_sha[0..6])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
74
81
|
deb inst.name => [
|
75
82
|
'dockly:load',
|
76
83
|
"dockly:deb:prepare:#{inst.name}",
|
@@ -78,6 +85,7 @@ namespace :dockly do
|
|
78
85
|
]
|
79
86
|
prepare_targets << "dockly:deb:prepare:#{inst.name}"
|
80
87
|
upload_targets << "dockly:deb:upload:#{inst.name}"
|
88
|
+
copy_targets << "dockly:deb:copy:#{inst.name}"
|
81
89
|
build_targets << "dockly:deb:#{inst.name}"
|
82
90
|
end
|
83
91
|
end
|
@@ -96,6 +104,12 @@ namespace :dockly do
|
|
96
104
|
end
|
97
105
|
end
|
98
106
|
|
107
|
+
namespace :copy do
|
108
|
+
task inst.name => 'dockly:load' do |name|
|
109
|
+
inst.copy_from_s3(Dockly::History.duplicate_build_sha[0..6])
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
99
113
|
rpm inst.name => [
|
100
114
|
'dockly:load',
|
101
115
|
"dockly:rpm:prepare:#{inst.name}",
|
@@ -103,6 +117,7 @@ namespace :dockly do
|
|
103
117
|
]
|
104
118
|
prepare_targets << "dockly:rpm:prepare:#{inst.name}"
|
105
119
|
upload_targets << "dockly:rpm:upload:#{inst.name}"
|
120
|
+
copy_targets << "dockly:rpm:copy:#{inst.name}"
|
106
121
|
build_targets << "dockly:rpm:#{inst.name}"
|
107
122
|
end
|
108
123
|
end
|
@@ -128,6 +143,13 @@ namespace :dockly do
|
|
128
143
|
end
|
129
144
|
end
|
130
145
|
|
146
|
+
namespace :copy do
|
147
|
+
task inst.name => 'dockly:load' do
|
148
|
+
Thread.current[:rake_task] = inst.name
|
149
|
+
inst.copy_from_s3(Dockly::History.duplicate_build_sha[0..6])
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
131
153
|
docker inst.name => [
|
132
154
|
'dockly:load',
|
133
155
|
"dockly:docker:prepare:#{inst.name}",
|
@@ -138,6 +160,7 @@ namespace :dockly do
|
|
138
160
|
unless inst.s3_bucket.nil?
|
139
161
|
prepare_targets << "dockly:docker:prepare:#{inst.name}"
|
140
162
|
upload_targets << "dockly:docker:upload:#{inst.name}"
|
163
|
+
copy_targets << "dockly:docker:copy:#{inst.name}"
|
141
164
|
build_targets << "dockly:docker:#{inst.name}"
|
142
165
|
end
|
143
166
|
end
|
@@ -146,4 +169,15 @@ namespace :dockly do
|
|
146
169
|
multitask :prepare_all => prepare_targets
|
147
170
|
multitask :upload_all => upload_targets
|
148
171
|
multitask :build_all => build_targets
|
172
|
+
multitask :copy_all => copy_targets
|
173
|
+
|
174
|
+
task :build_or_copy_all do
|
175
|
+
if Dockly::History.duplicate_build?
|
176
|
+
Rake::Task['dockly:copy_all'].invoke
|
177
|
+
else
|
178
|
+
Rake::Task['dockly:build_all'].invoke
|
179
|
+
Dockly::History.write_content_tag!
|
180
|
+
Dockly::History.push_content_tag!
|
181
|
+
end
|
182
|
+
end
|
149
183
|
end
|
data/lib/dockly/version.rb
CHANGED
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Dockly::History do
|
4
|
+
describe '#duplicate_build?' do
|
5
|
+
before { allow(subject).to receive(:duplicate_build_sha).and_return(sha) }
|
6
|
+
|
7
|
+
context 'when the duplicate build sha is not present' do
|
8
|
+
let(:sha) { nil }
|
9
|
+
|
10
|
+
it 'returns false' do
|
11
|
+
expect(subject).to_not be_duplicate_build
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when the duplicate build sha is present' do
|
16
|
+
let(:sha) { 'DEADBEEF' }
|
17
|
+
|
18
|
+
it 'returns true' do
|
19
|
+
expect(subject).to be_duplicate_build
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#duplicate_build_sha' do
|
25
|
+
let(:content_tag) { 'dockly-FAKE-CONTENT-HASH' }
|
26
|
+
|
27
|
+
before { allow(subject).to receive(:content_tag).and_return(content_tag) }
|
28
|
+
|
29
|
+
context 'when there is not a commit with a matching content hash' do
|
30
|
+
it 'returns nil' do
|
31
|
+
expect(subject.duplicate_build_sha).to be(nil)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when there is a commit with a matching content hash' do
|
36
|
+
let(:sha) { 'dockly-FAKE-SHA' }
|
37
|
+
let(:key) { content_tag }
|
38
|
+
|
39
|
+
before { subject.tags[key] = sha }
|
40
|
+
after { subject.tags.delete(key) }
|
41
|
+
|
42
|
+
it 'returns that commit' do
|
43
|
+
expect(subject.duplicate_build_sha).to eq(sha)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#tags' do
|
49
|
+
let(:expected) do
|
50
|
+
{
|
51
|
+
'v1.4.0' => '708b4f1bd7846c258e2151e34f8f746b399ee6fb',
|
52
|
+
'v1.4.2' => '20b62fa084ac903a8753cfc7939c7e31c86761d2',
|
53
|
+
'v1.4.3' => '8eac23450975d91f0aa4c62c6985ec4f4ce7594f'
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'returns a Hash of the git tags' do
|
58
|
+
expected.each do |tag, oid|
|
59
|
+
expect(subject.tags[tag]).to include(oid)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#ls_files' do
|
65
|
+
let(:files) { subject.ls_files }
|
66
|
+
|
67
|
+
it 'returns the files checked into the repo' do
|
68
|
+
expect(files).to be_a(Array)
|
69
|
+
expect(files).to include('dockly.gemspec')
|
70
|
+
expect(files).to include('lib/dockly.rb')
|
71
|
+
expect(files).to include('spec/dockly/aws/s3_writer_spec.rb')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#content_hash_for' do
|
76
|
+
context 'when two hashes are compared' do
|
77
|
+
let(:hash_one) { subject.content_hash_for(%w(dockly.gemspec Gemfile)) }
|
78
|
+
let(:hash_two) { subject.content_hash_for(%w(lib/dockly.rb LICENSE.txt)) }
|
79
|
+
|
80
|
+
it 'creates a unique hash for the given paths' do
|
81
|
+
expect(hash_one).to_not eq(hash_two)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'when the paths are in a different order' do
|
86
|
+
let(:hash_one) { subject.content_hash_for(%w(dockly.gemspec Gemfile)) }
|
87
|
+
let(:hash_two) { subject.content_hash_for(%w(Gemfile dockly.gemspec)) }
|
88
|
+
|
89
|
+
it 'still creates the same hash' do
|
90
|
+
expect(hash_one).to eq(hash_two)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dockly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.13.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Swipely, Inc.
|
@@ -13,6 +14,7 @@ dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: clamp
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,6 +30,7 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: docker-api
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -41,6 +46,7 @@ dependencies:
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: dockly-util
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -55,6 +62,7 @@ dependencies:
|
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: excon
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
67
|
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
@@ -62,6 +70,7 @@ dependencies:
|
|
62
70
|
type: :runtime
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
75
|
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
@@ -69,6 +78,7 @@ dependencies:
|
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: fog
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
83
|
- - ~>
|
74
84
|
- !ruby/object:Gem::Version
|
@@ -76,6 +86,7 @@ dependencies:
|
|
76
86
|
type: :runtime
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
91
|
- - ~>
|
81
92
|
- !ruby/object:Gem::Version
|
@@ -83,6 +94,7 @@ dependencies:
|
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: foreman
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
99
|
- - ! '>='
|
88
100
|
- !ruby/object:Gem::Version
|
@@ -90,6 +102,7 @@ dependencies:
|
|
90
102
|
type: :runtime
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
107
|
- - ! '>='
|
95
108
|
- !ruby/object:Gem::Version
|
@@ -97,6 +110,7 @@ dependencies:
|
|
97
110
|
- !ruby/object:Gem::Dependency
|
98
111
|
name: fpm
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
100
114
|
requirements:
|
101
115
|
- - ~>
|
102
116
|
- !ruby/object:Gem::Version
|
@@ -104,6 +118,7 @@ dependencies:
|
|
104
118
|
type: :runtime
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
107
122
|
requirements:
|
108
123
|
- - ~>
|
109
124
|
- !ruby/object:Gem::Version
|
@@ -111,6 +126,7 @@ dependencies:
|
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: grit
|
113
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
114
130
|
requirements:
|
115
131
|
- - ! '>='
|
116
132
|
- !ruby/object:Gem::Version
|
@@ -118,6 +134,23 @@ dependencies:
|
|
118
134
|
type: :runtime
|
119
135
|
prerelease: false
|
120
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: rugged
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :runtime
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
121
154
|
requirements:
|
122
155
|
- - ! '>='
|
123
156
|
- !ruby/object:Gem::Version
|
@@ -125,6 +158,7 @@ dependencies:
|
|
125
158
|
- !ruby/object:Gem::Dependency
|
126
159
|
name: cane
|
127
160
|
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
128
162
|
requirements:
|
129
163
|
- - ! '>='
|
130
164
|
- !ruby/object:Gem::Version
|
@@ -132,6 +166,7 @@ dependencies:
|
|
132
166
|
type: :development
|
133
167
|
prerelease: false
|
134
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
135
170
|
requirements:
|
136
171
|
- - ! '>='
|
137
172
|
- !ruby/object:Gem::Version
|
@@ -139,6 +174,7 @@ dependencies:
|
|
139
174
|
- !ruby/object:Gem::Dependency
|
140
175
|
name: pry
|
141
176
|
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
142
178
|
requirements:
|
143
179
|
- - ! '>='
|
144
180
|
- !ruby/object:Gem::Version
|
@@ -146,6 +182,7 @@ dependencies:
|
|
146
182
|
type: :development
|
147
183
|
prerelease: false
|
148
184
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
149
186
|
requirements:
|
150
187
|
- - ! '>='
|
151
188
|
- !ruby/object:Gem::Version
|
@@ -153,6 +190,7 @@ dependencies:
|
|
153
190
|
- !ruby/object:Gem::Dependency
|
154
191
|
name: rake
|
155
192
|
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
156
194
|
requirements:
|
157
195
|
- - ! '>='
|
158
196
|
- !ruby/object:Gem::Version
|
@@ -160,6 +198,7 @@ dependencies:
|
|
160
198
|
type: :development
|
161
199
|
prerelease: false
|
162
200
|
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
163
202
|
requirements:
|
164
203
|
- - ! '>='
|
165
204
|
- !ruby/object:Gem::Version
|
@@ -167,6 +206,7 @@ dependencies:
|
|
167
206
|
- !ruby/object:Gem::Dependency
|
168
207
|
name: rspec
|
169
208
|
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
170
210
|
requirements:
|
171
211
|
- - ~>
|
172
212
|
- !ruby/object:Gem::Version
|
@@ -174,6 +214,7 @@ dependencies:
|
|
174
214
|
type: :development
|
175
215
|
prerelease: false
|
176
216
|
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
177
218
|
requirements:
|
178
219
|
- - ~>
|
179
220
|
- !ruby/object:Gem::Version
|
@@ -181,6 +222,7 @@ dependencies:
|
|
181
222
|
- !ruby/object:Gem::Dependency
|
182
223
|
name: vcr
|
183
224
|
requirement: !ruby/object:Gem::Requirement
|
225
|
+
none: false
|
184
226
|
requirements:
|
185
227
|
- - ! '>='
|
186
228
|
- !ruby/object:Gem::Version
|
@@ -188,6 +230,7 @@ dependencies:
|
|
188
230
|
type: :development
|
189
231
|
prerelease: false
|
190
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
none: false
|
191
234
|
requirements:
|
192
235
|
- - ! '>='
|
193
236
|
- !ruby/object:Gem::Version
|
@@ -195,6 +238,7 @@ dependencies:
|
|
195
238
|
- !ruby/object:Gem::Dependency
|
196
239
|
name: webmock
|
197
240
|
requirement: !ruby/object:Gem::Requirement
|
241
|
+
none: false
|
198
242
|
requirements:
|
199
243
|
- - ! '>='
|
200
244
|
- !ruby/object:Gem::Version
|
@@ -202,6 +246,7 @@ dependencies:
|
|
202
246
|
type: :development
|
203
247
|
prerelease: false
|
204
248
|
version_requirements: !ruby/object:Gem::Requirement
|
249
|
+
none: false
|
205
250
|
requirements:
|
206
251
|
- - ! '>='
|
207
252
|
- !ruby/object:Gem::Version
|
@@ -241,6 +286,7 @@ files:
|
|
241
286
|
- lib/dockly/docker.rb
|
242
287
|
- lib/dockly/docker/registry.rb
|
243
288
|
- lib/dockly/foreman.rb
|
289
|
+
- lib/dockly/history.rb
|
244
290
|
- lib/dockly/rake_task.rb
|
245
291
|
- lib/dockly/rpm.rb
|
246
292
|
- lib/dockly/tar_diff.rb
|
@@ -270,6 +316,7 @@ files:
|
|
270
316
|
- spec/dockly/docker/registry_spec.rb
|
271
317
|
- spec/dockly/docker_spec.rb
|
272
318
|
- spec/dockly/foreman_spec.rb
|
319
|
+
- spec/dockly/history_spec.rb
|
273
320
|
- spec/dockly/rpm_spec.rb
|
274
321
|
- spec/dockly/tar_diff_spec.rb
|
275
322
|
- spec/dockly_spec.rb
|
@@ -285,26 +332,27 @@ files:
|
|
285
332
|
homepage: https://github.com/swipely/dockly
|
286
333
|
licenses:
|
287
334
|
- MIT
|
288
|
-
metadata: {}
|
289
335
|
post_install_message:
|
290
336
|
rdoc_options: []
|
291
337
|
require_paths:
|
292
338
|
- lib
|
293
339
|
required_ruby_version: !ruby/object:Gem::Requirement
|
340
|
+
none: false
|
294
341
|
requirements:
|
295
342
|
- - ! '>='
|
296
343
|
- !ruby/object:Gem::Version
|
297
344
|
version: '0'
|
298
345
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
346
|
+
none: false
|
299
347
|
requirements:
|
300
348
|
- - ! '>='
|
301
349
|
- !ruby/object:Gem::Version
|
302
350
|
version: '0'
|
303
351
|
requirements: []
|
304
352
|
rubyforge_project:
|
305
|
-
rubygems_version:
|
353
|
+
rubygems_version: 1.8.23.2
|
306
354
|
signing_key:
|
307
|
-
specification_version:
|
355
|
+
specification_version: 3
|
308
356
|
summary: Packaging made easy
|
309
357
|
test_files:
|
310
358
|
- spec/dockly/aws/s3_writer_spec.rb
|
@@ -318,6 +366,7 @@ test_files:
|
|
318
366
|
- spec/dockly/docker/registry_spec.rb
|
319
367
|
- spec/dockly/docker_spec.rb
|
320
368
|
- spec/dockly/foreman_spec.rb
|
369
|
+
- spec/dockly/history_spec.rb
|
321
370
|
- spec/dockly/rpm_spec.rb
|
322
371
|
- spec/dockly/tar_diff_spec.rb
|
323
372
|
- spec/dockly_spec.rb
|
@@ -330,3 +379,4 @@ test_files:
|
|
330
379
|
- spec/fixtures/test-2.tar.gz
|
331
380
|
- spec/fixtures/test-3.tar
|
332
381
|
- spec/spec_helper.rb
|
382
|
+
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
ZDVjYWM1NjRjYjgxMTJkMjYyYTE4NWNhYjY4Mjc0YTU0MzljNzNkMw==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MmFjYWY4Y2Q0NGQxMjhhMjgwZDlkNDk5MDUxYmMzYjFkMjM2OTcwMw==
|
7
|
-
SHA512:
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
NTJmNjhhOTAwNzJmMjdjZWEwN2MzMGMxMTNkOGE3M2Q2Njg4NzJhNWE0ODky
|
10
|
-
MmE4OWU0ODU3YjA4MGU1OTg5YTVkZDBmN2QyMTJhYWIwMGI2YTljZjMzOGJk
|
11
|
-
YWVlZjU4OTE4ZTY1ZjczMjg2ZmE3NzVjYzE2ZTk3MDczYzhhNWQ=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MTRiNzUxMThhYTlmMTA5NWVmMGVkODJhODliNDg4YWViZDU5NmYwZTQ4YmE5
|
14
|
-
OWM2OGIwZTJhODM0OWMzN2Q5ZWVhZjIwYTQwM2RiOWIyZmM3NWY3ZmM0YjM3
|
15
|
-
MzRlNmJhN2Q3YTFmNjNjOTc1MjUwMGMxMjk4NzljNjc4ZWU3MzA=
|