|
1 | 1 | # 1.2.0 |
2 | 2 |
|
3 | | -* **Breaking install change:** image processing switched from RMagick |
4 | | - to libvips (via [ruby-vips](https://github.com/libvips/ruby-vips)). |
5 | | - Install `libvips` (e.g. `apt install libvips42 libvips-dev` or |
6 | | - `brew install vips`) instead of ImageMagick / libmagickwand-dev. See |
| 3 | +## User-visible changes |
| 4 | + |
| 5 | +### Breaking |
| 6 | + |
| 7 | +* **Install:** image processing switched from RMagick to libvips (via |
| 8 | + [ruby-vips](https://github.com/libvips/ruby-vips)). Install `libvips` |
| 9 | + (e.g. `apt install libvips42 libvips-dev` or `brew install vips`) |
| 10 | + instead of ImageMagick / libmagickwand-dev. See |
7 | 11 | `docs/libvips-bench.md` for the perf comparison that motivated the |
8 | 12 | swap. |
9 | | -* **Behaviour change:** EXIF Orientation is now honoured. Sources that |
10 | | - previously rendered sideways (Orientation 5–8) will now render |
11 | | - upright. Output JPEGs no longer carry the orientation tag. |
12 | | -* **Behaviour change:** every rendered JPEG (full-size + thumbs) now |
| 13 | +* **Ruby:** `required_ruby_version` raised from `>= 2.6.0` to `>= 3.2`. |
| 14 | + CI now runs on 3.2 / 3.3 / 3.4 / 4.0. |
| 15 | +* **Jekyll:** gem constraint tightened from `~> 4.0` to `~> 4.4`. The |
| 16 | + plugin now relies on Jekyll 4.3+ collection-read semantics and on |
| 17 | + the 4.4 `Document#read` shape. |
| 18 | + |
| 19 | +### Behaviour |
| 20 | + |
| 21 | +* **Shrink-only rendering:** the default geometry (`1920x1080`) and |
| 22 | + any user-supplied `max_size` without an explicit geometry flag now |
| 23 | + append `>`, so sources smaller than the bounding box are passed |
| 24 | + through at their original dimensions instead of being upscaled. The |
| 25 | + geometry is part of both the Geometry- and Render-cache keys, so |
| 26 | + upgrading invalidates stale upscaled outputs automatically — no |
| 27 | + `jekyll clean` required. |
| 28 | +* **EXIF Orientation** is now honoured. Sources that previously |
| 29 | + rendered sideways (Orientation 5–8) will now render upright. Output |
| 30 | + JPEGs no longer carry the orientation tag. |
| 31 | +* **Encoder defaults:** every rendered JPEG (full-size + thumbs) now |
13 | 32 | ships as a progressive JPEG with optimised Huffman tables, explicit |
14 | 33 | 4:2:0 chroma subsampling, and all metadata stripped (`keep: :none`). |
15 | | - Thumbnails are encoded at Q80 and full-size renders honour the |
| 34 | + Thumbnails are encoded at Q80; full-size renders honour the |
16 | 35 | collection-metadata `quality` value (default 85). Previously |
17 | 36 | thumbnails used RMagick's default encoder (baseline JPEG, ~Q75, EXIF |
18 | 37 | retained). The explicit `subsample_mode: :on` guards against a |
19 | | - silent ~25% file-size jump if a user bumps `quality` to ≥ 90 (where |
| 38 | + silent ~25% file-size jump if `quality` is bumped to ≥ 90 (where |
20 | 39 | libvips' `:auto` mode would otherwise switch to 4:4:4). |
| 40 | +* **`max_size` narrowing:** values with ImageMagick trailing flags |
| 41 | + other than `>` (i.e. `!`, `^`, `@`, `#`) are silently treated as |
| 42 | + the plain `WxH` form. cheesy-gallery's own config never used these |
| 43 | + flags; if you depended on them, file an issue. |
| 44 | +* **Generator metadata:** the generator now declares `safe true` (so |
| 45 | + it whitelists under `jekyll build --safe`) and `priority :low` (so |
| 46 | + it runs after default-priority generators). |
| 47 | + |
| 48 | +### Bug fixes |
| 49 | + |
| 50 | +* **Render-cache staleness:** the Render-cache key now includes |
| 51 | + source `mtime`, so in-place edits or re-pointed `git-annex` |
| 52 | + symlinks no longer silently keep stale renders on subsequent |
| 53 | + builds. |
| 54 | +* **Jekyll 4.3+ compat:** `Collection#read` snapshots |
| 55 | + `collection.files` into `site.static_files`, so the generator now |
| 56 | + re-syncs `site.static_files` after mutating `collection.files`. |
| 57 | + Without this, generator-added files (thumbs / index renders) |
| 58 | + silently never reached the writer. |
| 59 | +* **Jekyll 4.4.1 compat:** the synthetic `GalleryIndex` document now |
| 60 | + overrides `Document#read` directly (rather than the private |
| 61 | + `read_content`), avoiding an `ENOENT` crash from `read_post_data` |
| 62 | + on the non-existent backing file. |
21 | 63 | * **Robustness:** image header reads now use `fail_on: :error`, so a |
22 | 64 | truncated or corrupt source JPEG aborts the build with a clear |
23 | 65 | error rather than silently rendering a half-grey output. |
24 | | -* **Behaviour narrowing:** `max_size` values with ImageMagick trailing |
25 | | - flags other than `>` (i.e. `!`, `^`, `@`, `#`) are silently treated |
26 | | - as the plain `WxH` form. cheesy-gallery's own config never used |
27 | | - these flags; if you depended on them, file an issue. |
| 66 | + |
| 67 | +## Internal changes |
| 68 | + |
| 69 | +* CI matrix expanded to Ruby 3.2 / 3.3 / 3.4 / 4.0; `actions/checkout` |
| 70 | + bumped to v4; superseded workflow runs auto-cancel per branch; |
| 71 | + tests run on push only. |
| 72 | +* `BaseImageFile` render path refactored: rendering now happens inside |
| 73 | + a `copy_file` override; the `write` override is now just the |
| 74 | + cross-process Render-cache short-circuit. The bespoke `mkdir_p` + |
| 75 | + `rm` dance was dropped in favour of `super`. |
| 76 | +* Dev dependencies: `codecov` dropped (CI never uploaded coverage); |
| 77 | + `bundler` dev dep loosened to `>= 2.1`. Fixture lockfile refreshed |
| 78 | + (rake 13.4.2, tzinfo-data 1.2026.2, plus jekyll, jekyll-feed, |
| 79 | + jekyll-seo-tag, minima, kramdown, rouge, listen, sass-embedded, et |
| 80 | + al. to current within constraints). |
| 81 | +* New spec suites: `spec/cheesy/generator_spec.rb` (end-to-end gallery |
| 82 | + generation, parent/child wiring, thumbnail selection, dimension |
| 83 | + extraction, `max_size` / `quality` overrides) and |
| 84 | + `spec/cheesy/cache_spec.rb` (eight cache-layer scenarios derived |
| 85 | + from `docs/cache-analysis.md`). |
| 86 | +* New internal docs under `docs/`: `repo-research-report.md`, |
| 87 | + `jekyll-api-review.md`, `cache-analysis.md`, `libvips-bench.md`, |
| 88 | + `index.md`, `todos.md`. Bench script at `script/bench.rb`. |
28 | 89 |
|
29 | 90 | # 1.1.1 |
30 | 91 |
|
|
0 commit comments