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 CHANGED
@@ -1,8 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- script: CI=true bundle exec rake
3
+ - 1.9
4
+ - 2.0
5
+ - 2.1
6
+ - 2.2
7
+ script:
8
+ - git fetch --tags
9
+ - CI=true bundle exec rake
6
10
  before_install:
7
11
  - sudo apt-get update -qq
8
12
  - sudo apt-get install -qq rpm
data/Rakefile CHANGED
@@ -6,6 +6,11 @@ require 'rake'
6
6
  require 'dockly'
7
7
  require 'rspec/core/rake_task'
8
8
  require 'cane/rake_task'
9
+ require 'pry'
10
+
11
+ task :shell do
12
+ Pry.start(Dockly)
13
+ end
9
14
 
10
15
  task :default => [:spec, :quality]
11
16
 
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
- "#{package_name}/#{Dockly::Util::Git.git_sha}/#{output_filename}"
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
- unless s3_bucket.nil?
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
- output = "#{s3_object_prefix}"
289
- output << "#{Dockly::Util::Git.git_sha}/"
290
- output << "#{export_filename}"
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Dockly
2
- VERSION = '1.12.3'
2
+ VERSION = '1.13.0'
3
3
  end
@@ -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.12.3
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: 2.4.6
353
+ rubygems_version: 1.8.23.2
306
354
  signing_key:
307
- specification_version: 4
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=