dockly 3.4.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/README.md +22 -0
- data/lib/dockly/bash_builder.rb +1 -0
- data/lib/dockly/build_cache/docker.rb +1 -1
- data/lib/dockly/deb.rb +38 -19
- data/lib/dockly/docker.rb +19 -5
- data/lib/dockly/docker/ecr.rb +60 -0
- data/lib/dockly/version.rb +3 -3
- data/snippets/auth_ecr.erb +11 -0
- data/spec/dockly/docker/ecr_spec.rb +80 -0
- data/spec/dockly/docker_spec.rb +71 -1
- metadata +49 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cdd9e8a044854b4149effa288483edb90a66ee8f58d35108696f0abc3a21ed95
|
4
|
+
data.tar.gz: 8ee450caf29059b5c7a389683676953c02f3c497809eef2287648504d59c9023
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cf097573867f7c8ddafa597b0e0249780789fe098f6b4ffec3d48ae0b3dfc7cb6e48686214d846ab021c7cee5dec3bdd2c29f3423c1b82341d8173c2570fc05
|
7
|
+
data.tar.gz: 5bb556418f6b975bc1cd2dfffcb0117ee61379b6426be681a80961f4831976319f91fd78e0e81c94bcd4a5ce3a7a1bb093f39d77379b2bb1708d2da7e7cfbaae
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.3.1
|
data/.travis.yml
CHANGED
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
|
|
data/lib/dockly/bash_builder.rb
CHANGED
@@ -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.
|
80
|
+
container.archive_out(output_directory) { |chunk| file.write(chunk.to_s) }
|
81
81
|
container.kill
|
82
82
|
file.tap(&:rewind)
|
83
83
|
end
|
data/lib/dockly/deb.rb
CHANGED
@@ -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
|
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
|
-
|
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
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
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
|
-
|
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)
|
data/lib/dockly/docker.rb
CHANGED
@@ -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 :
|
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
|
-
|
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
|
-
|
325
|
-
|
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
|
data/lib/dockly/version.rb
CHANGED
@@ -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
|
data/spec/dockly/docker_spec.rb
CHANGED
@@ -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(:"@
|
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:
|
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:
|
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
|
-
|
327
|
-
|
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
|