capistrano-s3 2.1.1 → 2.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -2
- data/CHANGELOG.md +6 -1
- data/lib/capistrano/s3/publisher.rb +42 -12
- data/lib/capistrano/s3/version.rb +1 -1
- data/lib/capistrano/tasks/capistrano_3.rb +3 -3
- data/spec/publisher_spec.rb +7 -7
- metadata +3 -3
- metadata.gz.sig +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f5218a88b280adaa259766a5e7a319e06c278956
         | 
| 4 | 
            +
              data.tar.gz: 35bf3e49a5cab9ece24767916d0e97e33a146ff8
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 73feab08d5b0c5c914a02b2c5db47403d44205b49c334a80639365c3a1eb1e6f363380a410ff1f94bf278459299684a7278e1b3b17f211465c680d6520cec4f0
         | 
| 7 | 
            +
              data.tar.gz: 7b6c516974ed73332988faf8ecde09ee8aff8706d0bdabc2822bf506701cd5a62d5492262221c9b632545645907f3661af5339aacbf634fc4033eda44d28616a
         | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | Binary file | 
    
        data.tar.gz.sig
    CHANGED
    
    | @@ -1,2 +1 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            �T4��hE{�`�o�=�W�CM��_��P��q"EBob��L�T{���Sc
         | 
| 1 | 
            +
            1.�z�5�F<�ݳ���p�����]�}#�	�o"����]$�u����28z�͵�qg���|7	�Y��hЕl�d4����9�o,�뇱ԕ��m9n�56����j�v�MΩzT�_e�����|��:����ߛ����.��5��G�v��O���_�5"إ7IO{�a�Q��7���o����wYt!9��4c`z5H�1�л��q�?a���(��C�0aF���tQ����$��
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,10 @@ | |
| 1 1 | 
             
            # CHANGELOG
         | 
| 2 2 |  | 
| 3 | 
            +
            ## v2.2.0
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Feature : Allow to deploy to multiple stages and buckets (#41)
         | 
| 6 | 
            +
            Fix : issue with new target_path feature (#40)
         | 
| 7 | 
            +
             | 
| 3 8 | 
             
            ## v2.1.1
         | 
| 4 9 |  | 
| 5 10 | 
             
            Update : removed locked & old net-ssh dependency for Ruby 1.9
         | 
| @@ -11,7 +16,7 @@ Change : Relax mime-types version requirement (#36) | |
| 11 16 |  | 
| 12 17 | 
             
            ## v2.0.0
         | 
| 13 18 |  | 
| 14 | 
            -
            Major change : AWS SDK dependency was  | 
| 19 | 
            +
            Major change : AWS SDK dependency was upgraded to 2.6, see migration guide at bottom of README to upgrade from v1.
         | 
| 15 20 | 
             
            Feature : Add wait_for_invalidation task (#32) @exoszajzbuk
         | 
| 16 21 | 
             
            Improvement : Simpler way to set deployment_path (#33) @j15e
         | 
| 17 22 |  | 
| @@ -8,14 +8,14 @@ module Capistrano | |
| 8 8 | 
             
                  LAST_PUBLISHED_FILE = '.last_published'
         | 
| 9 9 | 
             
                  LAST_INVALIDATION_FILE = '.last_invalidation'
         | 
| 10 10 |  | 
| 11 | 
            -
                  def self.publish!(region, key, secret, bucket, deployment_path, target_path, distribution_id, invalidations, exclusions, only_gzip, extra_options)
         | 
| 11 | 
            +
                  def self.publish!(region, key, secret, bucket, deployment_path, target_path, distribution_id, invalidations, exclusions, only_gzip, extra_options, stage = 'default')
         | 
| 12 12 | 
             
                    deployment_path_absolute = File.expand_path(deployment_path, Dir.pwd)
         | 
| 13 13 | 
             
                    s3 = self.establish_s3_client_connection!(region, key, secret)
         | 
| 14 14 | 
             
                    updated = false
         | 
| 15 15 |  | 
| 16 16 | 
             
                    self.files(deployment_path_absolute, exclusions).each do |file|
         | 
| 17 17 | 
             
                      if !File.directory?(file)
         | 
| 18 | 
            -
                        next if self.published?(file)
         | 
| 18 | 
            +
                        next if self.published?(file, bucket, stage)
         | 
| 19 19 | 
             
                        next if only_gzip && self.has_gzipped_version?(file)
         | 
| 20 20 |  | 
| 21 21 | 
             
                        path = self.base_file_path(deployment_path_absolute, file)
         | 
| @@ -34,7 +34,9 @@ module Capistrano | |
| 34 34 | 
             
                        :invalidation_batch => {
         | 
| 35 35 | 
             
                          :paths => {
         | 
| 36 36 | 
             
                            :quantity => invalidations.count,
         | 
| 37 | 
            -
                            :items => invalidations.map  | 
| 37 | 
            +
                            :items => invalidations.map do |path|
         | 
| 38 | 
            +
                              File.join('/', self.add_prefix(path, prefix: target_path))
         | 
| 39 | 
            +
                            end
         | 
| 38 40 | 
             
                          },
         | 
| 39 41 | 
             
                          :caller_reference => SecureRandom.hex
         | 
| 40 42 | 
             
                        }
         | 
| @@ -45,18 +47,18 @@ module Capistrano | |
| 45 47 | 
             
                      end
         | 
| 46 48 | 
             
                    end
         | 
| 47 49 |  | 
| 48 | 
            -
                     | 
| 50 | 
            +
                    self.published_to!(bucket, stage)
         | 
| 49 51 | 
             
                  end
         | 
| 50 52 |  | 
| 51 | 
            -
                  def self.clear!(region, key, secret, bucket)
         | 
| 53 | 
            +
                  def self.clear!(region, key, secret, bucket, stage = 'default')
         | 
| 52 54 | 
             
                    s3 = self.establish_s3_connection!(region, key, secret)
         | 
| 53 55 | 
             
                    s3.buckets[bucket].clear!
         | 
| 54 56 |  | 
| 55 | 
            -
                     | 
| 57 | 
            +
                    self.clear_published!(bucket, stage)
         | 
| 56 58 | 
             
                    FileUtils.rm(LAST_INVALIDATION_FILE)
         | 
| 57 59 | 
             
                  end
         | 
| 58 60 |  | 
| 59 | 
            -
                  def self.check_invalidation(region, key, secret, distribution_id)
         | 
| 61 | 
            +
                  def self.check_invalidation(region, key, secret, distribution_id, stage = 'default')
         | 
| 60 62 | 
             
                    last_invalidation_id = File.read(LAST_INVALIDATION_FILE).strip
         | 
| 61 63 |  | 
| 62 64 | 
             
                    cf = self.establish_cf_client_connection!(region, key, secret)
         | 
| @@ -100,9 +102,29 @@ module Capistrano | |
| 100 102 | 
             
                      Dir.glob("#{deployment_path}/**/*") - Dir.glob(exclusions.map { |e| "#{deployment_path}/#{e}" })
         | 
| 101 103 | 
             
                    end
         | 
| 102 104 |  | 
| 103 | 
            -
                    def self. | 
| 104 | 
            -
                       | 
| 105 | 
            -
             | 
| 105 | 
            +
                    def self.last_published
         | 
| 106 | 
            +
                      if File.exists? LAST_PUBLISHED_FILE
         | 
| 107 | 
            +
                        YAML.load_file(LAST_PUBLISHED_FILE) || {}
         | 
| 108 | 
            +
                      else
         | 
| 109 | 
            +
                        {}
         | 
| 110 | 
            +
                      end
         | 
| 111 | 
            +
                    end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                    def self.published_to!(bucket, stage)
         | 
| 114 | 
            +
                      current_publish = self.last_published
         | 
| 115 | 
            +
                      current_publish["#{bucket}::#{stage}"] = Time.now.iso8601
         | 
| 116 | 
            +
                      File.write(LAST_PUBLISHED_FILE, current_publish.to_yaml)
         | 
| 117 | 
            +
                    end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                    def self.clear_published!(bucket, stage)
         | 
| 120 | 
            +
                      current_publish = self.last_published
         | 
| 121 | 
            +
                      current_publish["#{bucket}::#{stage}"] = nil
         | 
| 122 | 
            +
                      File.write(LAST_PUBLISHED_FILE, current_publish.to_yaml)
         | 
| 123 | 
            +
                    end
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                    def self.published?(file, bucket, stage)
         | 
| 126 | 
            +
                      return false unless last_publish_time = self.last_published["#{bucket}::#{stage}"]
         | 
| 127 | 
            +
                      File.mtime(file) < Time.parse(last_publish_time)
         | 
| 106 128 | 
             
                    end
         | 
| 107 129 |  | 
| 108 130 | 
             
                    def self.put_object(s3, bucket, target_path, path, file, only_gzip, extra_options)
         | 
| @@ -110,7 +132,7 @@ module Capistrano | |
| 110 132 | 
             
                      mime_type = mime_type_for_file(base_name)
         | 
| 111 133 | 
             
                      options   = {
         | 
| 112 134 | 
             
                        :bucket => bucket,
         | 
| 113 | 
            -
                        :key    =>  | 
| 135 | 
            +
                        :key    => self.add_prefix(path, prefix: target_path),
         | 
| 114 136 | 
             
                        :body   => open(file),
         | 
| 115 137 | 
             
                        :acl    => 'public-read',
         | 
| 116 138 | 
             
                      }
         | 
| @@ -126,7 +148,7 @@ module Capistrano | |
| 126 148 | 
             
                          options.merge!(build_gzip_content_type_hash(file, mime_type))
         | 
| 127 149 |  | 
| 128 150 | 
             
                          # upload as original file name
         | 
| 129 | 
            -
                          options.merge!(key:  | 
| 151 | 
            +
                          options.merge!(key: self.add_prefix(self.orig_name(path), prefix: target_path)) if only_gzip
         | 
| 130 152 | 
             
                        end
         | 
| 131 153 | 
             
                      end
         | 
| 132 154 |  | 
| @@ -172,6 +194,14 @@ module Capistrano | |
| 172 194 | 
             
                    def self.orig_name(file)
         | 
| 173 195 | 
             
                      file.sub(/\.gz$/, "")
         | 
| 174 196 | 
             
                    end
         | 
| 197 | 
            +
             | 
| 198 | 
            +
                    def self.add_prefix(path, prefix:)
         | 
| 199 | 
            +
                      if prefix.empty?
         | 
| 200 | 
            +
                        path
         | 
| 201 | 
            +
                      else
         | 
| 202 | 
            +
                        File.join(prefix, path)
         | 
| 203 | 
            +
                      end
         | 
| 204 | 
            +
                    end
         | 
| 175 205 | 
             
                end
         | 
| 176 206 | 
             
              end
         | 
| 177 207 | 
             
            end
         | 
| @@ -8,19 +8,19 @@ namespace :deploy do | |
| 8 8 | 
             
              namespace :s3 do
         | 
| 9 9 | 
             
                desc "Empties bucket of all files. Caution when using this command, as it cannot be undone!"
         | 
| 10 10 | 
             
                task :empty do
         | 
| 11 | 
            -
                  Capistrano::S3::Publisher.clear!(fetch(:region), fetch(:access_key_id), fetch(:secret_access_key), fetch(:bucket))
         | 
| 11 | 
            +
                  Capistrano::S3::Publisher.clear!(fetch(:region), fetch(:access_key_id), fetch(:secret_access_key), fetch(:bucket), fetch(:stage))
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| 14 14 | 
             
                desc "Waits until the last CloudFront invalidation batch is completed"
         | 
| 15 15 | 
             
                task :wait_for_invalidation do
         | 
| 16 | 
            -
                  Capistrano::S3::Publisher.check_invalidation(fetch(:region), fetch(:access_key_id), fetch(:secret_access_key), fetch(:distribution_id))
         | 
| 16 | 
            +
                  Capistrano::S3::Publisher.check_invalidation(fetch(:region), fetch(:access_key_id), fetch(:secret_access_key), fetch(:distribution_id), fetch(:stage))
         | 
| 17 17 | 
             
                end
         | 
| 18 18 |  | 
| 19 19 | 
             
                desc "Upload files to the bucket in the current state"
         | 
| 20 20 | 
             
                task :upload_files do
         | 
| 21 21 | 
             
                  extra_options = { :write => fetch(:bucket_write_options), :redirect => fetch(:redirect_options) }
         | 
| 22 22 | 
             
                  Capistrano::S3::Publisher.publish!(fetch(:region), fetch(:access_key_id), fetch(:secret_access_key),
         | 
| 23 | 
            -
                                         fetch(:bucket), fetch(:deployment_path), fetch(:target_path), fetch(:distribution_id), fetch(:invalidations), fetch(:exclusions), fetch(:only_gzip), extra_options)
         | 
| 23 | 
            +
                                         fetch(:bucket), fetch(:deployment_path), fetch(:target_path), fetch(:distribution_id), fetch(:invalidations), fetch(:exclusions), fetch(:only_gzip), extra_options, fetch(:stage))
         | 
| 24 24 | 
             
                end
         | 
| 25 25 | 
             
              end
         | 
| 26 26 |  | 
    
        data/spec/publisher_spec.rb
    CHANGED
    
    | @@ -10,12 +10,12 @@ describe Capistrano::S3::Publisher do | |
| 10 10 | 
             
              context "on publish!" do
         | 
| 11 11 | 
             
                it "publish all files" do
         | 
| 12 12 | 
             
                  Aws::S3::Client.any_instance.expects(:put_object).times(8)
         | 
| 13 | 
            -
                  Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], [], false, {})
         | 
| 13 | 
            +
                  Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], [], false, {}, 'staging')
         | 
| 14 14 | 
             
                end
         | 
| 15 15 |  | 
| 16 16 | 
             
                it "publish only gzip files when option is enabled" do
         | 
| 17 17 | 
             
                  Aws::S3::Client.any_instance.expects(:put_object).times(4)
         | 
| 18 | 
            -
                  Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], [], true, {})
         | 
| 18 | 
            +
                  Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], [], true, {}, 'staging')
         | 
| 19 19 | 
             
                end
         | 
| 20 20 |  | 
| 21 21 | 
             
                context "invalidations" do
         | 
| @@ -23,14 +23,14 @@ describe Capistrano::S3::Publisher do | |
| 23 23 | 
             
                    Aws::S3::Client.any_instance.expects(:put_object).times(8)
         | 
| 24 24 | 
             
                    Aws::CloudFront::Client.any_instance.expects(:create_invalidation).once
         | 
| 25 25 |  | 
| 26 | 
            -
                    Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', ['*'], [], false, {})
         | 
| 26 | 
            +
                    Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', ['*'], [], false, {}, 'staging')
         | 
| 27 27 | 
             
                  end
         | 
| 28 28 |  | 
| 29 29 | 
             
                  it "publish all files without invalidations" do
         | 
| 30 30 | 
             
                    Aws::S3::Client.any_instance.expects(:put_object).times(8)
         | 
| 31 31 | 
             
                    Aws::CloudFront::Client.any_instance.expects(:create_invalidation).never
         | 
| 32 32 |  | 
| 33 | 
            -
                    Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], [], false, {})
         | 
| 33 | 
            +
                    Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], [], false, {}, 'staging')
         | 
| 34 34 | 
             
                  end
         | 
| 35 35 | 
             
                end
         | 
| 36 36 |  | 
| @@ -39,21 +39,21 @@ describe Capistrano::S3::Publisher do | |
| 39 39 | 
             
                    Aws::S3::Client.any_instance.expects(:put_object).times(7)
         | 
| 40 40 |  | 
| 41 41 | 
             
                    exclude_paths = ['fonts/cantarell-regular-webfont.svg']
         | 
| 42 | 
            -
                    Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], exclude_paths, false, {})
         | 
| 42 | 
            +
                    Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], exclude_paths, false, {}, 'staging')
         | 
| 43 43 | 
             
                  end
         | 
| 44 44 |  | 
| 45 45 | 
             
                  it "exclude multiple files" do
         | 
| 46 46 | 
             
                    Aws::S3::Client.any_instance.expects(:put_object).times(6)
         | 
| 47 47 |  | 
| 48 48 | 
             
                    exclude_paths = ['fonts/cantarell-regular-webfont.svg', 'fonts/cantarell-regular-webfont.svg.gz']
         | 
| 49 | 
            -
                    Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], exclude_paths, false, {})
         | 
| 49 | 
            +
                    Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], exclude_paths, false, {}, 'staging')
         | 
| 50 50 | 
             
                  end
         | 
| 51 51 |  | 
| 52 52 | 
             
                  it "exclude directory" do
         | 
| 53 53 | 
             
                    Aws::S3::Client.any_instance.expects(:put_object).times(0)
         | 
| 54 54 |  | 
| 55 55 | 
             
                    exclude_paths = ['fonts/**/*']
         | 
| 56 | 
            -
                    Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], exclude_paths, false, {})
         | 
| 56 | 
            +
                    Capistrano::S3::Publisher.publish!('s3.amazonaws.com', 'abc', '123', 'mybucket.amazonaws.com', 'spec/sample', '', 'cf123', [], exclude_paths, false, {}, 'staging')
         | 
| 57 57 | 
             
                  end
         | 
| 58 58 | 
             
                end
         | 
| 59 59 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: capistrano-s3
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jean-Philippe Doyle
         | 
| @@ -36,7 +36,7 @@ cert_chain: | |
| 36 36 | 
             
              t/JsZnAlWYkJIees2SFV5X/t34oeMu04yY2u9y2YBqKovR97m5YF7zqgx0JODV0x
         | 
| 37 37 | 
             
              ytwUJvEjznBnJV4OoDE=
         | 
| 38 38 | 
             
              -----END CERTIFICATE-----
         | 
| 39 | 
            -
            date: 2017- | 
| 39 | 
            +
            date: 2017-08-30 00:00:00.000000000 Z
         | 
| 40 40 | 
             
            dependencies:
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: aws-sdk
         | 
| @@ -206,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 206 206 | 
             
                  version: '0'
         | 
| 207 207 | 
             
            requirements: []
         | 
| 208 208 | 
             
            rubyforge_project: 
         | 
| 209 | 
            -
            rubygems_version: 2.6. | 
| 209 | 
            +
            rubygems_version: 2.6.12
         | 
| 210 210 | 
             
            signing_key: 
         | 
| 211 211 | 
             
            specification_version: 4
         | 
| 212 212 | 
             
            summary: Build and deploy a static website to Amazon S3
         | 
    
        metadata.gz.sig
    CHANGED
    
    | @@ -1,3 +1,3 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            � | 
| 3 | 
            -
             | 
| 1 | 
            +
            ���mW�%�Z�?E�v��l�ę_�@[G@���!,b�S��I?7�p�|���+EQz�ҁ�RGaV�g��W���	�z���)� ��P�ˣ�f�4��W4X��q�mXE%w�E�"*ș	wg/�#
         | 
| 2 | 
            +
            �Yt����j��Y�yMF�h�����1��1���'RqK�g{0��}2���xa�9����?�f��1g��*���-Z~�e�}�Y
         | 
| 3 | 
            +
            �g�8!�C��:�6�f����0}�Q'�v����D��M�ƒ_�5�
         |