dockly 1.12.3 → 1.13.0
Sign up to get free protection for your applications and to get access to all the features.
- 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=
|