jekyll_picture_tag 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f9db202e681087ec43ee9cc26b3e32dbc76de45c394ea834039b72f100215e1
4
- data.tar.gz: 2c195508efb7d9e05bda81dd529366f47fa25c5e1ce7bc6ca60edbd5e2db8a4f
3
+ metadata.gz: 5d6d2bf0edc139d12f269e614e3585ecf18ace2a48a92e9bc1367a6e654ba2d0
4
+ data.tar.gz: e6fe2197c58c368255472631adeef9dd9a593230c7655617ad66d00330ba4b4e
5
5
  SHA512:
6
- metadata.gz: fc17dcd0e8a5ffb70f3ca67bf22e8bb34b2e9c5af61ffabaf5e92e853b01bec6a0b56a01f45ccc44f55be11112aed75e04ac293e4d8012af3b135ce20aaa84fb
7
- data.tar.gz: '09b01489bcd3dc1e7428ae41fe6f603488f1863cc731ad0d70f5861cb1c3525dda04f7445a9f97d22f005b5a900c8d6ba019467f7379575fe07c0370e9a0d8cb'
6
+ metadata.gz: 8682488670153d69640703aa1cd128f57be84c979efff085d19144e4861c3a7d854ae9d638e766ce2398ccafec68b9243613b65b2186e51c83a3d89ef9bc3c9d
7
+ data.tar.gz: 631adc8189614973ab8ad6b14c2b08fd335abcf53cf8a7b6b63cd23f66bcfb9e5f2c800e188b0eeee46242d2a409db776ec5ad64bae0df4fd7c7ca4694429e49
@@ -1,6 +1,9 @@
1
1
  ---
2
2
  ---
3
3
  # Release History
4
+ * 2.0.1 March 31, 2021
5
+ * Select imagemagick deliberately when appropriate, rather than simply rescuing all vips errors
6
+ and trying again. This will stop JPT from suppressing useful vips errors.
4
7
  * **2.0** March 25, 2021 - [Migration guide](/jekyll_picture_tag/users/notes/migration_2)
5
8
  * Switch from ImageMagick to libvips.
6
9
  * 🚀🔥🔥**MUCH MORE FASTER**🔥🔥🚀
data/docs/index.md CHANGED
@@ -5,6 +5,11 @@
5
5
 
6
6
  _Responsive Images, Done Correctly._
7
7
 
8
+ **Warning:** Deploying JPT can be tricky, especially with the new version using libvips. We depend
9
+ on system libraries to generate images, whose presence varies greatly between different
10
+ environments. Before investing a great deal of time, ensure that your deployment process can handle
11
+ all image formats (both input and output) which you will use.
12
+
8
13
  **Note:** These docs are for versions >= 2.0. Documentation for the last stable 1.x version may be
9
14
  found by browsing the repository,
10
15
  [here](https://github.com/rbuchberger/jekyll_picture_tag/tree/v1.14.0/docs). This [migration
@@ -0,0 +1,49 @@
1
+ ---
2
+ sort: 4
3
+ ---
4
+
5
+ # Deployment
6
+
7
+ Deploying a site with JPT is surprisingly tricky. This is because we depend on system libraries
8
+ (libvips and its dependencies) to generate images, but build environments have huge variation in
9
+ what is actually present. Just because a site build works on your local machine, doesn't mean it
10
+ will work when you try to deploy using a build service.
11
+
12
+ Generally, anything which involves building locally and uploading the generated site somewhere, will
13
+ work. Anything which pulls down a git repository and builds it in some container somewhere needs
14
+ extra verification. Often some image formats will be supported, while others will not without
15
+ installing additional packages.
16
+
17
+ ## Help Wanted
18
+
19
+ We could really use help improving this page's guidance. I've created
20
+ [this](https://github.com/rbuchberger/jekyll_picture_tag/issues/240) issue for feedback; I want to
21
+ hear how you're deploying with JPT. I want to hear what worked well for you, and what did not. If
22
+ you're extra motivated and cool, you could make a pull request adding that information to this page.
23
+
24
+ ## Netlify
25
+
26
+ As of March 26, 2021, with version 2.0.0, Netlify is mostly broken. It only supports jpg. I want to
27
+ support netlify as much as reasonably possible, so if a solution isn't found I'll re-add imagemagick
28
+ as an alternate backend and offer it as a configurable setting. Until then, stick with version 1.14.
29
+
30
+ ## AWS S3
31
+
32
+ This method has a somewhat difficult setup, but once configured it works _very_ well. Since you
33
+ build the site locally, if your development build works then your production build will work.
34
+
35
+ [This](https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website/) is
36
+ the guide you want; **specifically the second option** (Using a website endpoint as the origin, with
37
+ anonymous (public) access allowed). This allows you to have https and excellent performance.
38
+
39
+ For deployment, you'll want to put together either some rake tasks or shell commands to do the
40
+ following:
41
+
42
+ * build: `JEKYLL_ENV=production bundle exec jekyll build`
43
+ * push: `aws s3 sync _site s3://(your bucket here)`
44
+ * invalidate: `aws cloudfront create-invalidation --distribution-id (your distribution id here) --paths '/*'`
45
+ * Cloudfront caches assets for 24 hours. This command invalidates that cache, so your changes go
46
+ live immediately.
47
+ * deploy: `build && push && invalidate`
48
+
49
+ (All of these depend on having the aws cli installed, with proper credentials configured.)
@@ -2,6 +2,15 @@ module PictureTag
2
2
  # Basically a wrapper class for vips. Handles image operations.
3
3
  # Vips returns new images for Crop, resize, and autorotate operations.
4
4
  # Quality, metadata stripping, and format are applied on write.
5
+ #
6
+ # This deserves to be two classes and a factory, one for normal vips save and
7
+ # one for magicksave. This is illustrated by the fact that stubbing backend
8
+ # determination logic for its unit tests would basically require
9
+ # re-implementing it completely.
10
+ #
11
+ # I'm planning to implement standalone imagemagick as an alternative to vips,
12
+ # so when I add that I'll also do that refactoring. For now it works fine and
13
+ # it's not too bloated.
5
14
  class ImageFile
6
15
  def initialize(source, base)
7
16
  @source = source
@@ -35,13 +44,21 @@ module PictureTag
35
44
  image.autorot
36
45
  end
37
46
 
47
+ def handler
48
+ PictureTag.backend.handler_for(@base.format)
49
+ end
50
+
51
+ def quality_key
52
+ handler == :vips ? :Q : :quality
53
+ end
54
+
38
55
  def write_opts
39
56
  opts = PictureTag.preset['image_options'][@base.format] || {}
40
57
 
41
58
  opts[:strip] = PictureTag.preset['strip_metadata']
42
59
 
43
60
  # gifs don't accept a quality setting.
44
- opts[:Q] = base.quality unless base.format == 'gif'
61
+ opts[quality_key] = base.quality unless base.format == 'gif'
45
62
 
46
63
  opts.transform_keys(&:to_sym)
47
64
  end
@@ -51,15 +68,12 @@ module PictureTag
51
68
  end
52
69
 
53
70
  def write(image)
54
- begin
71
+ case handler
72
+ when :vips
55
73
  image.write_to_file(base.absolute_filename, **write_opts)
56
- rescue Vips::Error
57
74
  # If vips can't handle it, fall back to imagemagick.
58
- opts = write_opts.transform_keys do |key|
59
- key == :Q ? :quality : key
60
- end
61
-
62
- image.magicksave(base.absolute_filename, **opts)
75
+ when :magick
76
+ image.magicksave(base.absolute_filename, **write_opts)
63
77
  end
64
78
 
65
79
  # Fix permissions. TODO - still necessary?
@@ -37,5 +37,12 @@ module PictureTag
37
37
  )
38
38
  end
39
39
  end
40
+
41
+ # Main job is to determine which backend should handle which image formats.
42
+ class Backend < Instruction
43
+ def source
44
+ PictureTag::Parsers::ImageBackend.new
45
+ end
46
+ end
40
47
  end
41
48
  end
@@ -3,3 +3,4 @@ require_relative 'parsers/configuration'
3
3
  require_relative 'parsers/html_attributes'
4
4
  require_relative 'parsers/preset'
5
5
  require_relative 'parsers/tag_parser'
6
+ require_relative 'parsers/image_backend'
@@ -0,0 +1,33 @@
1
+ module PictureTag
2
+ module Parsers
3
+ # Returns information regarding image handlers
4
+ class ImageBackend
5
+ def handler_for(format)
6
+ if vips_formats.include? format
7
+ :vips
8
+ elsif magick_formats.include? format
9
+ :magick
10
+ else
11
+ raise "No support for generating #{format} files in this environment."
12
+ end
13
+ end
14
+
15
+ # Returns array of formats that vips can save to
16
+ def vips_formats
17
+ @vips_formats ||= `vips -l filesave`
18
+ .scan(/\.[a-z]{1,5}/)
19
+ .uniq
20
+ .map { |format| format.strip.delete_prefix('.') }
21
+ end
22
+
23
+ # Returns an array of formats that imagemagick can handle.
24
+ def magick_formats
25
+ @magick_formats ||= `convert -version`
26
+ .split("\n")
27
+ .last
28
+ .delete_prefix('Delegates (built-in):')
29
+ .split
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,3 @@
1
1
  module PictureTag
2
- VERSION = '2.0.0'.freeze
2
+ VERSION = '2.0.1'.freeze
3
3
  end
data/readme.md CHANGED
@@ -47,6 +47,35 @@ https://rbuchberger.github.io/jekyll_picture_tag/devs/releases
47
47
 
48
48
  Recent releases:
49
49
 
50
+ * 2.0.1 March 31, 2021
51
+ * Select imagemagick deliberately when appropriate, rather than simply rescuing all vips errors
52
+ and trying again. This will stop JPT from suppressing useful vips errors.
53
+ * **2.0** March 25, 2021 - [Migration guide](https://rbuchberger.github.io/jekyll_picture_tag/users/notes/migration_2)
54
+ * Switch from ImageMagick to libvips.
55
+ * 🚀🔥🔥**MUCH MORE FASTER**🔥🔥🚀
56
+ * Will still attempt to use imagemagick if libvips cannot handle a
57
+ particular image format.
58
+ * Eliminate the ImageMagick v7 on Ubuntu pain we've been dealing with for so
59
+ long.
60
+ * Require Ruby >= 2.6, support Ruby 3.0
61
+ * Require Jekyll >= 4.0
62
+ * Cropping is changing.
63
+ * We now use the libvips
64
+ [smartcrop function](https://www.rubydoc.info/gems/ruby-vips/Vips/Image#smartcrop-instance_method),
65
+ which does some magic to keep the most useful part of the image.
66
+ * Geometry is renamed to 'crop', and reduced to simple aspect ratios only. (`width:height`)
67
+ * Gravity is gone, replaced by 'keep' which is translated to a libvips
68
+ [interestingness](https://www.rubydoc.info/gems/ruby-vips/Vips/Interesting) setting.
69
+ * Add stock presets and media queries, under the `jpt-` prefix.
70
+ * Add `format_quality` default settings for webp, avif, and jp2.
71
+ * Add image-format-specific write options.
72
+ * Overhaul user input handling; we can now validate inputs and give error
73
+ messages which are less useless. Stronger validation and nicer errors will be added in future
74
+ releases.
75
+ * Drop support for `markup_presets` and `media_presets`. They are now
76
+ officially and only `presets` and `media_queries`.
77
+ * Improve docs with an introductory tutorial and 'how-to' flow.
78
+
50
79
  * 1.14.0 January 10, 2021
51
80
  * Gracefully handle empty tag arguments.
52
81
  * Re-add metadata stripping. I removed it inadvertently when refactoring; now
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll_picture_tag
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Wierzbowski
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-03-25 00:00:00.000000000 Z
13
+ date: 2021-03-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: addressable
@@ -320,6 +320,7 @@ files:
320
320
  - docs/users/configuration/kramdown_fix.md
321
321
  - docs/users/configuration/suppress_warnings.md
322
322
  - docs/users/configuration/urls.md
323
+ - docs/users/deployment.md
323
324
  - docs/users/getting_started.md
324
325
  - docs/users/index.md
325
326
  - docs/users/installation.md
@@ -395,6 +396,7 @@ files:
395
396
  - lib/jekyll_picture_tag/parsers/arg_splitter.rb
396
397
  - lib/jekyll_picture_tag/parsers/configuration.rb
397
398
  - lib/jekyll_picture_tag/parsers/html_attributes.rb
399
+ - lib/jekyll_picture_tag/parsers/image_backend.rb
398
400
  - lib/jekyll_picture_tag/parsers/preset.rb
399
401
  - lib/jekyll_picture_tag/parsers/tag_parser.rb
400
402
  - lib/jekyll_picture_tag/router.rb