webpacker_uploader 0.1.0 → 0.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
- 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
|
+
[](https://github.com/tlatsas/webpacker_uploader/actions)
|
4
|
+
[](https://github.com/tlatsas/webpacker_uploader/actions)
|
5
|
+
[](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
|