jekyll-s3 0.0.3 → 0.0.4
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/.gitignore +1 -0
- data/README.md +20 -9
- data/features/jekyll-s3.feature +7 -9
- data/features/support/env.rb +1 -0
- data/jekyll-s3.gemspec +2 -1
- data/lib/jekyll-s3/uploader.rb +33 -18
- data/lib/jekyll-s3/version.rb +1 -1
- data/spec/lib/uploader_spec.rb +33 -0
- metadata +27 -13
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -22,18 +22,29 @@ s3_bucket: your.blog.bucket.com
|
|
22
22
|
|
23
23
|
* Run `jekyll-s3`. Done.
|
24
24
|
|
25
|
-
## Want
|
26
|
-
|
27
|
-
*
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
## Want the root url to render index.html?
|
26
|
+
|
27
|
+
* Log into <https://console.aws.amazon.com/s3/home>
|
28
|
+
* Set the Index document to index.html in Bucket Properties >
|
29
|
+
Website.
|
30
|
+
* Visit the website endpoint:
|
31
|
+
(http://yourblog.s3-website...amazonaws.com)
|
31
32
|
|
32
33
|
## Todo
|
33
34
|
|
34
|
-
* Upload new / updated files *only*
|
35
|
-
|
36
|
-
|
35
|
+
* Upload new / updated files *only* (using s3-sync?)
|
36
|
+
|
37
|
+
## Development
|
38
|
+
|
39
|
+
* Install bundler and run `bundle install`
|
40
|
+
* Run the integration tests by running `bundle exec cucumber`
|
41
|
+
* Run the unit tests by running `bundle exec rspec spec/lib/*.rb`
|
42
|
+
|
43
|
+
## License
|
44
|
+
|
45
|
+
MIT
|
37
46
|
|
47
|
+
## Copyright
|
38
48
|
|
49
|
+
Copyright (c) 2011 VersaPay, Philippe Creux.
|
39
50
|
|
data/features/jekyll-s3.feature
CHANGED
@@ -5,7 +5,7 @@ Feature: jekyll-s3
|
|
5
5
|
I want to run jekyll-s3 and say OMG it just worked!
|
6
6
|
|
7
7
|
Scenario: Run jekyll-s3 in the wrong directory
|
8
|
-
When I run
|
8
|
+
When I run `jekyll-s3`
|
9
9
|
Then the output should contain:
|
10
10
|
"""
|
11
11
|
I can't find any directory called _site. Are you in the right directory?
|
@@ -13,7 +13,7 @@ Feature: jekyll-s3
|
|
13
13
|
|
14
14
|
Scenario: Run jekyll-s3 for the first time
|
15
15
|
Given a directory named "_site"
|
16
|
-
When I run
|
16
|
+
When I run `jekyll-s3`
|
17
17
|
Then the output should contain:
|
18
18
|
"""
|
19
19
|
I've just generated a file called _jekyll_s3.yml. Go put your details in it!
|
@@ -28,7 +28,7 @@ Feature: jekyll-s3
|
|
28
28
|
Scenario: Run jekyll-s3 with an empty configuration file
|
29
29
|
Given a directory named "_site"
|
30
30
|
And an empty file named "_jekyll_s3.yml"
|
31
|
-
When I run
|
31
|
+
When I run `jekyll-s3`
|
32
32
|
Then the output should contain:
|
33
33
|
"""
|
34
34
|
I can't parse the file _jekyll_s3.yml. It should look like this:
|
@@ -44,7 +44,7 @@ Feature: jekyll-s3
|
|
44
44
|
s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
|
45
45
|
this is not yaml
|
46
46
|
"""
|
47
|
-
When I run
|
47
|
+
When I run `jekyll-s3`
|
48
48
|
Then the output should contain:
|
49
49
|
"""
|
50
50
|
I can't parse the file _jekyll_s3.yml. It should look like this:
|
@@ -61,7 +61,7 @@ Feature: jekyll-s3
|
|
61
61
|
s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
|
62
62
|
s3_bucket:
|
63
63
|
"""
|
64
|
-
When I run
|
64
|
+
When I run `jekyll-s3`
|
65
65
|
Then the output should contain:
|
66
66
|
"""
|
67
67
|
I can't parse the file _jekyll_s3.yml. It should look like this:
|
@@ -78,10 +78,8 @@ Feature: jekyll-s3
|
|
78
78
|
s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
|
79
79
|
s3_bucket: your.blog.bucket.com
|
80
80
|
"""
|
81
|
-
When I run
|
81
|
+
When I run `jekyll-s3`
|
82
82
|
Then the output should contain:
|
83
83
|
"""
|
84
|
-
|
84
|
+
Deploying _site/* to your.blog.bucket.com
|
85
85
|
"""
|
86
|
-
|
87
|
-
|
data/features/support/env.rb
CHANGED
data/jekyll-s3.gemspec
CHANGED
@@ -17,8 +17,9 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.add_dependency 'aws-s3'
|
18
18
|
|
19
19
|
s.add_development_dependency 'rspec'
|
20
|
+
s.add_development_dependency 'mocha'
|
20
21
|
s.add_development_dependency 'cucumber'
|
21
|
-
s.add_development_dependency 'aruba'
|
22
|
+
s.add_development_dependency 'aruba', '>= 0.4.7'
|
22
23
|
|
23
24
|
s.files = `git ls-files`.split("\n")
|
24
25
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/jekyll-s3/uploader.rb
CHANGED
@@ -22,8 +22,22 @@ s3_bucket: your.blog.bucket.com
|
|
22
22
|
end
|
23
23
|
|
24
24
|
protected
|
25
|
-
|
26
|
-
|
25
|
+
|
26
|
+
def run_with_retry
|
27
|
+
begin
|
28
|
+
yield
|
29
|
+
rescue AWS::S3::RequestTimeout => e
|
30
|
+
$stderr.puts "Exception Occurred: #{e.message} (#{e.class}) Retrying in 5 seconds..."
|
31
|
+
sleep 5
|
32
|
+
retry
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def local_files
|
37
|
+
Dir[SITE_DIR + '/**/*'].
|
38
|
+
delete_if { |f| File.directory?(f) }.
|
39
|
+
map { |f| f.gsub(SITE_DIR + '/', '') }
|
40
|
+
end
|
27
41
|
|
28
42
|
# Please spec me!
|
29
43
|
def upload_to_s3!
|
@@ -34,25 +48,23 @@ s3_bucket: your.blog.bucket.com
|
|
34
48
|
:secret_access_key => @s3_secret,
|
35
49
|
:use_ssl => true
|
36
50
|
)
|
37
|
-
unless Service.buckets.map(&:name).include?(@s3_bucket)
|
51
|
+
unless AWS::S3::Service.buckets.map(&:name).include?(@s3_bucket)
|
38
52
|
puts("Creating bucket #{@s3_bucket}")
|
39
|
-
Bucket.create(@s3_bucket)
|
53
|
+
AWS::S3::Bucket.create(@s3_bucket)
|
40
54
|
end
|
41
55
|
|
42
|
-
bucket = Bucket.find(@s3_bucket)
|
43
|
-
|
44
|
-
local_files = Dir[SITE_DIR + '/**/*'].
|
45
|
-
delete_if { |f| File.directory?(f) }.
|
46
|
-
map { |f| f.gsub(SITE_DIR + '/', '') }
|
56
|
+
bucket = AWS::S3::Bucket.find(@s3_bucket)
|
47
57
|
|
48
58
|
remote_files = bucket.objects.map { |f| f.key }
|
49
59
|
|
50
60
|
to_upload = local_files
|
51
|
-
to_upload.each do |f|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
61
|
+
to_upload.each do |f|
|
62
|
+
run_with_retry do
|
63
|
+
if AWS::S3::S3Object.store(f, open("#{SITE_DIR}/#{f}"), @s3_bucket, :access => 'public-read')
|
64
|
+
puts("Upload #{f}: Success!")
|
65
|
+
else
|
66
|
+
puts("Upload #{f}: FAILURE!")
|
67
|
+
end
|
56
68
|
end
|
57
69
|
end
|
58
70
|
|
@@ -73,15 +85,18 @@ s3_bucket: your.blog.bucket.com
|
|
73
85
|
end
|
74
86
|
end
|
75
87
|
if (delete_all || delete) && !(keep_all || keep)
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
88
|
+
run_with_retry do
|
89
|
+
if AWS::S3::S3Object.delete(f, @s3_bucket)
|
90
|
+
puts("Delete #{f}: Success!")
|
91
|
+
else
|
92
|
+
puts("Delete #{f}: FAILURE!")
|
93
|
+
end
|
80
94
|
end
|
81
95
|
end
|
82
96
|
end
|
83
97
|
|
84
98
|
puts "Done! Go visit: http://#{@s3_bucket}.s3.amazonaws.com/index.html"
|
99
|
+
true
|
85
100
|
end
|
86
101
|
|
87
102
|
def check_jekyll_project!
|
data/lib/jekyll-s3/version.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../../lib/jekyll-s3.rb"
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.mock_framework = :mocha
|
5
|
+
end
|
6
|
+
|
7
|
+
describe Jekyll::S3::Uploader do
|
8
|
+
describe "#upload_to_s3" do
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
AWS::S3::Base.expects(:establish_connection!).at_least(1).returns true
|
12
|
+
AWS::S3::Service.expects(:buckets).at_least(1).returns []
|
13
|
+
AWS::S3::Bucket.expects(:create).at_least(1).returns true
|
14
|
+
bucket = mock()
|
15
|
+
bucket.expects(:objects).returns []
|
16
|
+
AWS::S3::Bucket.expects(:find).at_least(1).returns bucket
|
17
|
+
|
18
|
+
@uploader = Jekyll::S3::Uploader.new
|
19
|
+
@uploader.expects(:local_files).at_least(1).returns ['index.html']
|
20
|
+
@uploader.expects(:open).at_least(1).returns true
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should work right when there are no exceptions" do
|
24
|
+
AWS::S3::S3Object.expects(:store).at_least(1).returns(true)
|
25
|
+
@uploader.send(:upload_to_s3!).should
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should properly handle exceptions on uploading to S3" do
|
29
|
+
AWS::S3::S3Object.expects(:store).raises(AWS::S3::RequestTimeout.new('timeout', 'timeout')).then.at_least(1).returns(true)
|
30
|
+
@uploader.send(:upload_to_s3!).should
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-s3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Philippe Creux
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable: jekyll-s3
|
18
|
+
date: 2011-11-18 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: aws-s3
|
@@ -47,7 +46,7 @@ dependencies:
|
|
47
46
|
type: :development
|
48
47
|
version_requirements: *id002
|
49
48
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
49
|
+
name: mocha
|
51
50
|
prerelease: false
|
52
51
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
52
|
none: false
|
@@ -61,7 +60,7 @@ dependencies:
|
|
61
60
|
type: :development
|
62
61
|
version_requirements: *id003
|
63
62
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
63
|
+
name: cucumber
|
65
64
|
prerelease: false
|
66
65
|
requirement: &id004 !ruby/object:Gem::Requirement
|
67
66
|
none: false
|
@@ -74,6 +73,22 @@ dependencies:
|
|
74
73
|
version: "0"
|
75
74
|
type: :development
|
76
75
|
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: aruba
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 1
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
- 4
|
88
|
+
- 7
|
89
|
+
version: 0.4.7
|
90
|
+
type: :development
|
91
|
+
version_requirements: *id005
|
77
92
|
description: Push your jekyll blog to AWS S3
|
78
93
|
email:
|
79
94
|
- pcreux@gmail.com
|
@@ -97,7 +112,7 @@ files:
|
|
97
112
|
- lib/jekyll-s3/errors.rb
|
98
113
|
- lib/jekyll-s3/uploader.rb
|
99
114
|
- lib/jekyll-s3/version.rb
|
100
|
-
|
115
|
+
- spec/lib/uploader_spec.rb
|
101
116
|
homepage: https://github.com/versapay/jekyll-s3
|
102
117
|
licenses: []
|
103
118
|
|
@@ -127,10 +142,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
142
|
requirements: []
|
128
143
|
|
129
144
|
rubyforge_project:
|
130
|
-
rubygems_version: 1.
|
145
|
+
rubygems_version: 1.8.11
|
131
146
|
signing_key:
|
132
147
|
specification_version: 3
|
133
148
|
summary: Push your jekyll blog to S3"
|
134
|
-
test_files:
|
135
|
-
|
136
|
-
- features/support/env.rb
|
149
|
+
test_files: []
|
150
|
+
|