webpacker_uploader 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +2 -1
- data/.rubocop.yml +1 -4
- data/CHANGELOG.md +19 -0
- data/Gemfile.lock +5 -3
- data/README.md +77 -9
- data/lib/webpacker_uploader.rb +2 -1
- data/lib/webpacker_uploader/instance.rb +22 -20
- data/lib/webpacker_uploader/mime.rb +11 -0
- data/lib/webpacker_uploader/providers/aws.rb +2 -0
- data/lib/webpacker_uploader/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 613e7597be0786ab1a3acf5d460eafeb42d1b94816250c64f36e38c13d2f9138
|
4
|
+
data.tar.gz: '01864d7e0ce27b5ca6030bb52383255c9af63789b006c8a8a199c9e78b17b380'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d6d102186314e943265aeaad56830c9b0404f52490640ab6e735c2a68b6923bc96b71cf24aeaf00c7d878fc7aebe07ee1f8c997965dfe0176fab12fc0cfd4f2
|
7
|
+
data.tar.gz: 1d22a604f388a94944504a5552f3b3928acf62b23ed21fc0b0570388fee1526c7bb12ac5ebacc0ce12b81ed5ed409ae59d41738b5fe9a99729c3d8061daee25c
|
data/.github/workflows/ruby.yml
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,13 +1,10 @@
|
|
1
1
|
require: rubocop-performance
|
2
|
+
|
2
3
|
AllCops:
|
3
4
|
TargetRubyVersion: 2.5
|
4
5
|
# RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
|
5
6
|
# to ignore them, so only the ones explicitly set in this file are enabled.
|
6
7
|
DisabledByDefault: true
|
7
|
-
Exclude:
|
8
|
-
- 'lib/install/templates/**'
|
9
|
-
- 'vendor/**/*'
|
10
|
-
- 'node_modules/**/*'
|
11
8
|
|
12
9
|
# Prefer &&/|| over and/or.
|
13
10
|
Style/AndOr:
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
4
|
+
|
5
|
+
## [Unreleased]
|
6
|
+
|
7
|
+
## [[0.2.0]](https://github.com/tlatsas/webpacker_uploader/releases/tag/v0.2.0) - 2021-02-09
|
8
|
+
|
9
|
+
### Added
|
10
|
+
|
11
|
+
- Make file exclusion list configurable. ([#3](https://github.com/tlatsas/webpacker_uploader/pull/3), [@estebanz01](https://github.com/estebanz01))
|
12
|
+
- Support prefixing remote S3 paths. ([#2](https://github.com/tlatsas/webpacker_uploader/pull/2), [@estebanz01](https://github.com/estebanz01))
|
13
|
+
- AWS provider: Add support for EC2 instance profile credentials. ([#2](https://github.com/tlatsas/webpacker_uploader/pull/2), [@estebanz01](https://github.com/estebanz01))
|
14
|
+
|
15
|
+
## [[0.1.0]](https://github.com/tlatsas/webpacker_uploader/releases/tag/v0.1.0) - 2020-10-01
|
16
|
+
|
17
|
+
### Added
|
18
|
+
|
19
|
+
- Initial release. ([@tlatsas](https://github.com/tlatsas))
|
data/Gemfile.lock
CHANGED
@@ -59,13 +59,15 @@ GEM
|
|
59
59
|
mime-types (3.3.1)
|
60
60
|
mime-types-data (~> 3.2015)
|
61
61
|
mime-types-data (3.2020.0512)
|
62
|
-
mini_portile2 (2.
|
62
|
+
mini_portile2 (2.5.0)
|
63
63
|
minitest (5.14.2)
|
64
|
-
nokogiri (1.
|
65
|
-
mini_portile2 (~> 2.
|
64
|
+
nokogiri (1.11.1)
|
65
|
+
mini_portile2 (~> 2.5.0)
|
66
|
+
racc (~> 1.4)
|
66
67
|
parallel (1.19.2)
|
67
68
|
parser (2.7.1.4)
|
68
69
|
ast (~> 2.4.1)
|
70
|
+
racc (1.5.2)
|
69
71
|
rack (2.2.3)
|
70
72
|
rack-proxy (0.6.5)
|
71
73
|
rack
|
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# WebpackerUploader
|
2
2
|
|
3
|
+
[![Ruby tests](https://img.shields.io/github/workflow/status/tlatsas/webpacker_uploader/Ruby%20tests?style=flat-square)](https://github.com/tlatsas/webpacker_uploader/actions)
|
4
|
+
[![RuboCop](https://img.shields.io/github/workflow/status/tlatsas/webpacker_uploader/RuboCop?label=rubocop&style=flat-square)](https://github.com/tlatsas/webpacker_uploader/actions)
|
5
|
+
[![Gem](https://img.shields.io/gem/v/webpacker_uploader?style=flat-square)](https://rubygems.org/gems/webpacker_uploader)
|
6
|
+
|
3
7
|
Webpacker uploader provides an easy way to upload your assets to AWS S3.
|
4
8
|
It knows which files to upload by reading the `manifest.json` file.
|
5
9
|
|
@@ -31,19 +35,83 @@ gem "aws-sdk-s3", require: false
|
|
31
35
|
## Usage
|
32
36
|
|
33
37
|
```ruby
|
34
|
-
|
35
|
-
|
38
|
+
require "webpacker_uploader"
|
39
|
+
require "webpacker_uploader/providers/aws"
|
40
|
+
|
41
|
+
provider_options = {
|
42
|
+
credentials: { profile_name: "staging" },
|
43
|
+
region: "eu-central-1",
|
44
|
+
bucket: "application-assets-20200929124523451600000001"
|
45
|
+
}
|
46
|
+
|
47
|
+
provider = WebpackerUploader::Providers::Aws.new(provider_options)
|
48
|
+
WebpackerUploader.upload!(provider)
|
49
|
+
```
|
36
50
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
51
|
+
Currently, the only provider implemented is the AWS S3 provider.
|
52
|
+
|
53
|
+
### AWS S3 provider
|
54
|
+
|
55
|
+
The AWS S3 provider credentials can be configured in three ways.
|
56
|
+
Passing a named profile name:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
provider_options = {
|
60
|
+
credentials: { profile_name: "staging" },
|
61
|
+
region: "eu-central-1",
|
62
|
+
bucket: "application-assets-20200929124523451600000001"
|
63
|
+
}
|
42
64
|
|
43
|
-
|
44
|
-
WebpackerUploader.upload!(provider)
|
65
|
+
provider = WebpackerUploader::Providers::Aws.new(provider_options)
|
45
66
|
```
|
46
67
|
|
68
|
+
passing the access and the secret keys directly:
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
provider_options = {
|
72
|
+
credentials: { access_key_id: "AKIAIOSFODNN7EXAMPLE", secret_access_key: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY" },
|
73
|
+
region: "eu-central-1",
|
74
|
+
bucket: "application-assets-20200929124523451600000001"
|
75
|
+
}
|
76
|
+
|
77
|
+
provider = WebpackerUploader::Providers::Aws.new(provider_options)
|
78
|
+
```
|
79
|
+
|
80
|
+
or using an EC2 instance profile:
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
provider_options = {
|
84
|
+
credentials: { instance_profile: true },
|
85
|
+
region: "eu-central-1",
|
86
|
+
bucket: "application-assets-20200929124523451600000001"
|
87
|
+
}
|
88
|
+
|
89
|
+
provider = WebpackerUploader::Providers::Aws.new(provider_options)
|
90
|
+
```
|
91
|
+
|
92
|
+
### Ignore files
|
93
|
+
|
94
|
+
The uploader can be configured to skip certain files based on the file extension.
|
95
|
+
By default `.map` files are excluded. This can be configured through the `ignored_extensions` attribute.
|
96
|
+
In order to upload everything pass an empty array.
|
97
|
+
|
98
|
+
```ruby
|
99
|
+
# skip uploading images
|
100
|
+
WebpackerUploader.ignored_extensions = [".png", ".jpg", ".webp"]
|
101
|
+
WebpackerUploader.upload!(provider)
|
102
|
+
```
|
103
|
+
|
104
|
+
### Prefix remote files
|
105
|
+
|
106
|
+
Uploaded files can be prefixed by setting the `prefix` parameter during upload:
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
WebpackerUploader.upload!(provider, prefix: "assets")
|
110
|
+
```
|
111
|
+
|
112
|
+
This will prefix all remote file paths with `assets` so instead of storing `packs/application-dd6b1cd38bfa093df600.css` it
|
113
|
+
will store `assets/packs/application-dd6b1cd38bfa093df600.css`.
|
114
|
+
|
47
115
|
## Development
|
48
116
|
|
49
117
|
After checking out the repo, run `bin/setup` to install dependencies.
|
data/lib/webpacker_uploader.rb
CHANGED
@@ -15,9 +15,10 @@ module WebpackerUploader
|
|
15
15
|
@instance ||= WebpackerUploader::Instance.new
|
16
16
|
end
|
17
17
|
|
18
|
-
delegate :logger, :logger=, :upload!, to: :instance
|
18
|
+
delegate :logger, :logger=, :upload!, :ignored_extensions, :ignored_extensions=, to: :instance
|
19
19
|
end
|
20
20
|
|
21
21
|
require "webpacker_uploader/instance"
|
22
22
|
require "webpacker_uploader/manifest"
|
23
|
+
require "webpacker_uploader/mime"
|
23
24
|
require "webpacker_uploader/version"
|
@@ -1,36 +1,38 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "mime-types"
|
4
|
-
|
5
3
|
class WebpackerUploader::Instance
|
6
|
-
# TODO make this configurable
|
7
|
-
IGNORE_EXTENSION = %w[.map].freeze
|
8
|
-
public_constant :IGNORE_EXTENSION
|
9
|
-
|
10
4
|
cattr_accessor(:logger) { ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT)) }
|
5
|
+
cattr_accessor(:ignored_extensions) { %w[.map] }
|
11
6
|
|
12
7
|
def manifest
|
13
8
|
@manifest ||= WebpackerUploader::Manifest.new
|
14
9
|
end
|
15
10
|
|
16
|
-
def upload!(provider)
|
17
|
-
|
18
|
-
|
11
|
+
def upload!(provider, prefix: nil)
|
12
|
+
if ignored_extensions.nil?
|
13
|
+
raise ArgumentError, "Ignored extensions should be specified as an array"
|
14
|
+
end
|
15
|
+
|
16
|
+
manifest.assets.each do |name, js_path|
|
17
|
+
path = js_path[1..-1]
|
18
|
+
|
19
|
+
remote_path =
|
20
|
+
if prefix.nil?
|
21
|
+
path
|
22
|
+
else
|
23
|
+
"#{prefix}/#{path}"
|
24
|
+
end
|
25
|
+
|
19
26
|
file_path = Rails.root.join("public", path)
|
20
27
|
|
21
|
-
if name.end_with?(*
|
22
|
-
logger.info("Skipping
|
28
|
+
if name.end_with?(*ignored_extensions)
|
29
|
+
logger.info("Skipping #{file_path}")
|
23
30
|
else
|
24
|
-
|
25
|
-
|
31
|
+
content_type = WebpackerUploader::Mime.mime_type(path)
|
32
|
+
logger.info("Processing #{file_path} as #{content_type}")
|
33
|
+
|
34
|
+
provider.upload!(remote_path, file_path, content_type)
|
26
35
|
end
|
27
36
|
end
|
28
37
|
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def content_type_for(file)
|
33
|
-
fallback = MIME::Types.type_for(file).first.content_type
|
34
|
-
Rack::Mime.mime_type(File.extname(file), fallback)
|
35
|
-
end
|
36
38
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "mime-types"
|
4
|
+
|
5
|
+
module WebpackerUploader::Mime
|
6
|
+
def mime_type(file_path)
|
7
|
+
fallback = MIME::Types.type_for(file_path).first&.content_type || "application/octet-stream"
|
8
|
+
Rack::Mime.mime_type(File.extname(file_path), fallback)
|
9
|
+
end
|
10
|
+
module_function :mime_type
|
11
|
+
end
|
@@ -25,6 +25,8 @@ module WebpackerUploader
|
|
25
25
|
def credentials(options)
|
26
26
|
if options[:profile_name].present?
|
27
27
|
::Aws::SharedCredentials.new(profile_name: options[:profile_name])
|
28
|
+
elsif options.key?(:instance_profile) && options[:instance_profile]
|
29
|
+
::Aws::InstanceProfileCredentials.new
|
28
30
|
else
|
29
31
|
::Aws::Credentials.new(options[:access_key_id], options[:secret_access_key])
|
30
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webpacker_uploader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tasos Latsas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: webpacker
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- ".github/workflows/ruby.yml"
|
92
92
|
- ".gitignore"
|
93
93
|
- ".rubocop.yml"
|
94
|
+
- CHANGELOG.md
|
94
95
|
- CONTRIBUTING.md
|
95
96
|
- Gemfile
|
96
97
|
- Gemfile.lock
|
@@ -102,6 +103,7 @@ files:
|
|
102
103
|
- lib/webpacker_uploader.rb
|
103
104
|
- lib/webpacker_uploader/instance.rb
|
104
105
|
- lib/webpacker_uploader/manifest.rb
|
106
|
+
- lib/webpacker_uploader/mime.rb
|
105
107
|
- lib/webpacker_uploader/providers/aws.rb
|
106
108
|
- lib/webpacker_uploader/version.rb
|
107
109
|
- webpacker_uploader.gemspec
|
@@ -110,7 +112,7 @@ licenses:
|
|
110
112
|
- MIT
|
111
113
|
metadata:
|
112
114
|
homepage_uri: https://github.com/tlatsas/webpacker_uploader
|
113
|
-
source_code_uri: https://github.com/tlatsas/webpacker_uploader/tree/v0.
|
115
|
+
source_code_uri: https://github.com/tlatsas/webpacker_uploader/tree/v0.2.0
|
114
116
|
post_install_message:
|
115
117
|
rdoc_options: []
|
116
118
|
require_paths:
|
@@ -126,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
128
|
- !ruby/object:Gem::Version
|
127
129
|
version: '0'
|
128
130
|
requirements: []
|
129
|
-
rubygems_version: 3.1.
|
131
|
+
rubygems_version: 3.1.4
|
130
132
|
signing_key:
|
131
133
|
specification_version: 4
|
132
134
|
summary: Uploads manifest.json file contents to the cloud
|