octopress-deploy 1.1.0 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6606cff1ff42e965567713c41b4da108d87e9b6f
4
- data.tar.gz: 2d2a9ddc507baaed0bb08b255a5092839ac8ed02
3
+ metadata.gz: aaf29f35bfa57acc33ee25af7d0f5c9b5adcadb2
4
+ data.tar.gz: f085e982084365aeef29b3ca26276f4d440478bb
5
5
  SHA512:
6
- metadata.gz: d20780fe819e5233b6debeab56442de4fef9470bb6123869635b9bc614689a6c783cc81f36a12414c1110e3979309888ded340cb5229bd0dc03d7c585c43c41d
7
- data.tar.gz: fb5bf4c2574fa50fa05301464426cfb13233d1bfbda31871ed1d5bc3c7d1a1cd01e08a671dfc5b8ca906348bb61c097f80b61d6b13f270645f82848a7672004b
6
+ metadata.gz: 491ff56f994ec6f573776df8474162158ea1dc27b801e1296c2be0cb89780854b2eb4a644baa0995c3f28078f148db3c9dfe4ac7bcbd9eba01ca6441e1f4ed71
7
+ data.tar.gz: ff49d3b5e4469e5d4c1937cc7cc4309309ef857f1d7505fa158477e023591bdab921dc82683c653c3a79afc43b540042d0930e4c4dde424288ca3614cb1ef4c1
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Changelog
2
2
 
3
- ### 1.0.5 - 2015-02-06
3
+ ### 1.2.0 - 2015-03-07
4
+
5
+ - Added Support for Cloudfront invalidation [#49](https://github.com/octopress/deploy/pull/49)
6
+
7
+ ### 1.1.0 - 2015-02-06
4
8
 
5
9
  - Added incremental uploads to S3. [#46](https://github.com/octopress/deploy/pull/46)
6
10
 
data/README.md CHANGED
@@ -73,7 +73,7 @@ Mainly you'd do this if you're troubleshooting deployment and you want to see if
73
73
 
74
74
  ## Amazon S3 Deployment Configuration
75
75
 
76
- To deploy with Amazon S3 you will need to install the [aws-sdk gem](https://rubygems.org/gems/aws-sdk).
76
+ To deploy with Amazon S3 you will need to install the [aws-sdk-v1 gem](https://rubygems.org/gems/aws-sdk-v1).
77
77
 
78
78
  Important: when using S3, you must add your `_deploy.yml` to your .gitignore to prevent accidentally sharing
79
79
  account access information.
@@ -85,6 +85,7 @@ account access information.
85
85
  | `bucket_name` | S3 bucket name | |
86
86
  | `access_key_id` | AWS access key | |
87
87
  | `secret_access_key` | AWS secret key | |
88
+ | `distribution_id` | [optional] AWS CloudFront distribution id | |
88
89
  | `remote_path` | Directory files should be synced to. | / |
89
90
  | `verbose` | [optional] Display all file actions during deploy. | false |
90
91
  | `incremental` | [optional] Incremental deploy (only updated files) | false |
@@ -7,9 +7,9 @@ module Octopress
7
7
 
8
8
  def initialize(options)
9
9
  begin
10
- require 'aws-sdk'
10
+ require 'aws-sdk-v1'
11
11
  rescue LoadError
12
- abort "Deploying to S3 requires the aws-sdk gem. Install with `gem install aws-sdk`."
12
+ abort "Deploying to S3 requires the aws-sdk-v1 gem. Install with `gem install aws-sdk-v1`."
13
13
  end
14
14
  @options = options
15
15
  @local = options[:site_dir] || '_site'
@@ -17,6 +17,7 @@ module Octopress
17
17
  @access_key = options[:access_key_id] || ENV['AWS_ACCESS_KEY_ID']
18
18
  @secret_key = options[:secret_access_key] || ENV['AWS_SECRET_ACCESS_KEY']
19
19
  @region = options[:region] || ENV['AWS_DEFAULT_REGION'] || 'us-east-1'
20
+ @distro_id = options[:distribution_id] || ENV['AWS_DISTRIBUTION_ID']
20
21
  @remote_path = (options[:remote_path] || '/').sub(/^\//,'')
21
22
  @verbose = options[:verbose]
22
23
  @incremental = options[:incremental]
@@ -67,17 +68,24 @@ module Octopress
67
68
  def connect
68
69
  AWS.config(access_key_id: @access_key, secret_access_key: @secret_key, region: @region)
69
70
  @s3 = AWS.s3
71
+ @cloudfront = AWS.cloud_front.client
70
72
  end
71
73
 
72
74
  # Write site files to the selected bucket
73
75
  #
74
76
  def write_files
75
77
  puts "Writing #{pluralize('file', site_files.size)}:" if @verbose
78
+ files_to_invalidate = []
76
79
  site_files.each do |file|
77
80
  s3_filename = remote_path(file)
78
81
  o = @bucket.objects[s3_filename]
79
82
  file_with_options = get_file_with_metadata(file, s3_filename);
80
- s3sum = o.etag.tr('"','')
83
+
84
+ begin
85
+ s3sum = o.etag.tr('"','') if o.exists?
86
+ rescue AWS::S3::Errors::NoSuchKey
87
+ s3sum = ""
88
+ end
81
89
 
82
90
  if @incremental && (s3sum == Digest::MD5.file(file).hexdigest)
83
91
  if @verbose
@@ -87,6 +95,7 @@ module Octopress
87
95
  end
88
96
  else
89
97
  o.write(file_with_options)
98
+ files_to_invalidate.push(file)
90
99
  if @verbose
91
100
  puts "+ #{remote_path(file)}"
92
101
  else
@@ -94,6 +103,23 @@ module Octopress
94
103
  end
95
104
  end
96
105
  end
106
+
107
+ invalidate_cache(files_to_invalidate) unless @distro_id.nil?
108
+ end
109
+
110
+ def invalidate_cache(files)
111
+ puts "Invalidating cache for #{pluralize('file', site_files.size)}" if @verbose
112
+ @cloudfront.create_invalidation(
113
+ distribution_id: @distro_id,
114
+ invalidation_batch:{
115
+ paths:{
116
+ quantity: files.size,
117
+ items: files.map{|file| "/" + remote_path(file)}
118
+ },
119
+ # String of 8 random chars to uniquely id this invalidation
120
+ caller_reference: (0...8).map { ('a'..'z').to_a[rand(26)] }.join
121
+ }
122
+ ) unless files.empty?
97
123
  end
98
124
 
99
125
  def get_file_with_metadata(file, s3_filename)
@@ -237,6 +263,7 @@ module Octopress
237
263
  #{"bucket_name: #{options[:bucket_name]}".ljust(40)} # Name of the S3 bucket where these files will be stored.
238
264
  #{"access_key_id: #{options[:access_key_id]}".ljust(40)} # Get this from your AWS console at aws.amazon.com.
239
265
  #{"secret_access_key: #{options[:secret_access_key]}".ljust(40)} # Keep it safe; keep it secret. Keep this file in your .gitignore.
266
+ #{"distribution_id: #{options[:distribution_id]}".ljust(40)} # Get this from your CloudFront page at https://console.aws.amazon.com/cloudfront/
240
267
  #{"remote_path: #{options[:remote_path] || '/'}".ljust(40)} # relative path on bucket where files should be copied.
241
268
  #{"region: #{options[:remote_path] || 'us-east-1'}".ljust(40)} # Region where your bucket is located.
242
269
  #{"verbose: #{options[:verbose] || 'false'}".ljust(40)} # Print out all file operations.
@@ -1,5 +1,5 @@
1
1
  module Octopress
2
2
  module Deploy
3
- VERSION = "1.1.0"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "octopress"
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "clash"
26
- spec.add_development_dependency "aws-sdk"
26
+ spec.add_development_dependency "aws-sdk-v1"
27
27
 
28
28
  if RUBY_VERSION >= "2"
29
29
  spec.add_development_dependency "pry-byebug"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octopress-deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Mathis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-07 00:00:00.000000000 Z
11
+ date: 2015-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorator
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: aws-sdk
84
+ name: aws-sdk-v1
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="