dpl 1.7.23.travis.1059.4 → 1.7.23.travis.1061.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGVjOTI1YTJmODhmYjQyNzdhOGMwOWFkYzFlYzA5NDBjOTA0YzU2MA==
4
+ NzQ0ZWU2YzNjNDkwMzMwMzZjZGNiYzk5MzgwMGEzNTc4OTQzOGMzZA==
5
5
  data.tar.gz: !binary |-
6
- MDAwZTU4NWNhMmRjMGYxYTk4NDgxYmY4MWU3OTA4NTNkNDhmNGYzYQ==
6
+ YzU5OGU5YzQxODllMTZjMmRhZGNiM2MyYmVhNmU4N2EwZmY4ZTQyNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZjRiZDM0YTk5MWM3NTBlM2VhODE4N2YyMzQ4MDgxYmE0YzJlYmJjZTFmOTMz
10
- NDZhMjBjOTQ0ZmMwYmI1ZTA2Y2FjNTk1OWZlMWU0OGY2OTgzZWY1ODllYTdk
11
- MWJiYWJmYTEyYmQ3MGNhZWVlNDkxNDY4ZGVlNTNjNTIzOGY1ZGQ=
9
+ YjA2MTQ0NDU1OTZiMjY4MjBmZTA3ZWYwMmRhZGFkNmIxOGNhOGEzNDliMWU3
10
+ YWI0MjlhNDcxMzA2ZGJhZWY3MGJiYWM2ZDY4M2FiODIwMjAwMzg1MjQyYTRl
11
+ MTRiMjFjMTM1NGRmMjE4ZTVlZGRkOTAyMDE5ZmZjN2ZkN2U4NDE=
12
12
  data.tar.gz: !binary |-
13
- NzE4YjE0ZDFlMTY5NWRkNzA5N2UyMGNjM2UxYWMyMTk1ZmNkNjhmNDQ3ZTk1
14
- N2YyNWRiOTZmNjYzMjVmZTNmYjgzOWU1MzFmNGQ1NzQxMDk0NzJjMTc3Yzk4
15
- MTI2NGNkNTlkY2YzMGRkMzRjNDQ2NmMyY2U1MjFkYWIxMzQyYWE=
13
+ OWZkZGE0N2MyZWFmMWQ0ZTEzYjYyNGY5NGNmMzNkNTRiMzg4NDNkYjA2N2E4
14
+ M2UyMzE1NWM3NDMyNDdmZWQ0ZTBmYTZjZWMwODM4MDQzZWJmOTRhNzJiZGJi
15
+ MWUyNTZmZGRhMDYyZWY4NTQ3N2UzNjkyMjE4OWQ0Njk2ODhmNzE=
data/Gemfile CHANGED
@@ -27,7 +27,7 @@ group :rubygems do
27
27
  end
28
28
 
29
29
  group :sss do
30
- gem 'aws-sdk-v1'
30
+ gem 'aws-sdk', '>= 2.0.18.pre'
31
31
  gem 'mime-types'
32
32
  end
33
33
 
data/README.md CHANGED
@@ -331,7 +331,6 @@ For authentication you can also use Travis CI secure environment variable:
331
331
  * **secret-access-key**: AWS Secret Key. Can be obtained from [here](https://console.aws.amazon.com/iam/home?#security_credential).
332
332
  * **bucket**: S3 Bucket.
333
333
  * **region**: S3 Region. Defaults to us-east-1.
334
- * **endpoint**: S3 Endpoint. Defaults to s3.amazonaws.com.
335
334
  * **upload-dir**: S3 directory to upload to. Defaults to root directory.
336
335
  * **local-dir**: Local directory to upload from. Can be set from a global perspective (~/travis/build) or relative perspective (build) Defaults to project root.
337
336
  * **detect-encoding**: Set HTTP header `Content-Encoding` for files compressed with `gzip` and `compress` utilities. Defaults to not set.
@@ -3,11 +3,11 @@ require 'json'
3
3
  module DPL
4
4
  class Provider
5
5
  class S3 < Provider
6
- requires 'aws-sdk-v1'
6
+ requires 'aws-sdk'
7
7
  requires 'mime-types'
8
8
 
9
9
  def api
10
- @api ||= AWS::S3.new(endpoint: options[:endpoint] || 's3.amazonaws.com')
10
+ @api ||= ::Aws::S3::Resource.new(s3_options)
11
11
  end
12
12
 
13
13
  def needs_key?
@@ -15,7 +15,7 @@ module DPL
15
15
  end
16
16
 
17
17
  def check_app
18
-
18
+ log 'Warning: The endpoint option is no longer used and can be removed.' if options[:endpoint]
19
19
  end
20
20
 
21
21
  def access_key_id
@@ -26,12 +26,14 @@ module DPL
26
26
  options[:secret_access_key] || context.env['AWS_SECRET_ACCESS_KEY'] || raise(Error, "missing secret_access_key")
27
27
  end
28
28
 
29
- def setup_auth
30
- AWS.config(:access_key_id => option(:access_key_id), :secret_access_key => option(:secret_access_key), :region => options[:region]||'us-east-1')
29
+ def s3_options
30
+ {
31
+ region: options[:region] || 'us-east-1',
32
+ credentials: ::Aws::Credentials.new(access_key_id, secret_access_key)
33
+ }
31
34
  end
32
35
 
33
36
  def check_auth
34
- setup_auth
35
37
  log "Logging in with Access Key: #{option(:access_key_id)[-4..-1].rjust(20, '*')}"
36
38
  end
37
39
 
@@ -47,29 +49,33 @@ module DPL
47
49
  content_type = MIME::Types.type_for(filename).first.to_s
48
50
  opts = { :content_type => content_type }.merge(encoding_option_for(filename))
49
51
  opts[:cache_control] = get_option_value_by_filename(options[:cache_control], filename) if options[:cache_control]
50
- opts[:acl] = options[:acl] if options[:acl]
52
+ opts[:acl] = options[:acl].gsub(/_/, '-') if options[:acl]
51
53
  opts[:expires] = get_option_value_by_filename(options[:expires], filename) if options[:expires]
52
54
  unless File.directory?(filename)
53
55
  log "uploading %p" % filename
54
- api.buckets[option(:bucket)].objects.create(upload_path(filename), File.read(filename), opts)
56
+ api.bucket(option(:bucket)).object(upload_path(filename)).upload_file(filename, opts)
55
57
  end
56
58
  end
57
59
  end
58
60
 
59
61
  if suffix = options[:index_document_suffix]
60
- api.buckets[option(:bucket)].configure_website do |cfg|
61
- cfg.index_document_suffix = suffix
62
- end
62
+ api.bucket(option(:bucket)).website.put(
63
+ website_configuration: {
64
+ index_document: {
65
+ suffix: suffix
66
+ }
67
+ }
68
+ )
63
69
  end
64
70
  end
65
71
 
66
72
  def deploy
67
73
  super
68
- rescue AWS::S3::Errors::InvalidAccessKeyId
74
+ rescue ::Aws::S3::Errors::InvalidAccessKeyId
69
75
  raise Error, "Invalid S3 Access Key Id, Stopping Deploy"
70
- rescue AWS::S3::Errors::SignatureDoesNotMatch
76
+ rescue ::Aws::S3::Errors::ChecksumError
71
77
  raise Error, "Aws Secret Key does not match Access Key Id, Stopping Deploy"
72
- rescue AWS::S3::Errors::AccessDenied
78
+ rescue ::Aws::S3::Errors::AccessDenied
73
79
  raise Error, "Oops, It looks like you tried to write to a bucket that isn't yours or doesn't exist yet. Please create the bucket before trying to write to it."
74
80
  end
75
81
 
@@ -4,17 +4,56 @@ require 'dpl/provider/s3'
4
4
 
5
5
  describe DPL::Provider::S3 do
6
6
 
7
- before (:each) do
8
- AWS.stub!
7
+ subject :provider do
8
+ described_class.new(DummyContext.new, :access_key_id => 'qwertyuiopasdfghjklz', :secret_access_key => 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz', :bucket => 'my-bucket')
9
+ end
10
+
11
+ describe '#s3_options' do
12
+ context 'without region' do
13
+ example do
14
+ options = provider.s3_options
15
+ expect(options[:region]).to eq('us-east-1')
16
+ end
17
+ end
18
+
19
+ context 'with region' do
20
+ example do
21
+ region = 'us-west-1'
22
+ provider.options.update(:region => region)
23
+ options = provider.s3_options
24
+ expect(options[:region]).to eq(region)
25
+ end
26
+ end
9
27
  end
28
+ end
29
+
30
+ describe DPL::Provider::S3 do
31
+
32
+ access_key_id = 'qwertyuiopasdfghjklz'
33
+ secret_access_key = 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz'
34
+ region = 'us-east-1'
35
+ bucket = 'my-bucket'
36
+
37
+ client_options = {
38
+ stub_responses: true,
39
+ region: region,
40
+ credentials: Aws::Credentials.new(access_key_id, secret_access_key)
41
+ }
10
42
 
11
43
  subject :provider do
12
- described_class.new(DummyContext.new, :access_key_id => 'qwertyuiopasdfghjklz', :secret_access_key => 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz', :bucket => 'my-bucket')
44
+ described_class.new(DummyContext.new, {
45
+ access_key_id: access_key_id,
46
+ secret_access_key: secret_access_key,
47
+ bucket: bucket
48
+ })
49
+ end
50
+
51
+ before :each do
52
+ provider.stub(:s3_options).and_return(client_options)
13
53
  end
14
54
 
15
55
  describe "#check_auth" do
16
56
  example do
17
- expect(provider).to receive(:setup_auth)
18
57
  expect(provider).to receive(:log).with("Logging in with Access Key: ****************jklz")
19
58
  provider.check_auth
20
59
  end
@@ -35,19 +74,6 @@ describe DPL::Provider::S3 do
35
74
  end
36
75
  end
37
76
 
38
- describe "#setup_auth" do
39
- example "Without :region" do
40
- expect(AWS).to receive(:config).with(:access_key_id => 'qwertyuiopasdfghjklz', :secret_access_key => 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz', :region => 'us-east-1').once.and_call_original
41
- provider.setup_auth
42
- end
43
- example "With :region" do
44
- provider.options.update(:region => 'us-west-2')
45
-
46
- expect(AWS).to receive(:config).with(:access_key_id => 'qwertyuiopasdfghjklz', :secret_access_key => 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz', :region => 'us-west-2').once
47
- provider.setup_auth
48
- end
49
- end
50
-
51
77
  describe "#needs_key?" do
52
78
  example do
53
79
  expect(provider.needs_key?).to eq(false)
@@ -69,14 +95,14 @@ describe DPL::Provider::S3 do
69
95
 
70
96
  example "Sends MIME type" do
71
97
  expect(Dir).to receive(:glob).and_yield(__FILE__)
72
- expect_any_instance_of(AWS::S3::ObjectCollection).to receive(:create).with(anything(), anything(), hash_including(:content_type => 'application/x-ruby'))
98
+ expect_any_instance_of(Aws::S3::Object).to receive(:upload_file).with(anything(), hash_including(:content_type => 'application/x-ruby'))
73
99
  provider.push_app
74
100
  end
75
101
 
76
102
  example "Sets Cache and Expiration" do
77
103
  provider.options.update(:cache_control => "max-age=99999999", :expires => "2012-12-21 00:00:00 -0000")
78
104
  expect(Dir).to receive(:glob).and_yield(__FILE__)
79
- expect_any_instance_of(AWS::S3::ObjectCollection).to receive(:create).with(anything(), anything(), hash_including(:cache_control => 'max-age=99999999', :expires => '2012-12-21 00:00:00 -0000'))
105
+ expect_any_instance_of(Aws::S3::Object).to receive(:upload_file).with(anything(), hash_including(:cache_control => 'max-age=99999999', :expires => '2012-12-21 00:00:00 -0000'))
80
106
  provider.push_app
81
107
  end
82
108
 
@@ -84,9 +110,8 @@ describe DPL::Provider::S3 do
84
110
  option_list = []
85
111
  provider.options.update(:cache_control => ["max-age=99999999", "no-cache" => ["foo.html", "bar.txt"], "max-age=9999" => "*.txt"], :expires => ["2012-12-21 00:00:00 -0000", "1970-01-01 00:00:00 -0000" => "*.html"])
86
112
  expect(Dir).to receive(:glob).and_yield("foo.html").and_yield("bar.txt").and_yield("baz.js")
87
- expect(File).to receive(:read).exactly(3).times.and_return("")
88
- allow_any_instance_of(AWS::S3::ObjectCollection).to receive(:create) do |_instance, key, _data, options|
89
- option_list << { key: key, options: options }
113
+ allow_any_instance_of(Aws::S3::Object).to receive(:upload_file) do |obj, _data, options|
114
+ option_list << { key: obj.key, options: options }
90
115
  end
91
116
  provider.push_app
92
117
  expect(option_list).to match_array([
@@ -99,13 +124,14 @@ describe DPL::Provider::S3 do
99
124
  example "Sets ACL" do
100
125
  provider.options.update(:acl => "public_read")
101
126
  expect(Dir).to receive(:glob).and_yield(__FILE__)
102
- expect_any_instance_of(AWS::S3::ObjectCollection).to receive(:create).with(anything(), anything(), hash_including(:acl => "public_read"))
127
+ expect_any_instance_of(Aws::S3::Object).to receive(:upload_file).with(anything(), hash_including(:acl => "public-read"))
103
128
  provider.push_app
104
129
  end
105
130
 
106
131
  example "Sets Website Index Document" do
107
132
  provider.options.update(:index_document_suffix => "test/index.html")
108
133
  expect(Dir).to receive(:glob).and_yield(__FILE__)
134
+ expect_any_instance_of(Aws::S3::BucketWebsite).to receive(:put).with(:website_configuration => { :index_document => { :suffix => "test/index.html" } })
109
135
  provider.push_app
110
136
  end
111
137
 
@@ -114,8 +140,7 @@ describe DPL::Provider::S3 do
114
140
  provider.options.update(:detect_encoding => true)
115
141
  expect(Dir).to receive(:glob).and_yield(path)
116
142
  expect(provider).to receive(:`).at_least(1).times.with("file #{path}").and_return('gzip compressed')
117
- expect(File).to receive(:read).with(path).and_return("")
118
- expect_any_instance_of(AWS::S3::ObjectCollection).to receive(:create).with(anything(), anything(), hash_including(:content_encoding => 'gzip'))
143
+ expect_any_instance_of(Aws::S3::Object).to receive(:upload_file).with(anything(), hash_including(:content_encoding => 'gzip'))
119
144
  provider.push_app
120
145
  end
121
146
 
@@ -126,15 +151,11 @@ describe DPL::Provider::S3 do
126
151
  end
127
152
  end
128
153
 
129
- describe "#api" do
130
- example "Without Endpoint" do
131
- expect(AWS::S3).to receive(:new).with(:endpoint => 's3.amazonaws.com')
132
- provider.api
133
- end
154
+ describe "#check_app" do
134
155
  example "With Endpoint" do
135
156
  provider.options.update(:endpoint => 's3test.com.s3-website-us-west-2.amazonaws.com')
136
- expect(AWS::S3).to receive(:new).with(:endpoint => 's3test.com.s3-website-us-west-2.amazonaws.com')
137
- provider.api
157
+ expect(provider).to receive(:log).with('Warning: The endpoint option is no longer used and can be removed.')
158
+ provider.check_app
138
159
  end
139
160
  end
140
161
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dpl
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.23.travis.1059.4
4
+ version: 1.7.23.travis.1061.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Haase