dockly 3.4.1 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 643369ac9e98df641a6b68eb246c6453bbd5f228
4
- data.tar.gz: 6539614f380fadd9867307fe2c0dfc3314f5dfb6
2
+ SHA256:
3
+ metadata.gz: cdd9e8a044854b4149effa288483edb90a66ee8f58d35108696f0abc3a21ed95
4
+ data.tar.gz: 8ee450caf29059b5c7a389683676953c02f3c497809eef2287648504d59c9023
5
5
  SHA512:
6
- metadata.gz: c70fbeb01ec143d0d9c54fc9d66a38dcafc709a591e150cb6ae55201fe7ef895afd3e7a7105f66f2562f8b71514fba4a1c33cc0d30f06d49ead77559264a8ff5
7
- data.tar.gz: e89ca5f52ade24755fa7a96a0442484c209633817b70fa4ff024b51900a6878adc93fe6b691bb4a8c47ff4b188b356beccec5b602dc82ef97cb766468770b53f
6
+ metadata.gz: 2cf097573867f7c8ddafa597b0e0249780789fe098f6b4ffec3d48ae0b3dfc7cb6e48686214d846ab021c7cee5dec3bdd2c29f3423c1b82341d8173c2570fc05
7
+ data.tar.gz: 5bb556418f6b975bc1cd2dfffcb0117ee61379b6426be681a80961f4831976319f91fd78e0e81c94bcd4a5ce3a7a1bb093f39d77379b2bb1708d2da7e7cfbaae
@@ -1 +1 @@
1
- 1.9.3-p547
1
+ 2.3.1
@@ -1,9 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9
4
3
  - 2.0
5
4
  - 2.1
6
5
  - 2.2
6
+ - 2.3
7
7
  script:
8
8
  - git fetch --tags
9
9
  - CI=true bundle exec rake
data/README.md CHANGED
@@ -174,6 +174,11 @@ In addition to the above attributes, `docker` has the following references:
174
174
  - allows one
175
175
  - class: `Dockly::Docker::Registry`
176
176
  - description: a registry to push to in lieu of exporting as a tar -- the registry will be automatically pulled upon installing the package
177
+ - `ecr`
178
+ - required: `false`
179
+ - allows one
180
+ - class: `Dockly::Docker::ECR`
181
+ - description: an AWS ECR Docker registry to push to in lieu of exporting as a tar -- the registry will be automatically pulled upon installing the package
177
182
 
178
183
  Need finer control of Docker packages? We also wrote [docker-api](https://github.com/swipely/docker-api).
179
184
 
@@ -200,6 +205,23 @@ The `registry` DSL is used to define Docker Registries. It has the following att
200
205
  - default: `https://index.docker.io/v1`
201
206
  - description: the server where the registry lives
202
207
 
208
+ `ecr`
209
+ --------
210
+
211
+ The `ecr` DSL is used to define AWS ECR Docker registries. It has the following attributes:
212
+
213
+ - `server_address`
214
+ - required: `true`
215
+ - description: the server where the registry lives without the repo name, eg `accountid.dkr.ecr.region.amazonaws.com`
216
+ - `username`
217
+ - required: `false`
218
+ - default: pulled from auth data obtained using assumed role's credentials
219
+ - description: the username to authenticate
220
+ - `password`
221
+ - required: `false`
222
+ - default: pulled from auth data obtained using assumed role's credentials
223
+ - description: the password to authenticate
224
+
203
225
  `foreman`
204
226
  ---------
205
227
 
@@ -24,6 +24,7 @@ module Dockly
24
24
  generate_snippet_for :s3_docker_import, [:s3_url, :repo, :tag]
25
25
  generate_snippet_for :s3_diff_docker_import, [:base_image, :diff_image, :repo, :tag]
26
26
  generate_snippet_for :registry_import, [:repo, :tag], { :tag => "latest" }
27
+ generate_snippet_for :auth_ecr, [:server_address]
27
28
 
28
29
  generate_snippet_for :docker_tag_latest, [:repo, :tag]
29
30
  end
@@ -77,7 +77,7 @@ class Dockly::BuildCache::Docker < Dockly::BuildCache::Base
77
77
  debug 'Restarting the container to copy the cache\'s output'
78
78
  # Restart the container so we can copy its output
79
79
  container = container.commit.run('sleep 3600')
80
- container.copy(output_directory) { |chunk| file.write(chunk.to_s) }
80
+ container.archive_out(output_directory) { |chunk| file.write(chunk.to_s) }
81
81
  container.kill
82
82
  file.tap(&:rewind)
83
83
  end
@@ -77,7 +77,6 @@ class Dockly::Deb
77
77
  end
78
78
 
79
79
  def upload_to_s3
80
- info "uploading to s3"
81
80
  return if s3_bucket.nil?
82
81
  raise "Package wasn't created!" unless File.exist?(build_path)
83
82
  info "uploading package to s3"
@@ -181,7 +180,7 @@ private
181
180
  end
182
181
 
183
182
  def add_docker_auth_config(package)
184
- return if (registry = get_registry).nil? || !registry.authentication_required?
183
+ return if (registry = get_registry).nil? || !should_auth?(registry)
185
184
  info "adding docker config file"
186
185
  registry.generate_config_file!
187
186
 
@@ -192,11 +191,18 @@ private
192
191
  package.attributes[:prefix] = nil
193
192
  end
194
193
 
194
+ def should_auth?(registry)
195
+ registry.is_a?(Dockly::Docker::Registry) &&
196
+ registry.authentication_required?
197
+ end
198
+
195
199
  def add_docker(package)
196
200
  return if docker.nil? || docker.s3_bucket
197
201
  info "adding docker image"
198
202
  docker.generate!
199
- return unless docker.registry.nil?
203
+
204
+ return if get_registry
205
+
200
206
  package.attributes[:prefix] = docker.package_dir
201
207
  Dir.chdir(File.dirname(docker.tar_path)) do
202
208
  package.input(File.basename(docker.tar_path))
@@ -205,7 +211,7 @@ private
205
211
  end
206
212
 
207
213
  def get_registry
208
- if docker && registry = docker.registry
214
+ if docker && (registry = docker.registry)
209
215
  registry
210
216
  end
211
217
  end
@@ -214,28 +220,41 @@ private
214
220
  scripts = ["#!/bin/bash"]
215
221
  bb = Dockly::BashBuilder.new
216
222
  scripts << bb.normalize_for_dockly
217
- if get_registry
218
- scripts << bb.registry_import(docker.repo, docker.tag)
219
- elsif docker
220
- if docker.s3_bucket.nil?
221
- docker_output = File.join(docker.package_dir, docker.export_filename)
222
- if docker.tar_diff
223
- scripts << bb.file_diff_docker_import(docker.import, docker_output, docker.name, docker.tag)
224
- else
225
- scripts << bb.file_docker_import(docker_output, docker.name, docker.tag)
223
+
224
+ if docker
225
+ if (registry = docker.registry)
226
+ if registry.is_a?(Dockly::Docker::ECR)
227
+ scripts << bb.auth_ecr(registry.server_address)
226
228
  end
229
+ scripts << bb.registry_import(docker.repo, docker.tag)
227
230
  else
228
- if docker.tar_diff
229
- scripts << bb.s3_diff_docker_import(docker.import, docker.s3_url, docker.name, docker.tag)
230
- else
231
- scripts << bb.s3_docker_import(docker.s3_url, docker.name, docker.tag)
232
- end
231
+ scripts += collect_non_registry_scripts(bb)
233
232
  end
234
- scripts << bb.docker_tag_latest(docker.repo, docker.tag)
235
233
  end
234
+
236
235
  scripts.join("\n")
237
236
  end
238
237
 
238
+ def collect_non_registry_scripts(bb)
239
+ scripts = []
240
+
241
+ if docker.s3_bucket.nil?
242
+ docker_output = File.join(docker.package_dir, docker.export_filename)
243
+ if docker.tar_diff
244
+ scripts << bb.file_diff_docker_import(docker.import, docker_output, docker.name, docker.tag)
245
+ else
246
+ scripts << bb.file_docker_import(docker_output, docker.name, docker.tag)
247
+ end
248
+ else
249
+ if docker.tar_diff
250
+ scripts << bb.s3_diff_docker_import(docker.import, docker.s3_url, docker.name, docker.tag)
251
+ else
252
+ scripts << bb.s3_docker_import(docker.s3_url, docker.name, docker.tag)
253
+ end
254
+ end
255
+ scripts << bb.docker_tag_latest(docker.repo, docker.tag)
256
+ end
257
+
239
258
  def add_startup_script(package, startup_script = "dockly-startup.sh")
240
259
  ensure_present! :build_dir
241
260
  startup_script_path = File.join(build_dir, startup_script)
@@ -10,11 +10,13 @@ class Dockly::Docker
10
10
  include Dockly::Util::Logger::Mixin
11
11
 
12
12
  autoload :Registry, 'dockly/docker/registry'
13
+ autoload :ECR, 'dockly/docker/ecr'
13
14
 
14
15
  logger_prefix '[dockly docker]'
15
16
 
16
17
  dsl_class_attribute :build_cache, Dockly::BuildCache.model, type: Array
17
- dsl_class_attribute :registry, Dockly::Docker::Registry
18
+ dsl_class_attribute :docker_registry, Dockly::Docker::Registry
19
+ dsl_class_attribute :ecr, Dockly::Docker::ECR
18
20
 
19
21
  dsl_attribute :name, :import, :git_archive, :build, :tag, :build_dir, :package_dir,
20
22
  :timeout, :cleanup_images, :tar_diff, :s3_bucket, :s3_object_prefix
@@ -32,6 +34,10 @@ class Dockly::Docker
32
34
  (@build_env ||= {}).tap { |env| env.merge!(hash) if hash.is_a?(Hash) }
33
35
  end
34
36
 
37
+ def registry
38
+ ecr || docker_registry
39
+ end
40
+
35
41
  def copy_from_s3(sha)
36
42
  return if s3_bucket.nil?
37
43
  object = s3_object_for(sha)
@@ -318,13 +324,21 @@ class Dockly::Docker
318
324
  end
319
325
 
320
326
  def push_to_registry(image)
321
- ensure_present! :registry
327
+ raise "No registry to push to" if registry.nil?
328
+
322
329
  info "Exporting #{image.id} to Docker registry at #{registry.server_address}"
330
+
323
331
  registry.authenticate!
324
- image = Docker::Image.all(:all => true).find { |img|
325
- img.id.start_with?(image.id) || image.id.start_with?(img.id)
326
- }
332
+
333
+ image =
334
+ Docker::Image
335
+ .all(:all => true)
336
+ .find do |img|
337
+ img.id.include?(image.id) || image.id.include?(img.id)
338
+ end
339
+
327
340
  raise "Could not find image after authentication" if image.nil?
341
+
328
342
  image.push(registry.to_h, :registry => registry.server_address)
329
343
  end
330
344
 
@@ -0,0 +1,60 @@
1
+ class Dockly::Docker::ECR
2
+ include Dockly::Util::DSL
3
+ include Dockly::Util::Logger::Mixin
4
+
5
+ logger_prefix '[dockly docker ecr]'
6
+
7
+ dsl_attribute :name, :server_address, :password, :username
8
+
9
+ def authenticate!
10
+ @username ||= login_from_aws[0]
11
+ @password ||= login_from_aws[1]
12
+
13
+ ensure_present! :password, :server_address, :username
14
+
15
+ debug "Attempting to authenticate at #{server_address}"
16
+
17
+ ::Docker.authenticate!(self.to_h)
18
+
19
+ info "Successfully authenticated at #{server_address}"
20
+ rescue ::Docker::Error::AuthenticationError
21
+ raise "Could not authenticate at #{server_address}"
22
+ end
23
+
24
+ def authentication_required?
25
+ true
26
+ end
27
+
28
+ def default_server_address?
29
+ false
30
+ end
31
+
32
+ def login_from_aws
33
+ @login_from_aws ||=
34
+ Base64
35
+ .decode64(auth_data.authorization_token)
36
+ .split(':')
37
+ end
38
+
39
+ def auth_data
40
+ @auth_data ||=
41
+ client
42
+ .get_authorization_token
43
+ .authorization_data
44
+ .first
45
+ end
46
+
47
+ def client
48
+ @client ||= Aws::ECR::Client.new(region: 'us-east-1')
49
+ end
50
+
51
+ def to_h
52
+ ensure_present! :username, :password, :server_address
53
+
54
+ {
55
+ 'serveraddress' => "https://#{server_address}",
56
+ 'username' => username,
57
+ 'password' => password
58
+ }
59
+ end
60
+ end
@@ -1,7 +1,7 @@
1
1
  module Dockly
2
- MAJOR = 3
3
- MINOR = 4
4
- PATCH = 1
2
+ MAJOR = 4
3
+ MINOR = 0
4
+ PATCH = 0
5
5
  RELEASE = nil
6
6
 
7
7
  VERSION = [MAJOR, MINOR, PATCH, RELEASE].compact.join('.')
@@ -0,0 +1,11 @@
1
+ auth_ecr() {
2
+ $(aws ecr get-login --region us-east-1 --no-include-email)
3
+ }
4
+
5
+ worked=1
6
+ for attempt in {1..10}; do
7
+ [[ $worked != 0 ]] || break
8
+ auth_ecr && worked=0 || (log "ecr auth: attempt $attempt failed, sleeping 30"; sleep 30)
9
+ done
10
+ [[ $worked != 0 ]] && fatal "failed to auth to ecr"
11
+ log "ecr auth: successfully authenticated"
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dockly::Docker::ECR do
4
+ subject do
5
+ described_class.new(name: 'ecr', server_address: registry)
6
+ end
7
+
8
+ let(:username) { 'AWS' }
9
+ let(:password) { 'password' }
10
+ let(:registry) { 'accountid.dkr.ecr.region.amazonaws.com' }
11
+ let(:endpoint) { "https://#{registry}" }
12
+ let(:ecr_client) { Aws::ECR::Client.new(stub_responses: true) }
13
+
14
+ after do
15
+ Aws.config[:ecr] = { stub_responses: {} }
16
+ end
17
+
18
+ describe '#authenticate!' do
19
+ context 'when AWS provides a username and password for ECR' do
20
+ before do
21
+ Aws.config[:ecr] = {
22
+ stub_responses: {
23
+ get_authorization_token: {
24
+ authorization_data: [
25
+ {
26
+ authorization_token: Base64.encode64("#{username}:#{password}"),
27
+ proxy_endpoint: endpoint
28
+ }
29
+ ]
30
+ }
31
+ }
32
+ }
33
+ end
34
+
35
+ context 'and docker auth succeeds' do
36
+ before do
37
+ allow(::Docker)
38
+ .to receive(:authenticate!)
39
+ .with({
40
+ 'serveraddress' => endpoint,
41
+ 'username' => username,
42
+ 'password' => password
43
+ })
44
+ end
45
+
46
+ it 'does not error' do
47
+ expect { subject.authenticate! }.to_not raise_error
48
+ end
49
+ end
50
+
51
+ context 'and docker auth raises and error' do
52
+ before do
53
+ allow(::Docker)
54
+ .to receive(:authenticate!)
55
+ .and_raise(::Docker::Error::AuthenticationError)
56
+ end
57
+
58
+ it 'raises' do
59
+ expect { subject.authenticate! }
60
+ .to raise_error(/Could not authenticate/)
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ context 'when it is unable to get auth from AWS' do
67
+ before do
68
+ Aws.config[:ecr] = {
69
+ stub_responses: {
70
+ get_authorization_token: ->(_context) { raise 'Unable to get token' }
71
+ }
72
+ }
73
+ end
74
+
75
+ it 'raises' do
76
+ expect(::Docker).not_to receive(:authenticate!)
77
+ expect { subject.authenticate! }.to raise_error
78
+ end
79
+ end
80
+ end
@@ -3,6 +3,76 @@ require 'spec_helper'
3
3
  describe Dockly::Docker do
4
4
  subject { described_class.new(:name => :test_docker) }
5
5
 
6
+ describe '#registry' do
7
+ context 'when there is no registry' do
8
+ it 'returns nil' do
9
+ expect(subject.registry).to eq(nil)
10
+ end
11
+ end
12
+
13
+ context 'when there is only an ecr registry' do
14
+ subject do
15
+ Dockly::Docker.new do
16
+ ecr { server_address 'accountid.dkr.ecr.region.amazonaws.com' }
17
+ end
18
+ end
19
+
20
+ it 'returns an ecr registry' do
21
+ registry = subject.registry
22
+
23
+ expect(registry).not_to eq(nil)
24
+ expect(registry).to be_a(Dockly::Docker::ECR)
25
+ expect(registry.server_address)
26
+ .to eq('accountid.dkr.ecr.region.amazonaws.com')
27
+ end
28
+ end
29
+
30
+ context 'when there is a docker registry' do
31
+ context 'and an ecr registry' do
32
+ subject do
33
+ Dockly::Docker.new do
34
+ registry do
35
+ username ENV['DOCKER_USER']
36
+ email ENV['DOCKER_EMAIL']
37
+ password ENV['DOCKER_PASS']
38
+ end
39
+
40
+ ecr { server_address 'accountid.dkr.ecr.region.amazonaws.com' }
41
+ end
42
+ end
43
+
44
+ it 'prefers the ecr registry' do
45
+ registry = subject.registry
46
+
47
+ expect(registry).not_to eq(nil)
48
+ expect(registry).to be_a(Dockly::Docker::ECR)
49
+ expect(registry.server_address)
50
+ .to eq('accountid.dkr.ecr.region.amazonaws.com')
51
+ end
52
+ end
53
+
54
+ context 'and only a docker registry' do
55
+ subject do
56
+ Dockly::Docker.new do
57
+ registry do
58
+ username ENV['DOCKER_USER']
59
+ email ENV['DOCKER_EMAIL']
60
+ password ENV['DOCKER_PASS']
61
+ end
62
+ end
63
+
64
+ it 'returns the docker registry' do
65
+ registry = subject.registry
66
+
67
+ expect(registry).not_to eq(nil)
68
+ expect(registry).to be_a(Dockly::Docker::Registry)
69
+ expect(registry.username).to eq(ENV['DOCKER_USER'])
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+
6
76
  describe '#ensure_tar' do
7
77
  let(:action) { subject.ensure_tar(file) }
8
78
 
@@ -172,7 +242,7 @@ describe Dockly::Docker do
172
242
  context "with a registry export" do
173
243
  let(:registry) { double(:registry) }
174
244
  before do
175
- subject.instance_variable_set(:"@registry", registry)
245
+ subject.instance_variable_set(:"@docker_registry", registry)
176
246
  expect(subject).to receive(:push_to_registry)
177
247
  end
178
248
 
metadata CHANGED
@@ -1,229 +1,229 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockly
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.1
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Swipely, Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-18 00:00:00.000000000 Z
11
+ date: 2021-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: docker-api
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.14.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.14.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: dockly-util
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.0.9
48
- - - <
48
+ - - "<"
49
49
  - !ruby/object:Gem::Version
50
50
  version: '1.0'
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - '>='
55
+ - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: 0.0.9
58
- - - <
58
+ - - "<"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '1.0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: excon
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - '>='
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - '>='
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: aws-sdk
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ~>
79
+ - - "~>"
80
80
  - !ruby/object:Gem::Version
81
81
  version: '2.0'
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - ~>
86
+ - - "~>"
87
87
  - !ruby/object:Gem::Version
88
88
  version: '2.0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: foreman
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - '>='
93
+ - - ">="
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
96
  type: :runtime
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - '>='
100
+ - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: fpm
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - ~>
107
+ - - "~>"
108
108
  - !ruby/object:Gem::Version
109
109
  version: 1.2.0
110
110
  type: :runtime
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - ~>
114
+ - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: 1.2.0
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: minigit
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
- - - ~>
121
+ - - "~>"
122
122
  - !ruby/object:Gem::Version
123
123
  version: 0.0.4
124
124
  type: :runtime
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
- - - ~>
128
+ - - "~>"
129
129
  - !ruby/object:Gem::Version
130
130
  version: 0.0.4
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: cane
133
133
  requirement: !ruby/object:Gem::Requirement
134
134
  requirements:
135
- - - '>='
135
+ - - ">="
136
136
  - !ruby/object:Gem::Version
137
137
  version: '0'
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
- - - '>='
142
+ - - ">="
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: pry
147
147
  requirement: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - '>='
149
+ - - ">="
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0'
152
152
  type: :development
153
153
  prerelease: false
154
154
  version_requirements: !ruby/object:Gem::Requirement
155
155
  requirements:
156
- - - '>='
156
+ - - ">="
157
157
  - !ruby/object:Gem::Version
158
158
  version: '0'
159
159
  - !ruby/object:Gem::Dependency
160
160
  name: rake
161
161
  requirement: !ruby/object:Gem::Requirement
162
162
  requirements:
163
- - - <
163
+ - - "<"
164
164
  - !ruby/object:Gem::Version
165
165
  version: '11.0'
166
166
  type: :development
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
169
169
  requirements:
170
- - - <
170
+ - - "<"
171
171
  - !ruby/object:Gem::Version
172
172
  version: '11.0'
173
173
  - !ruby/object:Gem::Dependency
174
174
  name: rspec
175
175
  requirement: !ruby/object:Gem::Requirement
176
176
  requirements:
177
- - - ~>
177
+ - - "~>"
178
178
  - !ruby/object:Gem::Version
179
179
  version: 2.14.1
180
180
  type: :development
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
183
183
  requirements:
184
- - - ~>
184
+ - - "~>"
185
185
  - !ruby/object:Gem::Version
186
186
  version: 2.14.1
187
187
  - !ruby/object:Gem::Dependency
188
188
  name: vcr
189
189
  requirement: !ruby/object:Gem::Requirement
190
190
  requirements:
191
- - - '>='
191
+ - - ">="
192
192
  - !ruby/object:Gem::Version
193
193
  version: '0'
194
194
  type: :development
195
195
  prerelease: false
196
196
  version_requirements: !ruby/object:Gem::Requirement
197
197
  requirements:
198
- - - '>='
198
+ - - ">="
199
199
  - !ruby/object:Gem::Version
200
200
  version: '0'
201
201
  - !ruby/object:Gem::Dependency
202
202
  name: webmock
203
203
  requirement: !ruby/object:Gem::Requirement
204
204
  requirements:
205
- - - <=
205
+ - - "<="
206
206
  - !ruby/object:Gem::Version
207
207
  version: 1.18.0
208
208
  type: :development
209
209
  prerelease: false
210
210
  version_requirements: !ruby/object:Gem::Requirement
211
211
  requirements:
212
- - - <=
212
+ - - "<="
213
213
  - !ruby/object:Gem::Version
214
214
  version: 1.18.0
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: addressable
217
217
  requirement: !ruby/object:Gem::Requirement
218
218
  requirements:
219
- - - <=
219
+ - - "<="
220
220
  - !ruby/object:Gem::Version
221
221
  version: 2.3.6
222
222
  type: :development
223
223
  prerelease: false
224
224
  version_requirements: !ruby/object:Gem::Requirement
225
225
  requirements:
226
- - - <=
226
+ - - "<="
227
227
  - !ruby/object:Gem::Version
228
228
  version: 2.3.6
229
229
  description: Packaging made easy
@@ -236,11 +236,11 @@ executables:
236
236
  extensions: []
237
237
  extra_rdoc_files: []
238
238
  files:
239
- - .cane
240
- - .gitignore
241
- - .rspec
242
- - .ruby-version
243
- - .travis.yml
239
+ - ".cane"
240
+ - ".gitignore"
241
+ - ".rspec"
242
+ - ".ruby-version"
243
+ - ".travis.yml"
244
244
  - Gemfile
245
245
  - LICENSE.txt
246
246
  - README.md
@@ -257,6 +257,7 @@ files:
257
257
  - lib/dockly/cli.rb
258
258
  - lib/dockly/deb.rb
259
259
  - lib/dockly/docker.rb
260
+ - lib/dockly/docker/ecr.rb
260
261
  - lib/dockly/docker/registry.rb
261
262
  - lib/dockly/foreman.rb
262
263
  - lib/dockly/history.rb
@@ -269,6 +270,7 @@ files:
269
270
  - lib/dockly/version.rb
270
271
  - lib/foreman/cli_fix.rb
271
272
  - lib/foreman/export/base_fix.rb
273
+ - snippets/auth_ecr.erb
272
274
  - snippets/docker_tag_latest.erb
273
275
  - snippets/file_diff_docker_import.erb
274
276
  - snippets/file_docker_import.erb
@@ -286,6 +288,7 @@ files:
286
288
  - spec/dockly/build_cache/local_spec.rb
287
289
  - spec/dockly/cli_spec.rb
288
290
  - spec/dockly/deb_spec.rb
291
+ - spec/dockly/docker/ecr_spec.rb
289
292
  - spec/dockly/docker/registry_spec.rb
290
293
  - spec/dockly/docker_spec.rb
291
294
  - spec/dockly/foreman_spec.rb
@@ -308,24 +311,23 @@ homepage: https://github.com/swipely/dockly
308
311
  licenses:
309
312
  - MIT
310
313
  metadata: {}
311
- post_install_message:
314
+ post_install_message:
312
315
  rdoc_options: []
313
316
  require_paths:
314
317
  - lib
315
318
  required_ruby_version: !ruby/object:Gem::Requirement
316
319
  requirements:
317
- - - '>='
320
+ - - ">="
318
321
  - !ruby/object:Gem::Version
319
322
  version: '0'
320
323
  required_rubygems_version: !ruby/object:Gem::Requirement
321
324
  requirements:
322
- - - '>='
325
+ - - ">="
323
326
  - !ruby/object:Gem::Version
324
327
  version: '0'
325
328
  requirements: []
326
- rubyforge_project:
327
- rubygems_version: 2.0.14
328
- signing_key:
329
+ rubygems_version: 3.0.6
330
+ signing_key:
329
331
  specification_version: 4
330
332
  summary: Packaging made easy
331
333
  test_files:
@@ -335,6 +337,7 @@ test_files:
335
337
  - spec/dockly/build_cache/local_spec.rb
336
338
  - spec/dockly/cli_spec.rb
337
339
  - spec/dockly/deb_spec.rb
340
+ - spec/dockly/docker/ecr_spec.rb
338
341
  - spec/dockly/docker/registry_spec.rb
339
342
  - spec/dockly/docker_spec.rb
340
343
  - spec/dockly/foreman_spec.rb