Skip to content

Conversation

@dependabot
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Jan 7, 2026

Bumps html-pipeline from 3.0.3 to 3.2.4.

Release notes

Sourced from html-pipeline's releases.

v3.2.4

What's Changed

Full Changelog: gjtorikian/html-pipeline@v3.2.3...v3.2.4

v3.2.3

What's Changed

Full Changelog: gjtorikian/html-pipeline@v3.2.2...v3.2.3

v3.2.2

What's Changed

New Contributors

Full Changelog: gjtorikian/html-pipeline@v3.2.1...v3.2.2

v3.2.1

What's Changed

New Contributors

Full Changelog: gjtorikian/html-pipeline@v3.2.0...v3.2.1

v3.2.0

What's Changed

Full Changelog: gjtorikian/html-pipeline@v3.1.1...v3.2.0

... (truncated)

Changelog

Sourced from html-pipeline's changelog.

[v3.2.4] - 06-01-2026

What's Changed

Full Changelog: gjtorikian/html-pipeline@v3.2.3...v3.2.4

[v3.2.3] - 24-04-2025

What's Changed

Full Changelog: gjtorikian/html-pipeline@v3.2.2...v3.2.3

[v3.2.2] - 09-08-2024

What's Changed

New Contributors

Full Changelog: gjtorikian/html-pipeline@v3.2.1...v3.2.2

[v3.2.1] - 16-07-2024

What's Changed

Full Changelog: gjtorikian/html-pipeline@v3.2.0...v3.2.1

[v3.2.0] - 30-04-2024

What's Changed

Full Changelog: gjtorikian/html-pipeline@v3.1.1...v3.2.0

[v3.1.1] - 09-04-2024

What's Changed

Full Changelog: gjtorikian/html-pipeline@v3.1.0...v3.1.1

[v3.1.0] - 28-02-2024

What's Changed

New Contributors

... (truncated)

Commits
  • c99d76d Merge pull request #429 from gjtorikian/release/v3.2.4
  • f00ac92 [skip test] update changelog
  • 4bd9392 Merge pull request #428 from gjtorikian/allow-for-sanitization-nil
  • 7a75c3e 💎 bump to 3.2.4
  • 973cbef add minitest/mock for stubs
  • f75cd21 Merge branch 'main' into allow-for-sanitization-nil
  • 7a6e748 Merge pull request #427 from gjtorikian/support-ruby-4
  • 251dde6 loosen commonmarker
  • a1b66f0 no need for this
  • 1b5c5fb [auto-lint]: Lint files
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [html-pipeline](https://github.com/gjtorikian/html-pipeline) from 3.0.3 to 3.2.4.
- [Release notes](https://github.com/gjtorikian/html-pipeline/releases)
- [Changelog](https://github.com/gjtorikian/html-pipeline/blob/main/CHANGELOG.md)
- [Commits](gjtorikian/html-pipeline@v3.0.3...v3.2.4)

---
updated-dependencies:
- dependency-name: html-pipeline
  dependency-version: 3.2.4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot added dependencies ruby Pull requests that update Ruby code labels Jan 7, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

4 similar comments
@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare html-pipeline 3.0.3 3.2.4

Compared versions: ["3.0.3", "3.2.4"]
  DIFFERENT date:
    3.0.3: 2024-02-02 00:00:00 UTC
    3.2.4: 1980-01-02 00:00:00 UTC
  DIFFERENT required_ruby_version:
    3.0.3: ~> 3.1
    3.2.4: >= 3.2
  DIFFERENT rubygems_version:
    3.0.3: 3.5.5
    3.2.4: 4.0.3
  DIFFERENT version:
    3.0.3: 3.0.3
    3.2.4: 3.2.4
  DIFFERENT files:
    3.0.3->3.2.4:
      * Changed:
            .github/workflows/automerge.yml +6/-3
            .github/workflows/ci.yml +5/-13
            .github/workflows/lint.yml +6/-13
            .github/workflows/publish.yml +15/-4
            .gitignore +3/-1
            .rubocop.yml +3/-0
            .vscode/settings.json +3/-0
            CHANGELOG.md +129/-52
            Gemfile +3/-5
            README.md +26/-41
            UPGRADING.md +0/-2
            html-pipeline.gemspec +3/-2
            lib/html_pipeline.rb +29/-21
            lib/html_pipeline/convert_filter.rb +1/-1
            lib/html_pipeline/convert_filter/markdown_filter.rb +4/-4
            lib/html_pipeline/filter.rb +1/-1
            lib/html_pipeline/node_filter.rb +2/-0
            lib/html_pipeline/node_filter/emoji_filter.rb +3/-3
            lib/html_pipeline/node_filter/mention_filter.rb +2/-1
            lib/html_pipeline/node_filter/syntax_highlight_filter.rb +1/-1
            lib/html_pipeline/node_filter/team_mention_filter.rb +2/-1
            lib/html_pipeline/text_filter.rb +8/-8
            lib/html_pipeline/text_filter/image_filter.rb +2/-2
            lib/html_pipeline/text_filter/plain_text_input_filter.rb +2/-2
            lib/html_pipeline/version.rb +1/-1
  DIFFERENT runtime dependencies:
    3.0.3->3.2.4:
      * Updated:
            selma from: ["~> 0.1"] to: ["~> 0.4"]
  DIFFERENT Gemfile dependencies
    3.0.3->3.2.4:
      * Added:
            minitest-mock ["~> 5.27"] (development)
      * Deleted
            github_changelog_generator ["~> 1.16"] (runtime)
      * Updated
            commonmarker from: ["~> 1.0.0.pre7"] to: ["~> 2.6"]
            minitest from: [">= 0"] to: ["~> 6.0"]

3 similar comments
@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare html-pipeline 3.0.3 3.2.4

Compared versions: ["3.0.3", "3.2.4"]
  DIFFERENT date:
    3.0.3: 2024-02-02 00:00:00 UTC
    3.2.4: 1980-01-02 00:00:00 UTC
  DIFFERENT required_ruby_version:
    3.0.3: ~> 3.1
    3.2.4: >= 3.2
  DIFFERENT rubygems_version:
    3.0.3: 3.5.5
    3.2.4: 4.0.3
  DIFFERENT version:
    3.0.3: 3.0.3
    3.2.4: 3.2.4
  DIFFERENT files:
    3.0.3->3.2.4:
      * Changed:
            .github/workflows/automerge.yml +6/-3
            .github/workflows/ci.yml +5/-13
            .github/workflows/lint.yml +6/-13
            .github/workflows/publish.yml +15/-4
            .gitignore +3/-1
            .rubocop.yml +3/-0
            .vscode/settings.json +3/-0
            CHANGELOG.md +129/-52
            Gemfile +3/-5
            README.md +26/-41
            UPGRADING.md +0/-2
            html-pipeline.gemspec +3/-2
            lib/html_pipeline.rb +29/-21
            lib/html_pipeline/convert_filter.rb +1/-1
            lib/html_pipeline/convert_filter/markdown_filter.rb +4/-4
            lib/html_pipeline/filter.rb +1/-1
            lib/html_pipeline/node_filter.rb +2/-0
            lib/html_pipeline/node_filter/emoji_filter.rb +3/-3
            lib/html_pipeline/node_filter/mention_filter.rb +2/-1
            lib/html_pipeline/node_filter/syntax_highlight_filter.rb +1/-1
            lib/html_pipeline/node_filter/team_mention_filter.rb +2/-1
            lib/html_pipeline/text_filter.rb +8/-8
            lib/html_pipeline/text_filter/image_filter.rb +2/-2
            lib/html_pipeline/text_filter/plain_text_input_filter.rb +2/-2
            lib/html_pipeline/version.rb +1/-1
  DIFFERENT runtime dependencies:
    3.0.3->3.2.4:
      * Updated:
            selma from: ["~> 0.1"] to: ["~> 0.4"]
  DIFFERENT Gemfile dependencies
    3.0.3->3.2.4:
      * Added:
            minitest-mock ["~> 5.27"] (development)
      * Deleted
            github_changelog_generator ["~> 1.16"] (runtime)
      * Updated
            commonmarker from: ["~> 1.0.0.pre7"] to: ["~> 2.6"]
            minitest from: [">= 0"] to: ["~> 6.0"]

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare html-pipeline 3.0.3 3.2.4

Compared versions: ["3.0.3", "3.2.4"]
  DIFFERENT date:
    3.0.3: 2024-02-02 00:00:00 UTC
    3.2.4: 1980-01-02 00:00:00 UTC
  DIFFERENT required_ruby_version:
    3.0.3: ~> 3.1
    3.2.4: >= 3.2
  DIFFERENT rubygems_version:
    3.0.3: 3.5.5
    3.2.4: 4.0.3
  DIFFERENT version:
    3.0.3: 3.0.3
    3.2.4: 3.2.4
  DIFFERENT files:
    3.0.3->3.2.4:
      * Changed:
            .github/workflows/automerge.yml +6/-3
            .github/workflows/ci.yml +5/-13
            .github/workflows/lint.yml +6/-13
            .github/workflows/publish.yml +15/-4
            .gitignore +3/-1
            .rubocop.yml +3/-0
            .vscode/settings.json +3/-0
            CHANGELOG.md +129/-52
            Gemfile +3/-5
            README.md +26/-41
            UPGRADING.md +0/-2
            html-pipeline.gemspec +3/-2
            lib/html_pipeline.rb +29/-21
            lib/html_pipeline/convert_filter.rb +1/-1
            lib/html_pipeline/convert_filter/markdown_filter.rb +4/-4
            lib/html_pipeline/filter.rb +1/-1
            lib/html_pipeline/node_filter.rb +2/-0
            lib/html_pipeline/node_filter/emoji_filter.rb +3/-3
            lib/html_pipeline/node_filter/mention_filter.rb +2/-1
            lib/html_pipeline/node_filter/syntax_highlight_filter.rb +1/-1
            lib/html_pipeline/node_filter/team_mention_filter.rb +2/-1
            lib/html_pipeline/text_filter.rb +8/-8
            lib/html_pipeline/text_filter/image_filter.rb +2/-2
            lib/html_pipeline/text_filter/plain_text_input_filter.rb +2/-2
            lib/html_pipeline/version.rb +1/-1
  DIFFERENT runtime dependencies:
    3.0.3->3.2.4:
      * Updated:
            selma from: ["~> 0.1"] to: ["~> 0.4"]
  DIFFERENT Gemfile dependencies
    3.0.3->3.2.4:
      * Added:
            minitest-mock ["~> 5.27"] (development)
      * Deleted
            github_changelog_generator ["~> 1.16"] (runtime)
      * Updated
            commonmarker from: ["~> 1.0.0.pre7"] to: ["~> 2.6"]
            minitest from: [">= 0"] to: ["~> 6.0"]

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare html-pipeline 3.0.3 3.2.4

Compared versions: ["3.0.3", "3.2.4"]
  DIFFERENT date:
    3.0.3: 2024-02-02 00:00:00 UTC
    3.2.4: 1980-01-02 00:00:00 UTC
  DIFFERENT required_ruby_version:
    3.0.3: ~> 3.1
    3.2.4: >= 3.2
  DIFFERENT rubygems_version:
    3.0.3: 3.5.5
    3.2.4: 4.0.3
  DIFFERENT version:
    3.0.3: 3.0.3
    3.2.4: 3.2.4
  DIFFERENT files:
    3.0.3->3.2.4:
      * Changed:
            .github/workflows/automerge.yml +6/-3
            .github/workflows/ci.yml +5/-13
            .github/workflows/lint.yml +6/-13
            .github/workflows/publish.yml +15/-4
            .gitignore +3/-1
            .rubocop.yml +3/-0
            .vscode/settings.json +3/-0
            CHANGELOG.md +129/-52
            Gemfile +3/-5
            README.md +26/-41
            UPGRADING.md +0/-2
            html-pipeline.gemspec +3/-2
            lib/html_pipeline.rb +29/-21
            lib/html_pipeline/convert_filter.rb +1/-1
            lib/html_pipeline/convert_filter/markdown_filter.rb +4/-4
            lib/html_pipeline/filter.rb +1/-1
            lib/html_pipeline/node_filter.rb +2/-0
            lib/html_pipeline/node_filter/emoji_filter.rb +3/-3
            lib/html_pipeline/node_filter/mention_filter.rb +2/-1
            lib/html_pipeline/node_filter/syntax_highlight_filter.rb +1/-1
            lib/html_pipeline/node_filter/team_mention_filter.rb +2/-1
            lib/html_pipeline/text_filter.rb +8/-8
            lib/html_pipeline/text_filter/image_filter.rb +2/-2
            lib/html_pipeline/text_filter/plain_text_input_filter.rb +2/-2
            lib/html_pipeline/version.rb +1/-1
  DIFFERENT runtime dependencies:
    3.0.3->3.2.4:
      * Updated:
            selma from: ["~> 0.1"] to: ["~> 0.4"]
  DIFFERENT Gemfile dependencies
    3.0.3->3.2.4:
      * Added:
            minitest-mock ["~> 5.27"] (development)
      * Deleted
            github_changelog_generator ["~> 1.16"] (runtime)
      * Updated
            commonmarker from: ["~> 1.0.0.pre7"] to: ["~> 2.6"]
            minitest from: [">= 0"] to: ["~> 6.0"]

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff html-pipeline 3.0.3 3.2.4

Compared versions: ["3.0.3", "3.2.4"]
  DIFFERENT files:
    3.0.3->3.2.4:
      * Changed:
        .github/workflows/automerge.yml
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/.github/workflows/automerge.yml	2026-01-07 03:01:47.426216060 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/.github/workflows/automerge.yml	2026-01-07 03:01:47.430216073 +0000
                @@ -3,0 +4 @@
                +  workflow_dispatch:
                @@ -11,3 +12,5 @@
                -  dependabot:
                -    uses: yettoapp/actions/.github/workflows/automerge_dependabot.yml@main
                -    secrets: inherit
                +  bot-check:
                +    uses: gjtorikian/actions/.github/workflows/automerge.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                +
        .github/workflows/ci.yml
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/.github/workflows/ci.yml	2026-01-07 03:01:47.426216060 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/.github/workflows/ci.yml	2026-01-07 03:01:47.431216076 +0000
                @@ -7 +7,2 @@
                -  contents: read
                +  contents: write
                +  pull-requests: write
                @@ -11,12 +12,3 @@
                -    runs-on: ubuntu-latest
                -
                -    steps:
                -      - uses: actions/checkout@v4
                -
                -      - name: Set up Ruby
                -        uses: yettoapp/actions/setup-languages@main
                -        with:
                -          ruby: true
                -
                -      - name: Run tests
                -        run: bundle exec rake test
                +    uses: gjtorikian/actions/.github/workflows/ruby_test_suite.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
        .github/workflows/lint.yml
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/.github/workflows/lint.yml	2026-01-07 03:01:47.426216060 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/.github/workflows/lint.yml	2026-01-07 03:01:47.431216076 +0000
                @@ -1 +1 @@
                -name: Linting
                +name: Lint
                @@ -9 +9 @@
                -  contents: read
                +  contents: write
                @@ -12,4 +12,4 @@
                -  test:
                -    runs-on: ubuntu-latest
                -    steps:
                -      - uses: actions/checkout@v4
                +  lint:
                +    uses: gjtorikian/actions/.github/workflows/ruby_lint.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                @@ -17,7 +16,0 @@
                -      - name: Set up Ruby
                -        uses: yettoapp/actions/setup-languages@main
                -        with:
                -          ruby: true
                -
                -      - name: Rubocop
                -        run: bundle exec rake rubocop
        .github/workflows/publish.yml
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/.github/workflows/publish.yml	2026-01-07 03:01:47.426216060 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/.github/workflows/publish.yml	2026-01-07 03:01:47.431216076 +0000
                @@ -1 +1 @@
                -name: Release
                +name: Tag and Release
                @@ -9,0 +10,9 @@
                +  pull_request_target:
                +    types:
                +      - closed
                +
                +permissions:
                +  pull-requests: write
                +  contents: write
                +  id-token: write
                +  actions: write
                @@ -13 +22 @@
                -    uses: yettoapp/actions/.github/workflows/ruby_gem_release.yml@main
                +    uses: gjtorikian/actions/.github/workflows/ruby_gem_release.yml@main
                @@ -15,2 +24 @@
                -      rubygems_api_key: ${{ secrets.RUBYGEMS_API_BOT_KEY }}
                -      gh_token: ${{ secrets.PUBLIC_PUSH_TO_PROTECTED_BRANCH }}
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                @@ -19,0 +28,3 @@
                +      prepare: ${{ github.event_name == 'push' }}
                +      release: ${{ github.event_name == 'workflow_dispatch' || ((github.event.pull_request.merged == true) && (contains(github.event.pull_request.labels.*.name, 'release'))) }}
                +      oidc_role_to_assume: rg_oidc_akr_h9dt72ax2bswgewowdv7
        .gitignore
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/.gitignore	2026-01-07 03:01:47.426216060 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/.gitignore	2026-01-07 03:01:47.431216076 +0000
                @@ -20 +20,3 @@
                -vendor/gems
                \ No newline at end of file
                +
                +vendor/cache/
                +vendor/bundle/
        .rubocop.yml
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/.rubocop.yml	2026-01-07 03:01:47.426216060 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/.rubocop.yml	2026-01-07 03:01:47.431216076 +0000
                @@ -17,0 +18,3 @@
                +
                +ThreadSafety/ClassAndModuleAttributes:
                +  Enabled: false
        .vscode/settings.json
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/.vscode/settings.json	2026-01-07 03:01:47.427216063 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/.vscode/settings.json	2026-01-07 03:01:47.431216076 +0000
                @@ -6,0 +7,3 @@
                +    },
                +    "[github-actions-workflow]": {
                +        "editor.defaultFormatter": "redhat.vscode-yaml"
        CHANGELOG.md
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/CHANGELOG.md	2026-01-07 03:01:47.427216063 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/CHANGELOG.md	2026-01-07 03:01:47.432216080 +0000
                @@ -0,0 +1,67 @@
                +# [v3.2.4] - 06-01-2026
                +## What's Changed
                +* [skip test] Release v3.2.3 by @github-actions[bot] in https://github.com/gjtorikian/html-pipeline/pull/419
                +* Bump actions/checkout from 4 to 5 in the github-actions group by @dependabot[bot] in https://github.com/gjtorikian/html-pipeline/pull/424
                +* Bump actions/checkout from 5 to 6 in the github-actions group by @dependabot[bot] in https://github.com/gjtorikian/html-pipeline/pull/426
                +* Support Ruby 4.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/427
                +* Allow for completely nil sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/428
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.3...v3.2.4
                +# [v3.2.3] - 24-04-2025
                +## What's Changed
                +* Allow for just text pipelines by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/418
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.2...v3.2.3
                +# [v3.2.2] - 09-08-2024
                +## What's Changed
                +* Add support for @ prefix on MentionFilter base_url by @jeremysmithco in https://github.com/gjtorikian/html-pipeline/pull/411
                +* Bugfix: sanitization-only filters should still work by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/414
                +
                +## New Contributors
                +* @jeremysmithco made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/411
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.1...v3.2.2
                +# [v3.2.1] - 16-07-2024
                +## What's Changed
                +* Update commonmarker requirement from ~> 1.0.0.pre7 to ~> 1.1.2 in the bundler-dependencies group by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/404
                +* Remove superfluous sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/408
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.0...v3.2.1
                +## [v3.2.0] - 30-04-2024
                +## What's Changed
                +* Pass context along to every part of the pipeline by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/403
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.1...v3.2.0
                +## [v3.1.1] - 09-04-2024
                +## What's Changed
                +* Correct missing method implementation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/401
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.0...v3.1.1
                +## [v3.1.0] - 28-02-2024
                +## What's Changed
                +* UPGRADING:  not removed by @dentarg in https://github.com/gjtorikian/html-pipeline/pull/397
                +* [BREAKING]  now requires instantiation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/398
                +
                +## New Contributors
                +* @dentarg made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/397
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.3...v3.1.0
                +## [v3.0.3] - 02-02-2024
                +
                +## What's Changed
                +
                +- Fix typo in README by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/394
                +- Prevent exception by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/395
                +- Cut 3.0.3 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/396
                +
                +## New Contributors
                +
                +- @ppworks made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/394
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.2...v3.0.3
                +
                @@ -1,0 +69 @@
                +
                @@ -3,2 +71,3 @@
                -* README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
                -* Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
                +
                +- README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
                +- Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
                @@ -7 +76,2 @@
                -* @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
                +
                +- @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
                @@ -9,0 +80 @@
                +
                @@ -10,0 +82 @@
                +
                @@ -12 +84,2 @@
                -* Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
                +
                +- Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
                @@ -15 +88,2 @@
                -* @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
                +
                +- @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
                @@ -17,0 +92 @@
                +
                @@ -18,0 +94 @@
                +
                @@ -20,20 +96,21 @@
                -* Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
                -* add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
                -* Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
                -* Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
                -* Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
                -* Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
                -* You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
                -* Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
                -* Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
                -* Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
                -* V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
                -* Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
                -* req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
                -* Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
                -* Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
                -* Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
                -* Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
                -* Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
                -* Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
                -* :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
                +
                +- Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
                +- add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
                +- Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
                +- Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
                +- Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
                +- Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
                +- You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
                +- Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
                +- Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
                +- Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
                +- V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
                +- Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
                +- req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
                +- Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
                +- Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
                +- Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
                +- Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
                +- Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
                +- Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
                +- :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
                @@ -42,3 +119,4 @@
                -* @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
                -* @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
                -* @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
                +
                +- @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
                +- @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
                +- @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
                @@ -46,0 +125 @@
                +
                @@ -47,0 +127 @@
                +
                @@ -48,0 +129 @@
                +
                @@ -79 +160 @@
                -- req convert\_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
                +- req convert_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
                @@ -140 +221 @@
                -- Replace EscapeUtils.escape\_html with CGI.escape\_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
                +- Replace EscapeUtils.escape_html with CGI.escape_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
                @@ -312 +393 @@
                -- New feature request for hashtags \# filter  [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
                +- New feature request for hashtags \# filter [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
                @@ -415 +496 @@
                --   add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
                +- add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
                @@ -424 +505 @@
                -- Missing context keys for HTML::Pipeline::EmojiFilter: :asset\_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
                +- Missing context keys for HTML::Pipeline::EmojiFilter: :asset_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
                @@ -507,2 +588,2 @@
                -- Fix for calling mention\_link\_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
                -- Add html-pipeline-linkify\_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- Fix for calling mention_link_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
                +- Add html-pipeline-linkify_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
                @@ -564 +645 @@
                -- MentionFilter base\_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
                +- MentionFilter base_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
                @@ -576,2 +657,2 @@
                -- Add 3rd party gem: html-pipeline-rouge\_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
                -- MentionFilter\#link\_to\_mentioned\_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
                +- Add 3rd party gem: html-pipeline-rouge_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- MentionFilter\#link_to_mentioned_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
                @@ -579 +660 @@
                -- Implement new context option: ignored\_ancestor\_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- Implement new context option: ignored_ancestor_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
                @@ -596 +677 @@
                -- @mention\_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
                +- @mention_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
                @@ -603 +684 @@
                -- Prefer http\_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
                +- Prefer http_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
                @@ -635 +716 @@
                -- Remove RUBY\_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
                +- Remove RUBY_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
                @@ -662 +743 @@
                -- AutolinkFilter link\_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
                +- AutolinkFilter link_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
                @@ -750 +831 @@
                -- Add link\_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
                +- Add link_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
                @@ -752 +833 @@
                -- use xml\_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
                +- use xml_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
                @@ -820 +901 @@
                -- Allow passing skip\_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
                +- Allow passing skip_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
                @@ -873 +954 @@
                -- add result\[:mentioned\_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
                +- add result\[:mentioned_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
                @@ -889 +970 @@
                -- Bump escape\_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
                +- Bump escape_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
                @@ -981,4 +1061,0 @@
                -
                -
                -
                -\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
        Gemfile
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/Gemfile	2026-01-07 03:01:47.427216063 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/Gemfile	2026-01-07 03:01:47.432216080 +0000
                @@ -13,2 +12,0 @@
                -gem "github_changelog_generator", "~> 1.16"
                -
                @@ -30 +28 @@
                -  gem "commonmarker", "~> 1.0.0.pre7", require: false
                +  gem "commonmarker", "~> 2.6", require: false
                @@ -34,2 +32,2 @@
                -  gem "minitest"
                -
                +  gem "minitest", "~> 6.0"
                +  gem "minitest-mock", "~> 5.27"
        README.md
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/README.md	2026-01-07 03:01:47.427216063 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/README.md	2026-01-07 03:01:47.432216080 +0000
                @@ -3,3 +2,0 @@
                -> **Note**
                -> This README refers to the behavior in the new 3.0.0.pre gem.
                -
                @@ -63 +60,7 @@
                -As an example, suppose we want to transform Commonmark source text into Markdown HTML. With the content, we also want to:
                +As an example, suppose we want to transform Commonmark source text into Markdown HTML:
                +
                +```
                +Hey there, @gjtorikian
                +```
                +
                +With the content, we also want to:
                @@ -65 +68 @@
                -- change every instance of `$NAME` to "`Johnny"
                +- change every instance of `Hey` to `Hello`
                @@ -76 +79 @@
                -    text.gsub("$NAME", "Johnny")
                +    text.gsub("Hey", "Hello")
                @@ -107 +110 @@
                -context =  { markdown: { extensions: { footnotes: false } } }
                +context = { markdown: { extensions: { footnotes: false } } }
                @@ -111,0 +115,10 @@
                +Alternatively, you can construct a pipeline, and pass in a context during the call:
                +
                +```ruby
                +pipeline = HTMLPipeline.new(
                +  convert_filter: HTMLPipeline::ConvertFilter::MarkdownFilter.new,
                +  node_filters: [HTMLPipeline::NodeFilter::MentionFilter.new]
                +)
                +pipeline.call(user_supplied_text, context: { markdown: { extensions: { footnotes: false } } })
                +```
                +
                @@ -161 +174 @@
                -Because the web can be a scary place, HTML is automatically sanitized after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
                +Because the web can be a scary place, **HTML is automatically sanitized** after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
                @@ -163 +176 @@
                -The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings.
                +The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings. Note that users must correctly configure the sanitization configuration if they expect to use it correctly in conjunction with handlers which manipulate HTML.
                @@ -174 +187 @@
                -    HTMLPipeline::MarkdownFilter,
                +    HTMLPipeline::TextFilter::ImageFilter.new,
                @@ -202 +215 @@
                -    HTMLPipeline::MarkdownFilter,
                +    HTMLPipeline::TextFilter::ImageFilter.new,
                @@ -214 +227 @@
                -`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a custom state for `result` to take advantage of.
                +`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a fresh custom state for `result` to start from each time the pipeline is called.
                @@ -333,28 +345,0 @@
                -## Third Party Extensions
                -
                -If you have an idea for a filter, propose it as
                -[an issue](https://github.com/gjtorikian/html-pipeline/issues) first. This allows us to discuss
                -whether the filter is a common enough use case to belong in this gem, or should be
                -built as an external gem.
                -
                -Here are some extensions people have built:
                -
                -- [html-pipeline-asciidoc_filter](https://github.com/asciidoctor/html-pipeline-asciidoc_filter)
                -- [jekyll-html-pipeline](https://github.com/gjtorikian/jekyll-html-pipeline)
                -- [nanoc-html-pipeline](https://github.com/burnto/nanoc-html-pipeline)
                -- [html-pipeline-bitly](https://github.com/dewski/html-pipeline-bitly)
                -- [html-pipeline-cite](https://github.com/lifted-studios/html-pipeline-cite)
                -- [tilt-html-pipeline](https://github.com/bradgessler/tilt-html-pipeline)
                -- [html-pipeline-wiki-link'](https://github.com/lifted-studios/html-pipeline-wiki-link) - WikiMedia-style wiki links
                -- [task_list](https://github.com/github/task_list) - GitHub flavor Markdown Task List
                -- [html-pipeline-nico_link](https://github.com/rutan/html-pipeline-nico_link) - An HTMLPipeline filter for [niconico](http://www.nicovideo.jp) description links
                -- [html-pipeline-gitlab](https://gitlab.com/gitlab-org/html-pipeline-gitlab) - This gem implements various filters for html-pipeline used by GitLab
                -- [html-pipeline-youtube](https://github.com/st0012/html-pipeline-youtube) - An HTMLPipeline filter for YouTube links
                -- [html-pipeline-flickr](https://github.com/st0012/html-pipeline-flickr) - An HTMLPipeline filter for Flickr links
                -- [html-pipeline-vimeo](https://github.com/dlackty/html-pipeline-vimeo) - An HTMLPipeline filter for Vimeo links
                -- [html-pipeline-hashtag](https://github.com/mr-dxdy/html-pipeline-hashtag) - An HTMLPipeline filter for hashtags
                -- [html-pipeline-linkify_github](https://github.com/jollygoodcode/html-pipeline-linkify_github) - An HTMLPipeline filter to autolink GitHub urls
                -- [html-pipeline-redcarpet_filter](https://github.com/bmikol/html-pipeline-redcarpet_filter) - Render Markdown source text into Markdown HTML using Redcarpet
                -- [html-pipeline-typogruby_filter](https://github.com/bmikol/html-pipeline-typogruby_filter) - Add Typogruby text filters to your HTMLPipeline
                -- [korgi](https://github.com/jodeci/korgi) - HTMLPipeline filters for links to Rails resources
                -
                @@ -378 +363 @@
                -config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.dup
                +config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.deep_dup
        UPGRADING.md
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/UPGRADING.md	2026-01-07 03:01:47.427216063 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/UPGRADING.md	2026-01-07 03:01:47.432216080 +0000
                @@ -17 +16,0 @@
                -
                @@ -20 +18,0 @@
                -- `TextFilter`
        html-pipeline.gemspec
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/html-pipeline.gemspec	2026-01-07 03:01:47.427216063 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/html-pipeline.gemspec	2026-01-07 03:01:47.432216080 +0000
                @@ -19 +19,2 @@
                -  gem.required_ruby_version = "~> 3.1"
                +  gem.required_ruby_version = ">= 3.2"
                +
                @@ -28 +29 @@
                -  gem.add_dependency("selma", "~> 0.1")
                +  gem.add_dependency("selma", "~> 0.4")
        lib/html_pipeline.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline.rb	2026-01-07 03:01:47.428216067 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline.rb	2026-01-07 03:01:47.432216080 +0000
                @@ -125 +125 @@
                -    if @convert_filter.nil? && (!@text_filters.empty? && !@node_filters.empty?)
                +    if @convert_filter.nil? && !@text_filters.empty? && !@node_filters.empty?
                @@ -156,3 +156,3 @@
                -        text_filters: @text_filters.map(&:name),
                -        context: context,
                -        result: result,
                +        text_filters: @text_filters.map { |f| f.class.name },
                +        context:,
                +        result:,
                @@ -163 +163 @@
                -            perform_filter(filter, doc, context: context, result: result)
                +            perform_filter(filter, doc, context: (filter.context || {}).merge(context), result:)
                @@ -174 +174 @@
                -        html = @convert_filter.call(text)
                +        html = @convert_filter.call(text, context: (@convert_filter.context || {}).merge(context))
                @@ -178 +178,11 @@
                -    unless @node_filters.empty?
                +    rewriter_options = {
                +      memory: {
                +        max_allowed_memory_usage: 5242880, # arbitrary limit of 5MB
                +      },
                +    }
                +
                +    if @node_filters.empty? && !@sanitization_config.nil?
                +      instrument("sanitization.html_pipeline", payload) do
                +        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, options: rewriter_options).rewrite(html)
                +      end
                +    elsif @node_filters.any?
                @@ -180,2 +190,2 @@
                -        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
                -        html = result[:output]
                +        @node_filters.each { |filter| filter.context = (filter.context || {}).merge(context) }
                +        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters, options: rewriter_options).rewrite(html)
                @@ -184,2 +194,2 @@
                -          context: context,
                -          result: result,
                +          context:,
                +          result:,
                @@ -188,4 +198,2 @@
                -    end
                -
                -    instrument("html_pipeline.sanitization", payload) do
                -      result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
                +    else
                +      result[:output] = html
                @@ -207,3 +215,3 @@
                -      filter: filter.name,
                -      context: context,
                -      result: result,
                +      filter: filter.class.name,
                +      context:,
                +      result:,
                @@ -213 +221 @@
                -      filter.call(doc, context: context, result: result)
                +      filter.call(doc, context:, result:)
                @@ -219 +227 @@
                -    result = call(input, context: context, result: result)
                +    result = call(input, context:, result:)
                @@ -269 +277 @@
                -      verb = invalid_filters.count == 1 ? "does" : "do"
                +      verb = invalid_filters.one? ? "does" : "do"
        lib/html_pipeline/convert_filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/convert_filter.rb	2026-01-07 03:01:47.428216067 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/convert_filter.rb	2026-01-07 03:01:47.433216083 +0000
                @@ -8 +8 @@
                -      super(context: context, result: result)
                +      super
        lib/html_pipeline/convert_filter/markdown_filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/convert_filter/markdown_filter.rb	2026-01-07 03:01:47.428216067 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/convert_filter/markdown_filter.rb	2026-01-07 03:01:47.433216083 +0000
                @@ -6 +6 @@
                -  class ConvertFilter
                +  class ConvertFilter < Filter
                @@ -15 +15 @@
                -        super(context: context, result: result)
                +        super
                @@ -19,2 +19,2 @@
                -      def call(text)
                -        options = @context.fetch(:markdown, {})
                +      def call(text, context: @context)
                +        options = context.fetch(:markdown, {})
        lib/html_pipeline/filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/filter.rb	2026-01-07 03:01:47.428216067 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/filter.rb	2026-01-07 03:01:47.433216083 +0000
                @@ -30 +30 @@
                -    attr_reader :context
                +    attr_accessor :context
        lib/html_pipeline/node_filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/node_filter.rb	2026-01-07 03:01:47.428216067 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/node_filter.rb	2026-01-07 03:01:47.433216083 +0000
                @@ -6,0 +7,2 @@
                +    attr_accessor :context
                +
        lib/html_pipeline/node_filter/emoji_filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/node_filter/emoji_filter.rb	2026-01-07 03:01:47.429216070 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/node_filter/emoji_filter.rb	2026-01-07 03:01:47.433216083 +0000
                @@ -76 +76 @@
                -            next if value.nil?
                +              next if value.nil?
                @@ -78,2 +78,2 @@
                -            value = value.respond_to?(:call) && value.call(name) || value
                -            arr << %(#{attr}="#{value}")
                +              value = value.respond_to?(:call) && value.call(name) || value
                +              arr << %(#{attr}="#{value}")
        lib/html_pipeline/node_filter/mention_filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/node_filter/mention_filter.rb	2026-01-07 03:01:47.429216070 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/node_filter/mention_filter.rb	2026-01-07 03:01:47.433216083 +0000
                @@ -118 +118,2 @@
                -        url << "/" unless %r{[/~]\z}.match?(url)
                +        excluded_prefixes = %r{[/(?:~|@]\z}
                +        url << "/" unless excluded_prefixes.match?(url)
        lib/html_pipeline/node_filter/syntax_highlight_filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/node_filter/syntax_highlight_filter.rb	2026-01-07 03:01:47.429216070 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/node_filter/syntax_highlight_filter.rb	2026-01-07 03:01:47.434216086 +0000
                @@ -18 +18 @@
                -        super(context: context, result: result)
                +        super
        lib/html_pipeline/node_filter/team_mention_filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/node_filter/team_mention_filter.rb	2026-01-07 03:01:47.430216073 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/node_filter/team_mention_filter.rb	2026-01-07 03:01:47.434216086 +0000
                @@ -97 +97,2 @@
                -        url << "/" unless %r{[/~]\z}.match?(url)
                +        excluded_prefixes = %r{[/(?:~|@]\z}
                +        url << "/" unless excluded_prefixes.match?(url)
        lib/html_pipeline/text_filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/text_filter.rb	2026-01-07 03:01:47.430216073 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/text_filter.rb	2026-01-07 03:01:47.434216086 +0000
                @@ -7,6 +7,2 @@
                -    def initialize(text, context: {}, result: {})
                -      raise TypeError, "text must be a String" unless text.is_a?(String)
                -
                -      # Ensure that this is always a string
                -      @text = text.respond_to?(:to_str) ? text.to_str : text.to_s
                -      super(context: context, result: result)
                +    def initialize(context: {}, result: {})
                +      super
                @@ -16,2 +12,6 @@
                -      def call(input, context: {}, result: {})
                -        new(input, context: context, result: result).call
                +      def call(text, context: {}, result: {})
                +        raise TypeError, "text must be a String" unless text.is_a?(String)
                +
                +        # Ensure that this is always a string
                +        text = text.respond_to?(:to_str) ? text.to_str : text.to_s
                +        new(context: context, result: result).call(text)
        lib/html_pipeline/text_filter/image_filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/text_filter/image_filter.rb	2026-01-07 03:01:47.430216073 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/text_filter/image_filter.rb	2026-01-07 03:01:47.434216086 +0000
                @@ -12,2 +12,2 @@
                -      def call
                -        @text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
                +      def call(text, context: {}, result: {})
                +        text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
        lib/html_pipeline/text_filter/plain_text_input_filter.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/text_filter/plain_text_input_filter.rb	2026-01-07 03:01:47.430216073 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/text_filter/plain_text_input_filter.rb	2026-01-07 03:01:47.434216086 +0000
                @@ -8,2 +8,2 @@
                -      def call
                -        "<div>#{CGI.escapeHTML(@text)}</div>"
                +      def call(text, context: {}, result: {})
                +        "<div>#{CGI.escapeHTML(text)}</div>"
        lib/html_pipeline/version.rb
                --- /tmp/d20260107-493-l9l2fc/html-pipeline-3.0.3/lib/html_pipeline/version.rb	2026-01-07 03:01:47.430216073 +0000
                +++ /tmp/d20260107-493-l9l2fc/html-pipeline-3.2.4/lib/html_pipeline/version.rb	2026-01-07 03:01:47.434216086 +0000
                @@ -4 +4 @@
                -  VERSION = "3.0.3"
                +  VERSION = "3.2.4"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff html-pipeline 3.0.3 3.2.4

Compared versions: ["3.0.3", "3.2.4"]
  DIFFERENT files:
    3.0.3->3.2.4:
      * Changed:
        .github/workflows/automerge.yml
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/.github/workflows/automerge.yml	2026-01-07 03:01:48.461350501 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/.github/workflows/automerge.yml	2026-01-07 03:01:48.465350531 +0000
                @@ -3,0 +4 @@
                +  workflow_dispatch:
                @@ -11,3 +12,5 @@
                -  dependabot:
                -    uses: yettoapp/actions/.github/workflows/automerge_dependabot.yml@main
                -    secrets: inherit
                +  bot-check:
                +    uses: gjtorikian/actions/.github/workflows/automerge.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                +
        .github/workflows/ci.yml
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/.github/workflows/ci.yml	2026-01-07 03:01:48.461350501 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/.github/workflows/ci.yml	2026-01-07 03:01:48.465350531 +0000
                @@ -7 +7,2 @@
                -  contents: read
                +  contents: write
                +  pull-requests: write
                @@ -11,12 +12,3 @@
                -    runs-on: ubuntu-latest
                -
                -    steps:
                -      - uses: actions/checkout@v4
                -
                -      - name: Set up Ruby
                -        uses: yettoapp/actions/setup-languages@main
                -        with:
                -          ruby: true
                -
                -      - name: Run tests
                -        run: bundle exec rake test
                +    uses: gjtorikian/actions/.github/workflows/ruby_test_suite.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
        .github/workflows/lint.yml
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/.github/workflows/lint.yml	2026-01-07 03:01:48.461350501 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/.github/workflows/lint.yml	2026-01-07 03:01:48.465350531 +0000
                @@ -1 +1 @@
                -name: Linting
                +name: Lint
                @@ -9 +9 @@
                -  contents: read
                +  contents: write
                @@ -12,4 +12,4 @@
                -  test:
                -    runs-on: ubuntu-latest
                -    steps:
                -      - uses: actions/checkout@v4
                +  lint:
                +    uses: gjtorikian/actions/.github/workflows/ruby_lint.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                @@ -17,7 +16,0 @@
                -      - name: Set up Ruby
                -        uses: yettoapp/actions/setup-languages@main
                -        with:
                -          ruby: true
                -
                -      - name: Rubocop
                -        run: bundle exec rake rubocop
        .github/workflows/publish.yml
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/.github/workflows/publish.yml	2026-01-07 03:01:48.461350501 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/.github/workflows/publish.yml	2026-01-07 03:01:48.465350531 +0000
                @@ -1 +1 @@
                -name: Release
                +name: Tag and Release
                @@ -9,0 +10,9 @@
                +  pull_request_target:
                +    types:
                +      - closed
                +
                +permissions:
                +  pull-requests: write
                +  contents: write
                +  id-token: write
                +  actions: write
                @@ -13 +22 @@
                -    uses: yettoapp/actions/.github/workflows/ruby_gem_release.yml@main
                +    uses: gjtorikian/actions/.github/workflows/ruby_gem_release.yml@main
                @@ -15,2 +24 @@
                -      rubygems_api_key: ${{ secrets.RUBYGEMS_API_BOT_KEY }}
                -      gh_token: ${{ secrets.PUBLIC_PUSH_TO_PROTECTED_BRANCH }}
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                @@ -19,0 +28,3 @@
                +      prepare: ${{ github.event_name == 'push' }}
                +      release: ${{ github.event_name == 'workflow_dispatch' || ((github.event.pull_request.merged == true) && (contains(github.event.pull_request.labels.*.name, 'release'))) }}
                +      oidc_role_to_assume: rg_oidc_akr_h9dt72ax2bswgewowdv7
        .gitignore
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/.gitignore	2026-01-07 03:01:48.461350501 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/.gitignore	2026-01-07 03:01:48.465350531 +0000
                @@ -20 +20,3 @@
                -vendor/gems
                \ No newline at end of file
                +
                +vendor/cache/
                +vendor/bundle/
        .rubocop.yml
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/.rubocop.yml	2026-01-07 03:01:48.461350501 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/.rubocop.yml	2026-01-07 03:01:48.465350531 +0000
                @@ -17,0 +18,3 @@
                +
                +ThreadSafety/ClassAndModuleAttributes:
                +  Enabled: false
        .vscode/settings.json
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/.vscode/settings.json	2026-01-07 03:01:48.461350501 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/.vscode/settings.json	2026-01-07 03:01:48.466350538 +0000
                @@ -6,0 +7,3 @@
                +    },
                +    "[github-actions-workflow]": {
                +        "editor.defaultFormatter": "redhat.vscode-yaml"
        CHANGELOG.md
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/CHANGELOG.md	2026-01-07 03:01:48.461350501 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/CHANGELOG.md	2026-01-07 03:01:48.466350538 +0000
                @@ -0,0 +1,67 @@
                +# [v3.2.4] - 06-01-2026
                +## What's Changed
                +* [skip test] Release v3.2.3 by @github-actions[bot] in https://github.com/gjtorikian/html-pipeline/pull/419
                +* Bump actions/checkout from 4 to 5 in the github-actions group by @dependabot[bot] in https://github.com/gjtorikian/html-pipeline/pull/424
                +* Bump actions/checkout from 5 to 6 in the github-actions group by @dependabot[bot] in https://github.com/gjtorikian/html-pipeline/pull/426
                +* Support Ruby 4.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/427
                +* Allow for completely nil sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/428
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.3...v3.2.4
                +# [v3.2.3] - 24-04-2025
                +## What's Changed
                +* Allow for just text pipelines by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/418
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.2...v3.2.3
                +# [v3.2.2] - 09-08-2024
                +## What's Changed
                +* Add support for @ prefix on MentionFilter base_url by @jeremysmithco in https://github.com/gjtorikian/html-pipeline/pull/411
                +* Bugfix: sanitization-only filters should still work by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/414
                +
                +## New Contributors
                +* @jeremysmithco made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/411
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.1...v3.2.2
                +# [v3.2.1] - 16-07-2024
                +## What's Changed
                +* Update commonmarker requirement from ~> 1.0.0.pre7 to ~> 1.1.2 in the bundler-dependencies group by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/404
                +* Remove superfluous sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/408
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.0...v3.2.1
                +## [v3.2.0] - 30-04-2024
                +## What's Changed
                +* Pass context along to every part of the pipeline by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/403
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.1...v3.2.0
                +## [v3.1.1] - 09-04-2024
                +## What's Changed
                +* Correct missing method implementation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/401
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.0...v3.1.1
                +## [v3.1.0] - 28-02-2024
                +## What's Changed
                +* UPGRADING:  not removed by @dentarg in https://github.com/gjtorikian/html-pipeline/pull/397
                +* [BREAKING]  now requires instantiation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/398
                +
                +## New Contributors
                +* @dentarg made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/397
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.3...v3.1.0
                +## [v3.0.3] - 02-02-2024
                +
                +## What's Changed
                +
                +- Fix typo in README by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/394
                +- Prevent exception by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/395
                +- Cut 3.0.3 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/396
                +
                +## New Contributors
                +
                +- @ppworks made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/394
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.2...v3.0.3
                +
                @@ -1,0 +69 @@
                +
                @@ -3,2 +71,3 @@
                -* README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
                -* Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
                +
                +- README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
                +- Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
                @@ -7 +76,2 @@
                -* @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
                +
                +- @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
                @@ -9,0 +80 @@
                +
                @@ -10,0 +82 @@
                +
                @@ -12 +84,2 @@
                -* Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
                +
                +- Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
                @@ -15 +88,2 @@
                -* @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
                +
                +- @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
                @@ -17,0 +92 @@
                +
                @@ -18,0 +94 @@
                +
                @@ -20,20 +96,21 @@
                -* Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
                -* add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
                -* Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
                -* Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
                -* Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
                -* Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
                -* You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
                -* Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
                -* Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
                -* Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
                -* V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
                -* Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
                -* req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
                -* Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
                -* Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
                -* Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
                -* Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
                -* Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
                -* Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
                -* :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
                +
                +- Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
                +- add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
                +- Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
                +- Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
                +- Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
                +- Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
                +- You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
                +- Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
                +- Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
                +- Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
                +- V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
                +- Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
                +- req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
                +- Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
                +- Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
                +- Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
                +- Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
                +- Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
                +- Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
                +- :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
                @@ -42,3 +119,4 @@
                -* @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
                -* @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
                -* @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
                +
                +- @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
                +- @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
                +- @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
                @@ -46,0 +125 @@
                +
                @@ -47,0 +127 @@
                +
                @@ -48,0 +129 @@
                +
                @@ -79 +160 @@
                -- req convert\_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
                +- req convert_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
                @@ -140 +221 @@
                -- Replace EscapeUtils.escape\_html with CGI.escape\_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
                +- Replace EscapeUtils.escape_html with CGI.escape_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
                @@ -312 +393 @@
                -- New feature request for hashtags \# filter  [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
                +- New feature request for hashtags \# filter [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
                @@ -415 +496 @@
                --   add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
                +- add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
                @@ -424 +505 @@
                -- Missing context keys for HTML::Pipeline::EmojiFilter: :asset\_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
                +- Missing context keys for HTML::Pipeline::EmojiFilter: :asset_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
                @@ -507,2 +588,2 @@
                -- Fix for calling mention\_link\_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
                -- Add html-pipeline-linkify\_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- Fix for calling mention_link_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
                +- Add html-pipeline-linkify_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
                @@ -564 +645 @@
                -- MentionFilter base\_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
                +- MentionFilter base_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
                @@ -576,2 +657,2 @@
                -- Add 3rd party gem: html-pipeline-rouge\_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
                -- MentionFilter\#link\_to\_mentioned\_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
                +- Add 3rd party gem: html-pipeline-rouge_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- MentionFilter\#link_to_mentioned_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
                @@ -579 +660 @@
                -- Implement new context option: ignored\_ancestor\_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- Implement new context option: ignored_ancestor_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
                @@ -596 +677 @@
                -- @mention\_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
                +- @mention_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
                @@ -603 +684 @@
                -- Prefer http\_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
                +- Prefer http_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
                @@ -635 +716 @@
                -- Remove RUBY\_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
                +- Remove RUBY_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
                @@ -662 +743 @@
                -- AutolinkFilter link\_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
                +- AutolinkFilter link_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
                @@ -750 +831 @@
                -- Add link\_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
                +- Add link_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
                @@ -752 +833 @@
                -- use xml\_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
                +- use xml_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
                @@ -820 +901 @@
                -- Allow passing skip\_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
                +- Allow passing skip_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
                @@ -873 +954 @@
                -- add result\[:mentioned\_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
                +- add result\[:mentioned_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
                @@ -889 +970 @@
                -- Bump escape\_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
                +- Bump escape_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
                @@ -981,4 +1061,0 @@
                -
                -
                -
                -\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
        Gemfile
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/Gemfile	2026-01-07 03:01:48.462350508 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/Gemfile	2026-01-07 03:01:48.466350538 +0000
                @@ -13,2 +12,0 @@
                -gem "github_changelog_generator", "~> 1.16"
                -
                @@ -30 +28 @@
                -  gem "commonmarker", "~> 1.0.0.pre7", require: false
                +  gem "commonmarker", "~> 2.6", require: false
                @@ -34,2 +32,2 @@
                -  gem "minitest"
                -
                +  gem "minitest", "~> 6.0"
                +  gem "minitest-mock", "~> 5.27"
        README.md
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/README.md	2026-01-07 03:01:48.462350508 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/README.md	2026-01-07 03:01:48.466350538 +0000
                @@ -3,3 +2,0 @@
                -> **Note**
                -> This README refers to the behavior in the new 3.0.0.pre gem.
                -
                @@ -63 +60,7 @@
                -As an example, suppose we want to transform Commonmark source text into Markdown HTML. With the content, we also want to:
                +As an example, suppose we want to transform Commonmark source text into Markdown HTML:
                +
                +```
                +Hey there, @gjtorikian
                +```
                +
                +With the content, we also want to:
                @@ -65 +68 @@
                -- change every instance of `$NAME` to "`Johnny"
                +- change every instance of `Hey` to `Hello`
                @@ -76 +79 @@
                -    text.gsub("$NAME", "Johnny")
                +    text.gsub("Hey", "Hello")
                @@ -107 +110 @@
                -context =  { markdown: { extensions: { footnotes: false } } }
                +context = { markdown: { extensions: { footnotes: false } } }
                @@ -111,0 +115,10 @@
                +Alternatively, you can construct a pipeline, and pass in a context during the call:
                +
                +```ruby
                +pipeline = HTMLPipeline.new(
                +  convert_filter: HTMLPipeline::ConvertFilter::MarkdownFilter.new,
                +  node_filters: [HTMLPipeline::NodeFilter::MentionFilter.new]
                +)
                +pipeline.call(user_supplied_text, context: { markdown: { extensions: { footnotes: false } } })
                +```
                +
                @@ -161 +174 @@
                -Because the web can be a scary place, HTML is automatically sanitized after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
                +Because the web can be a scary place, **HTML is automatically sanitized** after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
                @@ -163 +176 @@
                -The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings.
                +The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings. Note that users must correctly configure the sanitization configuration if they expect to use it correctly in conjunction with handlers which manipulate HTML.
                @@ -174 +187 @@
                -    HTMLPipeline::MarkdownFilter,
                +    HTMLPipeline::TextFilter::ImageFilter.new,
                @@ -202 +215 @@
                -    HTMLPipeline::MarkdownFilter,
                +    HTMLPipeline::TextFilter::ImageFilter.new,
                @@ -214 +227 @@
                -`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a custom state for `result` to take advantage of.
                +`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a fresh custom state for `result` to start from each time the pipeline is called.
                @@ -333,28 +345,0 @@
                -## Third Party Extensions
                -
                -If you have an idea for a filter, propose it as
                -[an issue](https://github.com/gjtorikian/html-pipeline/issues) first. This allows us to discuss
                -whether the filter is a common enough use case to belong in this gem, or should be
                -built as an external gem.
                -
                -Here are some extensions people have built:
                -
                -- [html-pipeline-asciidoc_filter](https://github.com/asciidoctor/html-pipeline-asciidoc_filter)
                -- [jekyll-html-pipeline](https://github.com/gjtorikian/jekyll-html-pipeline)
                -- [nanoc-html-pipeline](https://github.com/burnto/nanoc-html-pipeline)
                -- [html-pipeline-bitly](https://github.com/dewski/html-pipeline-bitly)
                -- [html-pipeline-cite](https://github.com/lifted-studios/html-pipeline-cite)
                -- [tilt-html-pipeline](https://github.com/bradgessler/tilt-html-pipeline)
                -- [html-pipeline-wiki-link'](https://github.com/lifted-studios/html-pipeline-wiki-link) - WikiMedia-style wiki links
                -- [task_list](https://github.com/github/task_list) - GitHub flavor Markdown Task List
                -- [html-pipeline-nico_link](https://github.com/rutan/html-pipeline-nico_link) - An HTMLPipeline filter for [niconico](http://www.nicovideo.jp) description links
                -- [html-pipeline-gitlab](https://gitlab.com/gitlab-org/html-pipeline-gitlab) - This gem implements various filters for html-pipeline used by GitLab
                -- [html-pipeline-youtube](https://github.com/st0012/html-pipeline-youtube) - An HTMLPipeline filter for YouTube links
                -- [html-pipeline-flickr](https://github.com/st0012/html-pipeline-flickr) - An HTMLPipeline filter for Flickr links
                -- [html-pipeline-vimeo](https://github.com/dlackty/html-pipeline-vimeo) - An HTMLPipeline filter for Vimeo links
                -- [html-pipeline-hashtag](https://github.com/mr-dxdy/html-pipeline-hashtag) - An HTMLPipeline filter for hashtags
                -- [html-pipeline-linkify_github](https://github.com/jollygoodcode/html-pipeline-linkify_github) - An HTMLPipeline filter to autolink GitHub urls
                -- [html-pipeline-redcarpet_filter](https://github.com/bmikol/html-pipeline-redcarpet_filter) - Render Markdown source text into Markdown HTML using Redcarpet
                -- [html-pipeline-typogruby_filter](https://github.com/bmikol/html-pipeline-typogruby_filter) - Add Typogruby text filters to your HTMLPipeline
                -- [korgi](https://github.com/jodeci/korgi) - HTMLPipeline filters for links to Rails resources
                -
                @@ -378 +363 @@
                -config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.dup
                +config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.deep_dup
        UPGRADING.md
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/UPGRADING.md	2026-01-07 03:01:48.462350508 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/UPGRADING.md	2026-01-07 03:01:48.467350546 +0000
                @@ -17 +16,0 @@
                -
                @@ -20 +18,0 @@
                -- `TextFilter`
        html-pipeline.gemspec
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/html-pipeline.gemspec	2026-01-07 03:01:48.462350508 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/html-pipeline.gemspec	2026-01-07 03:01:48.467350546 +0000
                @@ -19 +19,2 @@
                -  gem.required_ruby_version = "~> 3.1"
                +  gem.required_ruby_version = ">= 3.2"
                +
                @@ -28 +29 @@
                -  gem.add_dependency("selma", "~> 0.1")
                +  gem.add_dependency("selma", "~> 0.4")
        lib/html_pipeline.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline.rb	2026-01-07 03:01:48.462350508 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline.rb	2026-01-07 03:01:48.467350546 +0000
                @@ -125 +125 @@
                -    if @convert_filter.nil? && (!@text_filters.empty? && !@node_filters.empty?)
                +    if @convert_filter.nil? && !@text_filters.empty? && !@node_filters.empty?
                @@ -156,3 +156,3 @@
                -        text_filters: @text_filters.map(&:name),
                -        context: context,
                -        result: result,
                +        text_filters: @text_filters.map { |f| f.class.name },
                +        context:,
                +        result:,
                @@ -163 +163 @@
                -            perform_filter(filter, doc, context: context, result: result)
                +            perform_filter(filter, doc, context: (filter.context || {}).merge(context), result:)
                @@ -174 +174 @@
                -        html = @convert_filter.call(text)
                +        html = @convert_filter.call(text, context: (@convert_filter.context || {}).merge(context))
                @@ -178 +178,11 @@
                -    unless @node_filters.empty?
                +    rewriter_options = {
                +      memory: {
                +        max_allowed_memory_usage: 5242880, # arbitrary limit of 5MB
                +      },
                +    }
                +
                +    if @node_filters.empty? && !@sanitization_config.nil?
                +      instrument("sanitization.html_pipeline", payload) do
                +        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, options: rewriter_options).rewrite(html)
                +      end
                +    elsif @node_filters.any?
                @@ -180,2 +190,2 @@
                -        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
                -        html = result[:output]
                +        @node_filters.each { |filter| filter.context = (filter.context || {}).merge(context) }
                +        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters, options: rewriter_options).rewrite(html)
                @@ -184,2 +194,2 @@
                -          context: context,
                -          result: result,
                +          context:,
                +          result:,
                @@ -188,4 +198,2 @@
                -    end
                -
                -    instrument("html_pipeline.sanitization", payload) do
                -      result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
                +    else
                +      result[:output] = html
                @@ -207,3 +215,3 @@
                -      filter: filter.name,
                -      context: context,
                -      result: result,
                +      filter: filter.class.name,
                +      context:,
                +      result:,
                @@ -213 +221 @@
                -      filter.call(doc, context: context, result: result)
                +      filter.call(doc, context:, result:)
                @@ -219 +227 @@
                -    result = call(input, context: context, result: result)
                +    result = call(input, context:, result:)
                @@ -269 +277 @@
                -      verb = invalid_filters.count == 1 ? "does" : "do"
                +      verb = invalid_filters.one? ? "does" : "do"
        lib/html_pipeline/convert_filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/convert_filter.rb	2026-01-07 03:01:48.462350508 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/convert_filter.rb	2026-01-07 03:01:48.467350546 +0000
                @@ -8 +8 @@
                -      super(context: context, result: result)
                +      super
        lib/html_pipeline/convert_filter/markdown_filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/convert_filter/markdown_filter.rb	2026-01-07 03:01:48.463350516 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/convert_filter/markdown_filter.rb	2026-01-07 03:01:48.467350546 +0000
                @@ -6 +6 @@
                -  class ConvertFilter
                +  class ConvertFilter < Filter
                @@ -15 +15 @@
                -        super(context: context, result: result)
                +        super
                @@ -19,2 +19,2 @@
                -      def call(text)
                -        options = @context.fetch(:markdown, {})
                +      def call(text, context: @context)
                +        options = context.fetch(:markdown, {})
        lib/html_pipeline/filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/filter.rb	2026-01-07 03:01:48.463350516 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/filter.rb	2026-01-07 03:01:48.467350546 +0000
                @@ -30 +30 @@
                -    attr_reader :context
                +    attr_accessor :context
        lib/html_pipeline/node_filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/node_filter.rb	2026-01-07 03:01:48.463350516 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/node_filter.rb	2026-01-07 03:01:48.467350546 +0000
                @@ -6,0 +7,2 @@
                +    attr_accessor :context
                +
        lib/html_pipeline/node_filter/emoji_filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/node_filter/emoji_filter.rb	2026-01-07 03:01:48.463350516 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/node_filter/emoji_filter.rb	2026-01-07 03:01:48.468350553 +0000
                @@ -76 +76 @@
                -            next if value.nil?
                +              next if value.nil?
                @@ -78,2 +78,2 @@
                -            value = value.respond_to?(:call) && value.call(name) || value
                -            arr << %(#{attr}="#{value}")
                +              value = value.respond_to?(:call) && value.call(name) || value
                +              arr << %(#{attr}="#{value}")
        lib/html_pipeline/node_filter/mention_filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/node_filter/mention_filter.rb	2026-01-07 03:01:48.463350516 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/node_filter/mention_filter.rb	2026-01-07 03:01:48.468350553 +0000
                @@ -118 +118,2 @@
                -        url << "/" unless %r{[/~]\z}.match?(url)
                +        excluded_prefixes = %r{[/(?:~|@]\z}
                +        url << "/" unless excluded_prefixes.match?(url)
        lib/html_pipeline/node_filter/syntax_highlight_filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/node_filter/syntax_highlight_filter.rb	2026-01-07 03:01:48.463350516 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/node_filter/syntax_highlight_filter.rb	2026-01-07 03:01:48.468350553 +0000
                @@ -18 +18 @@
                -        super(context: context, result: result)
                +        super
        lib/html_pipeline/node_filter/team_mention_filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/node_filter/team_mention_filter.rb	2026-01-07 03:01:48.463350516 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/node_filter/team_mention_filter.rb	2026-01-07 03:01:48.468350553 +0000
                @@ -97 +97,2 @@
                -        url << "/" unless %r{[/~]\z}.match?(url)
                +        excluded_prefixes = %r{[/(?:~|@]\z}
                +        url << "/" unless excluded_prefixes.match?(url)
        lib/html_pipeline/text_filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/text_filter.rb	2026-01-07 03:01:48.464350523 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/text_filter.rb	2026-01-07 03:01:48.468350553 +0000
                @@ -7,6 +7,2 @@
                -    def initialize(text, context: {}, result: {})
                -      raise TypeError, "text must be a String" unless text.is_a?(String)
                -
                -      # Ensure that this is always a string
                -      @text = text.respond_to?(:to_str) ? text.to_str : text.to_s
                -      super(context: context, result: result)
                +    def initialize(context: {}, result: {})
                +      super
                @@ -16,2 +12,6 @@
                -      def call(input, context: {}, result: {})
                -        new(input, context: context, result: result).call
                +      def call(text, context: {}, result: {})
                +        raise TypeError, "text must be a String" unless text.is_a?(String)
                +
                +        # Ensure that this is always a string
                +        text = text.respond_to?(:to_str) ? text.to_str : text.to_s
                +        new(context: context, result: result).call(text)
        lib/html_pipeline/text_filter/image_filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/text_filter/image_filter.rb	2026-01-07 03:01:48.464350523 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/text_filter/image_filter.rb	2026-01-07 03:01:48.468350553 +0000
                @@ -12,2 +12,2 @@
                -      def call
                -        @text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
                +      def call(text, context: {}, result: {})
                +        text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
        lib/html_pipeline/text_filter/plain_text_input_filter.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/text_filter/plain_text_input_filter.rb	2026-01-07 03:01:48.464350523 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/text_filter/plain_text_input_filter.rb	2026-01-07 03:01:48.469350560 +0000
                @@ -8,2 +8,2 @@
                -      def call
                -        "<div>#{CGI.escapeHTML(@text)}</div>"
                +      def call(text, context: {}, result: {})
                +        "<div>#{CGI.escapeHTML(text)}</div>"
        lib/html_pipeline/version.rb
                --- /tmp/d20260107-484-2lnr19/html-pipeline-3.0.3/lib/html_pipeline/version.rb	2026-01-07 03:01:48.465350531 +0000
                +++ /tmp/d20260107-484-2lnr19/html-pipeline-3.2.4/lib/html_pipeline/version.rb	2026-01-07 03:01:48.469350560 +0000
                @@ -4 +4 @@
                -  VERSION = "3.0.3"
                +  VERSION = "3.2.4"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff html-pipeline 3.0.3 3.2.4

Compared versions: ["3.0.3", "3.2.4"]
  DIFFERENT files:
    3.0.3->3.2.4:
      * Changed:
        .github/workflows/automerge.yml
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/.github/workflows/automerge.yml	2026-01-07 03:01:49.264388726 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/.github/workflows/automerge.yml	2026-01-07 03:01:49.269388748 +0000
                @@ -3,0 +4 @@
                +  workflow_dispatch:
                @@ -11,3 +12,5 @@
                -  dependabot:
                -    uses: yettoapp/actions/.github/workflows/automerge_dependabot.yml@main
                -    secrets: inherit
                +  bot-check:
                +    uses: gjtorikian/actions/.github/workflows/automerge.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                +
        .github/workflows/ci.yml
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/.github/workflows/ci.yml	2026-01-07 03:01:49.264388726 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/.github/workflows/ci.yml	2026-01-07 03:01:49.269388748 +0000
                @@ -7 +7,2 @@
                -  contents: read
                +  contents: write
                +  pull-requests: write
                @@ -11,12 +12,3 @@
                -    runs-on: ubuntu-latest
                -
                -    steps:
                -      - uses: actions/checkout@v4
                -
                -      - name: Set up Ruby
                -        uses: yettoapp/actions/setup-languages@main
                -        with:
                -          ruby: true
                -
                -      - name: Run tests
                -        run: bundle exec rake test
                +    uses: gjtorikian/actions/.github/workflows/ruby_test_suite.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
        .github/workflows/lint.yml
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/.github/workflows/lint.yml	2026-01-07 03:01:49.264388726 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/.github/workflows/lint.yml	2026-01-07 03:01:49.269388748 +0000
                @@ -1 +1 @@
                -name: Linting
                +name: Lint
                @@ -9 +9 @@
                -  contents: read
                +  contents: write
                @@ -12,4 +12,4 @@
                -  test:
                -    runs-on: ubuntu-latest
                -    steps:
                -      - uses: actions/checkout@v4
                +  lint:
                +    uses: gjtorikian/actions/.github/workflows/ruby_lint.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                @@ -17,7 +16,0 @@
                -      - name: Set up Ruby
                -        uses: yettoapp/actions/setup-languages@main
                -        with:
                -          ruby: true
                -
                -      - name: Rubocop
                -        run: bundle exec rake rubocop
        .github/workflows/publish.yml
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/.github/workflows/publish.yml	2026-01-07 03:01:49.264388726 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/.github/workflows/publish.yml	2026-01-07 03:01:49.269388748 +0000
                @@ -1 +1 @@
                -name: Release
                +name: Tag and Release
                @@ -9,0 +10,9 @@
                +  pull_request_target:
                +    types:
                +      - closed
                +
                +permissions:
                +  pull-requests: write
                +  contents: write
                +  id-token: write
                +  actions: write
                @@ -13 +22 @@
                -    uses: yettoapp/actions/.github/workflows/ruby_gem_release.yml@main
                +    uses: gjtorikian/actions/.github/workflows/ruby_gem_release.yml@main
                @@ -15,2 +24 @@
                -      rubygems_api_key: ${{ secrets.RUBYGEMS_API_BOT_KEY }}
                -      gh_token: ${{ secrets.PUBLIC_PUSH_TO_PROTECTED_BRANCH }}
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                @@ -19,0 +28,3 @@
                +      prepare: ${{ github.event_name == 'push' }}
                +      release: ${{ github.event_name == 'workflow_dispatch' || ((github.event.pull_request.merged == true) && (contains(github.event.pull_request.labels.*.name, 'release'))) }}
                +      oidc_role_to_assume: rg_oidc_akr_h9dt72ax2bswgewowdv7
        .gitignore
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/.gitignore	2026-01-07 03:01:49.265388731 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/.gitignore	2026-01-07 03:01:49.269388748 +0000
                @@ -20 +20,3 @@
                -vendor/gems
                \ No newline at end of file
                +
                +vendor/cache/
                +vendor/bundle/
        .rubocop.yml
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/.rubocop.yml	2026-01-07 03:01:49.265388731 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/.rubocop.yml	2026-01-07 03:01:49.269388748 +0000
                @@ -17,0 +18,3 @@
                +
                +ThreadSafety/ClassAndModuleAttributes:
                +  Enabled: false
        .vscode/settings.json
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/.vscode/settings.json	2026-01-07 03:01:49.265388731 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/.vscode/settings.json	2026-01-07 03:01:49.269388748 +0000
                @@ -6,0 +7,3 @@
                +    },
                +    "[github-actions-workflow]": {
                +        "editor.defaultFormatter": "redhat.vscode-yaml"
        CHANGELOG.md
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/CHANGELOG.md	2026-01-07 03:01:49.265388731 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/CHANGELOG.md	2026-01-07 03:01:49.270388753 +0000
                @@ -0,0 +1,67 @@
                +# [v3.2.4] - 06-01-2026
                +## What's Changed
                +* [skip test] Release v3.2.3 by @github-actions[bot] in https://github.com/gjtorikian/html-pipeline/pull/419
                +* Bump actions/checkout from 4 to 5 in the github-actions group by @dependabot[bot] in https://github.com/gjtorikian/html-pipeline/pull/424
                +* Bump actions/checkout from 5 to 6 in the github-actions group by @dependabot[bot] in https://github.com/gjtorikian/html-pipeline/pull/426
                +* Support Ruby 4.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/427
                +* Allow for completely nil sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/428
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.3...v3.2.4
                +# [v3.2.3] - 24-04-2025
                +## What's Changed
                +* Allow for just text pipelines by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/418
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.2...v3.2.3
                +# [v3.2.2] - 09-08-2024
                +## What's Changed
                +* Add support for @ prefix on MentionFilter base_url by @jeremysmithco in https://github.com/gjtorikian/html-pipeline/pull/411
                +* Bugfix: sanitization-only filters should still work by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/414
                +
                +## New Contributors
                +* @jeremysmithco made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/411
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.1...v3.2.2
                +# [v3.2.1] - 16-07-2024
                +## What's Changed
                +* Update commonmarker requirement from ~> 1.0.0.pre7 to ~> 1.1.2 in the bundler-dependencies group by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/404
                +* Remove superfluous sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/408
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.0...v3.2.1
                +## [v3.2.0] - 30-04-2024
                +## What's Changed
                +* Pass context along to every part of the pipeline by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/403
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.1...v3.2.0
                +## [v3.1.1] - 09-04-2024
                +## What's Changed
                +* Correct missing method implementation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/401
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.0...v3.1.1
                +## [v3.1.0] - 28-02-2024
                +## What's Changed
                +* UPGRADING:  not removed by @dentarg in https://github.com/gjtorikian/html-pipeline/pull/397
                +* [BREAKING]  now requires instantiation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/398
                +
                +## New Contributors
                +* @dentarg made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/397
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.3...v3.1.0
                +## [v3.0.3] - 02-02-2024
                +
                +## What's Changed
                +
                +- Fix typo in README by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/394
                +- Prevent exception by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/395
                +- Cut 3.0.3 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/396
                +
                +## New Contributors
                +
                +- @ppworks made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/394
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.2...v3.0.3
                +
                @@ -1,0 +69 @@
                +
                @@ -3,2 +71,3 @@
                -* README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
                -* Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
                +
                +- README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
                +- Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
                @@ -7 +76,2 @@
                -* @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
                +
                +- @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
                @@ -9,0 +80 @@
                +
                @@ -10,0 +82 @@
                +
                @@ -12 +84,2 @@
                -* Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
                +
                +- Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
                @@ -15 +88,2 @@
                -* @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
                +
                +- @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
                @@ -17,0 +92 @@
                +
                @@ -18,0 +94 @@
                +
                @@ -20,20 +96,21 @@
                -* Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
                -* add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
                -* Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
                -* Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
                -* Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
                -* Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
                -* You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
                -* Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
                -* Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
                -* Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
                -* V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
                -* Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
                -* req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
                -* Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
                -* Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
                -* Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
                -* Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
                -* Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
                -* Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
                -* :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
                +
                +- Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
                +- add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
                +- Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
                +- Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
                +- Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
                +- Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
                +- You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
                +- Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
                +- Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
                +- Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
                +- V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
                +- Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
                +- req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
                +- Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
                +- Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
                +- Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
                +- Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
                +- Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
                +- Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
                +- :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
                @@ -42,3 +119,4 @@
                -* @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
                -* @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
                -* @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
                +
                +- @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
                +- @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
                +- @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
                @@ -46,0 +125 @@
                +
                @@ -47,0 +127 @@
                +
                @@ -48,0 +129 @@
                +
                @@ -79 +160 @@
                -- req convert\_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
                +- req convert_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
                @@ -140 +221 @@
                -- Replace EscapeUtils.escape\_html with CGI.escape\_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
                +- Replace EscapeUtils.escape_html with CGI.escape_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
                @@ -312 +393 @@
                -- New feature request for hashtags \# filter  [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
                +- New feature request for hashtags \# filter [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
                @@ -415 +496 @@
                --   add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
                +- add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
                @@ -424 +505 @@
                -- Missing context keys for HTML::Pipeline::EmojiFilter: :asset\_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
                +- Missing context keys for HTML::Pipeline::EmojiFilter: :asset_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
                @@ -507,2 +588,2 @@
                -- Fix for calling mention\_link\_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
                -- Add html-pipeline-linkify\_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- Fix for calling mention_link_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
                +- Add html-pipeline-linkify_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
                @@ -564 +645 @@
                -- MentionFilter base\_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
                +- MentionFilter base_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
                @@ -576,2 +657,2 @@
                -- Add 3rd party gem: html-pipeline-rouge\_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
                -- MentionFilter\#link\_to\_mentioned\_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
                +- Add 3rd party gem: html-pipeline-rouge_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- MentionFilter\#link_to_mentioned_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
                @@ -579 +660 @@
                -- Implement new context option: ignored\_ancestor\_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- Implement new context option: ignored_ancestor_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
                @@ -596 +677 @@
                -- @mention\_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
                +- @mention_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
                @@ -603 +684 @@
                -- Prefer http\_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
                +- Prefer http_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
                @@ -635 +716 @@
                -- Remove RUBY\_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
                +- Remove RUBY_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
                @@ -662 +743 @@
                -- AutolinkFilter link\_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
                +- AutolinkFilter link_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
                @@ -750 +831 @@
                -- Add link\_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
                +- Add link_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
                @@ -752 +833 @@
                -- use xml\_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
                +- use xml_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
                @@ -820 +901 @@
                -- Allow passing skip\_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
                +- Allow passing skip_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
                @@ -873 +954 @@
                -- add result\[:mentioned\_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
                +- add result\[:mentioned_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
                @@ -889 +970 @@
                -- Bump escape\_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
                +- Bump escape_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
                @@ -981,4 +1061,0 @@
                -
                -
                -
                -\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
        Gemfile
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/Gemfile	2026-01-07 03:01:49.265388731 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/Gemfile	2026-01-07 03:01:49.270388753 +0000
                @@ -13,2 +12,0 @@
                -gem "github_changelog_generator", "~> 1.16"
                -
                @@ -30 +28 @@
                -  gem "commonmarker", "~> 1.0.0.pre7", require: false
                +  gem "commonmarker", "~> 2.6", require: false
                @@ -34,2 +32,2 @@
                -  gem "minitest"
                -
                +  gem "minitest", "~> 6.0"
                +  gem "minitest-mock", "~> 5.27"
        README.md
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/README.md	2026-01-07 03:01:49.265388731 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/README.md	2026-01-07 03:01:49.270388753 +0000
                @@ -3,3 +2,0 @@
                -> **Note**
                -> This README refers to the behavior in the new 3.0.0.pre gem.
                -
                @@ -63 +60,7 @@
                -As an example, suppose we want to transform Commonmark source text into Markdown HTML. With the content, we also want to:
                +As an example, suppose we want to transform Commonmark source text into Markdown HTML:
                +
                +```
                +Hey there, @gjtorikian
                +```
                +
                +With the content, we also want to:
                @@ -65 +68 @@
                -- change every instance of `$NAME` to "`Johnny"
                +- change every instance of `Hey` to `Hello`
                @@ -76 +79 @@
                -    text.gsub("$NAME", "Johnny")
                +    text.gsub("Hey", "Hello")
                @@ -107 +110 @@
                -context =  { markdown: { extensions: { footnotes: false } } }
                +context = { markdown: { extensions: { footnotes: false } } }
                @@ -111,0 +115,10 @@
                +Alternatively, you can construct a pipeline, and pass in a context during the call:
                +
                +```ruby
                +pipeline = HTMLPipeline.new(
                +  convert_filter: HTMLPipeline::ConvertFilter::MarkdownFilter.new,
                +  node_filters: [HTMLPipeline::NodeFilter::MentionFilter.new]
                +)
                +pipeline.call(user_supplied_text, context: { markdown: { extensions: { footnotes: false } } })
                +```
                +
                @@ -161 +174 @@
                -Because the web can be a scary place, HTML is automatically sanitized after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
                +Because the web can be a scary place, **HTML is automatically sanitized** after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
                @@ -163 +176 @@
                -The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings.
                +The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings. Note that users must correctly configure the sanitization configuration if they expect to use it correctly in conjunction with handlers which manipulate HTML.
                @@ -174 +187 @@
                -    HTMLPipeline::MarkdownFilter,
                +    HTMLPipeline::TextFilter::ImageFilter.new,
                @@ -202 +215 @@
                -    HTMLPipeline::MarkdownFilter,
                +    HTMLPipeline::TextFilter::ImageFilter.new,
                @@ -214 +227 @@
                -`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a custom state for `result` to take advantage of.
                +`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a fresh custom state for `result` to start from each time the pipeline is called.
                @@ -333,28 +345,0 @@
                -## Third Party Extensions
                -
                -If you have an idea for a filter, propose it as
                -[an issue](https://github.com/gjtorikian/html-pipeline/issues) first. This allows us to discuss
                -whether the filter is a common enough use case to belong in this gem, or should be
                -built as an external gem.
                -
                -Here are some extensions people have built:
                -
                -- [html-pipeline-asciidoc_filter](https://github.com/asciidoctor/html-pipeline-asciidoc_filter)
                -- [jekyll-html-pipeline](https://github.com/gjtorikian/jekyll-html-pipeline)
                -- [nanoc-html-pipeline](https://github.com/burnto/nanoc-html-pipeline)
                -- [html-pipeline-bitly](https://github.com/dewski/html-pipeline-bitly)
                -- [html-pipeline-cite](https://github.com/lifted-studios/html-pipeline-cite)
                -- [tilt-html-pipeline](https://github.com/bradgessler/tilt-html-pipeline)
                -- [html-pipeline-wiki-link'](https://github.com/lifted-studios/html-pipeline-wiki-link) - WikiMedia-style wiki links
                -- [task_list](https://github.com/github/task_list) - GitHub flavor Markdown Task List
                -- [html-pipeline-nico_link](https://github.com/rutan/html-pipeline-nico_link) - An HTMLPipeline filter for [niconico](http://www.nicovideo.jp) description links
                -- [html-pipeline-gitlab](https://gitlab.com/gitlab-org/html-pipeline-gitlab) - This gem implements various filters for html-pipeline used by GitLab
                -- [html-pipeline-youtube](https://github.com/st0012/html-pipeline-youtube) - An HTMLPipeline filter for YouTube links
                -- [html-pipeline-flickr](https://github.com/st0012/html-pipeline-flickr) - An HTMLPipeline filter for Flickr links
                -- [html-pipeline-vimeo](https://github.com/dlackty/html-pipeline-vimeo) - An HTMLPipeline filter for Vimeo links
                -- [html-pipeline-hashtag](https://github.com/mr-dxdy/html-pipeline-hashtag) - An HTMLPipeline filter for hashtags
                -- [html-pipeline-linkify_github](https://github.com/jollygoodcode/html-pipeline-linkify_github) - An HTMLPipeline filter to autolink GitHub urls
                -- [html-pipeline-redcarpet_filter](https://github.com/bmikol/html-pipeline-redcarpet_filter) - Render Markdown source text into Markdown HTML using Redcarpet
                -- [html-pipeline-typogruby_filter](https://github.com/bmikol/html-pipeline-typogruby_filter) - Add Typogruby text filters to your HTMLPipeline
                -- [korgi](https://github.com/jodeci/korgi) - HTMLPipeline filters for links to Rails resources
                -
                @@ -378 +363 @@
                -config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.dup
                +config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.deep_dup
        UPGRADING.md
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/UPGRADING.md	2026-01-07 03:01:49.266388735 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/UPGRADING.md	2026-01-07 03:01:49.270388753 +0000
                @@ -17 +16,0 @@
                -
                @@ -20 +18,0 @@
                -- `TextFilter`
        html-pipeline.gemspec
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/html-pipeline.gemspec	2026-01-07 03:01:49.266388735 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/html-pipeline.gemspec	2026-01-07 03:01:49.270388753 +0000
                @@ -19 +19,2 @@
                -  gem.required_ruby_version = "~> 3.1"
                +  gem.required_ruby_version = ">= 3.2"
                +
                @@ -28 +29 @@
                -  gem.add_dependency("selma", "~> 0.1")
                +  gem.add_dependency("selma", "~> 0.4")
        lib/html_pipeline.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline.rb	2026-01-07 03:01:49.266388735 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline.rb	2026-01-07 03:01:49.271388757 +0000
                @@ -125 +125 @@
                -    if @convert_filter.nil? && (!@text_filters.empty? && !@node_filters.empty?)
                +    if @convert_filter.nil? && !@text_filters.empty? && !@node_filters.empty?
                @@ -156,3 +156,3 @@
                -        text_filters: @text_filters.map(&:name),
                -        context: context,
                -        result: result,
                +        text_filters: @text_filters.map { |f| f.class.name },
                +        context:,
                +        result:,
                @@ -163 +163 @@
                -            perform_filter(filter, doc, context: context, result: result)
                +            perform_filter(filter, doc, context: (filter.context || {}).merge(context), result:)
                @@ -174 +174 @@
                -        html = @convert_filter.call(text)
                +        html = @convert_filter.call(text, context: (@convert_filter.context || {}).merge(context))
                @@ -178 +178,11 @@
                -    unless @node_filters.empty?
                +    rewriter_options = {
                +      memory: {
                +        max_allowed_memory_usage: 5242880, # arbitrary limit of 5MB
                +      },
                +    }
                +
                +    if @node_filters.empty? && !@sanitization_config.nil?
                +      instrument("sanitization.html_pipeline", payload) do
                +        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, options: rewriter_options).rewrite(html)
                +      end
                +    elsif @node_filters.any?
                @@ -180,2 +190,2 @@
                -        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
                -        html = result[:output]
                +        @node_filters.each { |filter| filter.context = (filter.context || {}).merge(context) }
                +        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters, options: rewriter_options).rewrite(html)
                @@ -184,2 +194,2 @@
                -          context: context,
                -          result: result,
                +          context:,
                +          result:,
                @@ -188,4 +198,2 @@
                -    end
                -
                -    instrument("html_pipeline.sanitization", payload) do
                -      result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
                +    else
                +      result[:output] = html
                @@ -207,3 +215,3 @@
                -      filter: filter.name,
                -      context: context,
                -      result: result,
                +      filter: filter.class.name,
                +      context:,
                +      result:,
                @@ -213 +221 @@
                -      filter.call(doc, context: context, result: result)
                +      filter.call(doc, context:, result:)
                @@ -219 +227 @@
                -    result = call(input, context: context, result: result)
                +    result = call(input, context:, result:)
                @@ -269 +277 @@
                -      verb = invalid_filters.count == 1 ? "does" : "do"
                +      verb = invalid_filters.one? ? "does" : "do"
        lib/html_pipeline/convert_filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/convert_filter.rb	2026-01-07 03:01:49.266388735 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/convert_filter.rb	2026-01-07 03:01:49.271388757 +0000
                @@ -8 +8 @@
                -      super(context: context, result: result)
                +      super
        lib/html_pipeline/convert_filter/markdown_filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/convert_filter/markdown_filter.rb	2026-01-07 03:01:49.266388735 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/convert_filter/markdown_filter.rb	2026-01-07 03:01:49.271388757 +0000
                @@ -6 +6 @@
                -  class ConvertFilter
                +  class ConvertFilter < Filter
                @@ -15 +15 @@
                -        super(context: context, result: result)
                +        super
                @@ -19,2 +19,2 @@
                -      def call(text)
                -        options = @context.fetch(:markdown, {})
                +      def call(text, context: @context)
                +        options = context.fetch(:markdown, {})
        lib/html_pipeline/filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/filter.rb	2026-01-07 03:01:49.266388735 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/filter.rb	2026-01-07 03:01:49.271388757 +0000
                @@ -30 +30 @@
                -    attr_reader :context
                +    attr_accessor :context
        lib/html_pipeline/node_filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/node_filter.rb	2026-01-07 03:01:49.266388735 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/node_filter.rb	2026-01-07 03:01:49.271388757 +0000
                @@ -6,0 +7,2 @@
                +    attr_accessor :context
                +
        lib/html_pipeline/node_filter/emoji_filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/node_filter/emoji_filter.rb	2026-01-07 03:01:49.267388739 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/node_filter/emoji_filter.rb	2026-01-07 03:01:49.271388757 +0000
                @@ -76 +76 @@
                -            next if value.nil?
                +              next if value.nil?
                @@ -78,2 +78,2 @@
                -            value = value.respond_to?(:call) && value.call(name) || value
                -            arr << %(#{attr}="#{value}")
                +              value = value.respond_to?(:call) && value.call(name) || value
                +              arr << %(#{attr}="#{value}")
        lib/html_pipeline/node_filter/mention_filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/node_filter/mention_filter.rb	2026-01-07 03:01:49.267388739 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/node_filter/mention_filter.rb	2026-01-07 03:01:49.272388761 +0000
                @@ -118 +118,2 @@
                -        url << "/" unless %r{[/~]\z}.match?(url)
                +        excluded_prefixes = %r{[/(?:~|@]\z}
                +        url << "/" unless excluded_prefixes.match?(url)
        lib/html_pipeline/node_filter/syntax_highlight_filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/node_filter/syntax_highlight_filter.rb	2026-01-07 03:01:49.267388739 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/node_filter/syntax_highlight_filter.rb	2026-01-07 03:01:49.272388761 +0000
                @@ -18 +18 @@
                -        super(context: context, result: result)
                +        super
        lib/html_pipeline/node_filter/team_mention_filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/node_filter/team_mention_filter.rb	2026-01-07 03:01:49.267388739 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/node_filter/team_mention_filter.rb	2026-01-07 03:01:49.272388761 +0000
                @@ -97 +97,2 @@
                -        url << "/" unless %r{[/~]\z}.match?(url)
                +        excluded_prefixes = %r{[/(?:~|@]\z}
                +        url << "/" unless excluded_prefixes.match?(url)
        lib/html_pipeline/text_filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/text_filter.rb	2026-01-07 03:01:49.267388739 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/text_filter.rb	2026-01-07 03:01:49.272388761 +0000
                @@ -7,6 +7,2 @@
                -    def initialize(text, context: {}, result: {})
                -      raise TypeError, "text must be a String" unless text.is_a?(String)
                -
                -      # Ensure that this is always a string
                -      @text = text.respond_to?(:to_str) ? text.to_str : text.to_s
                -      super(context: context, result: result)
                +    def initialize(context: {}, result: {})
                +      super
                @@ -16,2 +12,6 @@
                -      def call(input, context: {}, result: {})
                -        new(input, context: context, result: result).call
                +      def call(text, context: {}, result: {})
                +        raise TypeError, "text must be a String" unless text.is_a?(String)
                +
                +        # Ensure that this is always a string
                +        text = text.respond_to?(:to_str) ? text.to_str : text.to_s
                +        new(context: context, result: result).call(text)
        lib/html_pipeline/text_filter/image_filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/text_filter/image_filter.rb	2026-01-07 03:01:49.267388739 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/text_filter/image_filter.rb	2026-01-07 03:01:49.272388761 +0000
                @@ -12,2 +12,2 @@
                -      def call
                -        @text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
                +      def call(text, context: {}, result: {})
                +        text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
        lib/html_pipeline/text_filter/plain_text_input_filter.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/text_filter/plain_text_input_filter.rb	2026-01-07 03:01:49.268388744 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/text_filter/plain_text_input_filter.rb	2026-01-07 03:01:49.272388761 +0000
                @@ -8,2 +8,2 @@
                -      def call
                -        "<div>#{CGI.escapeHTML(@text)}</div>"
                +      def call(text, context: {}, result: {})
                +        "<div>#{CGI.escapeHTML(text)}</div>"
        lib/html_pipeline/version.rb
                --- /tmp/d20260107-476-np7plg/html-pipeline-3.0.3/lib/html_pipeline/version.rb	2026-01-07 03:01:49.268388744 +0000
                +++ /tmp/d20260107-476-np7plg/html-pipeline-3.2.4/lib/html_pipeline/version.rb	2026-01-07 03:01:49.272388761 +0000
                @@ -4 +4 @@
                -  VERSION = "3.0.3"
                +  VERSION = "3.2.4"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff html-pipeline 3.0.3 3.2.4

Compared versions: ["3.0.3", "3.2.4"]
  DIFFERENT files:
    3.0.3->3.2.4:
      * Changed:
        .github/workflows/automerge.yml
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/.github/workflows/automerge.yml	2026-01-07 03:01:52.689488633 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/.github/workflows/automerge.yml	2026-01-07 03:01:52.694488720 +0000
                @@ -3,0 +4 @@
                +  workflow_dispatch:
                @@ -11,3 +12,5 @@
                -  dependabot:
                -    uses: yettoapp/actions/.github/workflows/automerge_dependabot.yml@main
                -    secrets: inherit
                +  bot-check:
                +    uses: gjtorikian/actions/.github/workflows/automerge.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                +
        .github/workflows/ci.yml
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/.github/workflows/ci.yml	2026-01-07 03:01:52.690488650 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/.github/workflows/ci.yml	2026-01-07 03:01:52.694488720 +0000
                @@ -7 +7,2 @@
                -  contents: read
                +  contents: write
                +  pull-requests: write
                @@ -11,12 +12,3 @@
                -    runs-on: ubuntu-latest
                -
                -    steps:
                -      - uses: actions/checkout@v4
                -
                -      - name: Set up Ruby
                -        uses: yettoapp/actions/setup-languages@main
                -        with:
                -          ruby: true
                -
                -      - name: Run tests
                -        run: bundle exec rake test
                +    uses: gjtorikian/actions/.github/workflows/ruby_test_suite.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
        .github/workflows/lint.yml
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/.github/workflows/lint.yml	2026-01-07 03:01:52.690488650 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/.github/workflows/lint.yml	2026-01-07 03:01:52.694488720 +0000
                @@ -1 +1 @@
                -name: Linting
                +name: Lint
                @@ -9 +9 @@
                -  contents: read
                +  contents: write
                @@ -12,4 +12,4 @@
                -  test:
                -    runs-on: ubuntu-latest
                -    steps:
                -      - uses: actions/checkout@v4
                +  lint:
                +    uses: gjtorikian/actions/.github/workflows/ruby_lint.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                @@ -17,7 +16,0 @@
                -      - name: Set up Ruby
                -        uses: yettoapp/actions/setup-languages@main
                -        with:
                -          ruby: true
                -
                -      - name: Rubocop
                -        run: bundle exec rake rubocop
        .github/workflows/publish.yml
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/.github/workflows/publish.yml	2026-01-07 03:01:52.690488650 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/.github/workflows/publish.yml	2026-01-07 03:01:52.694488720 +0000
                @@ -1 +1 @@
                -name: Release
                +name: Tag and Release
                @@ -9,0 +10,9 @@
                +  pull_request_target:
                +    types:
                +      - closed
                +
                +permissions:
                +  pull-requests: write
                +  contents: write
                +  id-token: write
                +  actions: write
                @@ -13 +22 @@
                -    uses: yettoapp/actions/.github/workflows/ruby_gem_release.yml@main
                +    uses: gjtorikian/actions/.github/workflows/ruby_gem_release.yml@main
                @@ -15,2 +24 @@
                -      rubygems_api_key: ${{ secrets.RUBYGEMS_API_BOT_KEY }}
                -      gh_token: ${{ secrets.PUBLIC_PUSH_TO_PROTECTED_BRANCH }}
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                @@ -19,0 +28,3 @@
                +      prepare: ${{ github.event_name == 'push' }}
                +      release: ${{ github.event_name == 'workflow_dispatch' || ((github.event.pull_request.merged == true) && (contains(github.event.pull_request.labels.*.name, 'release'))) }}
                +      oidc_role_to_assume: rg_oidc_akr_h9dt72ax2bswgewowdv7
        .gitignore
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/.gitignore	2026-01-07 03:01:52.690488650 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/.gitignore	2026-01-07 03:01:52.694488720 +0000
                @@ -20 +20,3 @@
                -vendor/gems
                \ No newline at end of file
                +
                +vendor/cache/
                +vendor/bundle/
        .rubocop.yml
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/.rubocop.yml	2026-01-07 03:01:52.690488650 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/.rubocop.yml	2026-01-07 03:01:52.694488720 +0000
                @@ -17,0 +18,3 @@
                +
                +ThreadSafety/ClassAndModuleAttributes:
                +  Enabled: false
        .vscode/settings.json
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/.vscode/settings.json	2026-01-07 03:01:52.690488650 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/.vscode/settings.json	2026-01-07 03:01:52.694488720 +0000
                @@ -6,0 +7,3 @@
                +    },
                +    "[github-actions-workflow]": {
                +        "editor.defaultFormatter": "redhat.vscode-yaml"
        CHANGELOG.md
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/CHANGELOG.md	2026-01-07 03:01:52.690488650 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/CHANGELOG.md	2026-01-07 03:01:52.695488738 +0000
                @@ -0,0 +1,67 @@
                +# [v3.2.4] - 06-01-2026
                +## What's Changed
                +* [skip test] Release v3.2.3 by @github-actions[bot] in https://github.com/gjtorikian/html-pipeline/pull/419
                +* Bump actions/checkout from 4 to 5 in the github-actions group by @dependabot[bot] in https://github.com/gjtorikian/html-pipeline/pull/424
                +* Bump actions/checkout from 5 to 6 in the github-actions group by @dependabot[bot] in https://github.com/gjtorikian/html-pipeline/pull/426
                +* Support Ruby 4.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/427
                +* Allow for completely nil sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/428
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.3...v3.2.4
                +# [v3.2.3] - 24-04-2025
                +## What's Changed
                +* Allow for just text pipelines by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/418
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.2...v3.2.3
                +# [v3.2.2] - 09-08-2024
                +## What's Changed
                +* Add support for @ prefix on MentionFilter base_url by @jeremysmithco in https://github.com/gjtorikian/html-pipeline/pull/411
                +* Bugfix: sanitization-only filters should still work by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/414
                +
                +## New Contributors
                +* @jeremysmithco made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/411
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.1...v3.2.2
                +# [v3.2.1] - 16-07-2024
                +## What's Changed
                +* Update commonmarker requirement from ~> 1.0.0.pre7 to ~> 1.1.2 in the bundler-dependencies group by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/404
                +* Remove superfluous sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/408
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.0...v3.2.1
                +## [v3.2.0] - 30-04-2024
                +## What's Changed
                +* Pass context along to every part of the pipeline by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/403
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.1...v3.2.0
                +## [v3.1.1] - 09-04-2024
                +## What's Changed
                +* Correct missing method implementation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/401
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.0...v3.1.1
                +## [v3.1.0] - 28-02-2024
                +## What's Changed
                +* UPGRADING:  not removed by @dentarg in https://github.com/gjtorikian/html-pipeline/pull/397
                +* [BREAKING]  now requires instantiation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/398
                +
                +## New Contributors
                +* @dentarg made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/397
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.3...v3.1.0
                +## [v3.0.3] - 02-02-2024
                +
                +## What's Changed
                +
                +- Fix typo in README by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/394
                +- Prevent exception by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/395
                +- Cut 3.0.3 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/396
                +
                +## New Contributors
                +
                +- @ppworks made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/394
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.2...v3.0.3
                +
                @@ -1,0 +69 @@
                +
                @@ -3,2 +71,3 @@
                -* README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
                -* Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
                +
                +- README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
                +- Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
                @@ -7 +76,2 @@
                -* @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
                +
                +- @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
                @@ -9,0 +80 @@
                +
                @@ -10,0 +82 @@
                +
                @@ -12 +84,2 @@
                -* Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
                +
                +- Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
                @@ -15 +88,2 @@
                -* @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
                +
                +- @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
                @@ -17,0 +92 @@
                +
                @@ -18,0 +94 @@
                +
                @@ -20,20 +96,21 @@
                -* Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
                -* add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
                -* Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
                -* Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
                -* Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
                -* Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
                -* You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
                -* Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
                -* Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
                -* Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
                -* V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
                -* Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
                -* req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
                -* Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
                -* Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
                -* Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
                -* Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
                -* Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
                -* Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
                -* :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
                +
                +- Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
                +- add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
                +- Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
                +- Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
                +- Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
                +- Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
                +- You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
                +- Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
                +- Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
                +- Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
                +- V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
                +- Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
                +- req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
                +- Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
                +- Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
                +- Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
                +- Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
                +- Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
                +- Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
                +- :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
                @@ -42,3 +119,4 @@
                -* @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
                -* @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
                -* @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
                +
                +- @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
                +- @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
                +- @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
                @@ -46,0 +125 @@
                +
                @@ -47,0 +127 @@
                +
                @@ -48,0 +129 @@
                +
                @@ -79 +160 @@
                -- req convert\_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
                +- req convert_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
                @@ -140 +221 @@
                -- Replace EscapeUtils.escape\_html with CGI.escape\_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
                +- Replace EscapeUtils.escape_html with CGI.escape_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
                @@ -312 +393 @@
                -- New feature request for hashtags \# filter  [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
                +- New feature request for hashtags \# filter [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
                @@ -415 +496 @@
                --   add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
                +- add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
                @@ -424 +505 @@
                -- Missing context keys for HTML::Pipeline::EmojiFilter: :asset\_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
                +- Missing context keys for HTML::Pipeline::EmojiFilter: :asset_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
                @@ -507,2 +588,2 @@
                -- Fix for calling mention\_link\_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
                -- Add html-pipeline-linkify\_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- Fix for calling mention_link_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
                +- Add html-pipeline-linkify_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
                @@ -564 +645 @@
                -- MentionFilter base\_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
                +- MentionFilter base_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
                @@ -576,2 +657,2 @@
                -- Add 3rd party gem: html-pipeline-rouge\_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
                -- MentionFilter\#link\_to\_mentioned\_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
                +- Add 3rd party gem: html-pipeline-rouge_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- MentionFilter\#link_to_mentioned_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
                @@ -579 +660 @@
                -- Implement new context option: ignored\_ancestor\_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- Implement new context option: ignored_ancestor_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
                @@ -596 +677 @@
                -- @mention\_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
                +- @mention_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
                @@ -603 +684 @@
                -- Prefer http\_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
                +- Prefer http_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
                @@ -635 +716 @@
                -- Remove RUBY\_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
                +- Remove RUBY_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
                @@ -662 +743 @@
                -- AutolinkFilter link\_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
                +- AutolinkFilter link_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
                @@ -750 +831 @@
                -- Add link\_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
                +- Add link_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
                @@ -752 +833 @@
                -- use xml\_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
                +- use xml_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
                @@ -820 +901 @@
                -- Allow passing skip\_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
                +- Allow passing skip_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
                @@ -873 +954 @@
                -- add result\[:mentioned\_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
                +- add result\[:mentioned_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
                @@ -889 +970 @@
                -- Bump escape\_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
                +- Bump escape_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
                @@ -981,4 +1061,0 @@
                -
                -
                -
                -\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
        Gemfile
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/Gemfile	2026-01-07 03:01:52.690488650 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/Gemfile	2026-01-07 03:01:52.695488738 +0000
                @@ -13,2 +12,0 @@
                -gem "github_changelog_generator", "~> 1.16"
                -
                @@ -30 +28 @@
                -  gem "commonmarker", "~> 1.0.0.pre7", require: false
                +  gem "commonmarker", "~> 2.6", require: false
                @@ -34,2 +32,2 @@
                -  gem "minitest"
                -
                +  gem "minitest", "~> 6.0"
                +  gem "minitest-mock", "~> 5.27"
        README.md
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/README.md	2026-01-07 03:01:52.691488668 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/README.md	2026-01-07 03:01:52.695488738 +0000
                @@ -3,3 +2,0 @@
                -> **Note**
                -> This README refers to the behavior in the new 3.0.0.pre gem.
                -
                @@ -63 +60,7 @@
                -As an example, suppose we want to transform Commonmark source text into Markdown HTML. With the content, we also want to:
                +As an example, suppose we want to transform Commonmark source text into Markdown HTML:
                +
                +```
                +Hey there, @gjtorikian
                +```
                +
                +With the content, we also want to:
                @@ -65 +68 @@
                -- change every instance of `$NAME` to "`Johnny"
                +- change every instance of `Hey` to `Hello`
                @@ -76 +79 @@
                -    text.gsub("$NAME", "Johnny")
                +    text.gsub("Hey", "Hello")
                @@ -107 +110 @@
                -context =  { markdown: { extensions: { footnotes: false } } }
                +context = { markdown: { extensions: { footnotes: false } } }
                @@ -111,0 +115,10 @@
                +Alternatively, you can construct a pipeline, and pass in a context during the call:
                +
                +```ruby
                +pipeline = HTMLPipeline.new(
                +  convert_filter: HTMLPipeline::ConvertFilter::MarkdownFilter.new,
                +  node_filters: [HTMLPipeline::NodeFilter::MentionFilter.new]
                +)
                +pipeline.call(user_supplied_text, context: { markdown: { extensions: { footnotes: false } } })
                +```
                +
                @@ -161 +174 @@
                -Because the web can be a scary place, HTML is automatically sanitized after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
                +Because the web can be a scary place, **HTML is automatically sanitized** after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
                @@ -163 +176 @@
                -The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings.
                +The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings. Note that users must correctly configure the sanitization configuration if they expect to use it correctly in conjunction with handlers which manipulate HTML.
                @@ -174 +187 @@
                -    HTMLPipeline::MarkdownFilter,
                +    HTMLPipeline::TextFilter::ImageFilter.new,
                @@ -202 +215 @@
                -    HTMLPipeline::MarkdownFilter,
                +    HTMLPipeline::TextFilter::ImageFilter.new,
                @@ -214 +227 @@
                -`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a custom state for `result` to take advantage of.
                +`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a fresh custom state for `result` to start from each time the pipeline is called.
                @@ -333,28 +345,0 @@
                -## Third Party Extensions
                -
                -If you have an idea for a filter, propose it as
                -[an issue](https://github.com/gjtorikian/html-pipeline/issues) first. This allows us to discuss
                -whether the filter is a common enough use case to belong in this gem, or should be
                -built as an external gem.
                -
                -Here are some extensions people have built:
                -
                -- [html-pipeline-asciidoc_filter](https://github.com/asciidoctor/html-pipeline-asciidoc_filter)
                -- [jekyll-html-pipeline](https://github.com/gjtorikian/jekyll-html-pipeline)
                -- [nanoc-html-pipeline](https://github.com/burnto/nanoc-html-pipeline)
                -- [html-pipeline-bitly](https://github.com/dewski/html-pipeline-bitly)
                -- [html-pipeline-cite](https://github.com/lifted-studios/html-pipeline-cite)
                -- [tilt-html-pipeline](https://github.com/bradgessler/tilt-html-pipeline)
                -- [html-pipeline-wiki-link'](https://github.com/lifted-studios/html-pipeline-wiki-link) - WikiMedia-style wiki links
                -- [task_list](https://github.com/github/task_list) - GitHub flavor Markdown Task List
                -- [html-pipeline-nico_link](https://github.com/rutan/html-pipeline-nico_link) - An HTMLPipeline filter for [niconico](http://www.nicovideo.jp) description links
                -- [html-pipeline-gitlab](https://gitlab.com/gitlab-org/html-pipeline-gitlab) - This gem implements various filters for html-pipeline used by GitLab
                -- [html-pipeline-youtube](https://github.com/st0012/html-pipeline-youtube) - An HTMLPipeline filter for YouTube links
                -- [html-pipeline-flickr](https://github.com/st0012/html-pipeline-flickr) - An HTMLPipeline filter for Flickr links
                -- [html-pipeline-vimeo](https://github.com/dlackty/html-pipeline-vimeo) - An HTMLPipeline filter for Vimeo links
                -- [html-pipeline-hashtag](https://github.com/mr-dxdy/html-pipeline-hashtag) - An HTMLPipeline filter for hashtags
                -- [html-pipeline-linkify_github](https://github.com/jollygoodcode/html-pipeline-linkify_github) - An HTMLPipeline filter to autolink GitHub urls
                -- [html-pipeline-redcarpet_filter](https://github.com/bmikol/html-pipeline-redcarpet_filter) - Render Markdown source text into Markdown HTML using Redcarpet
                -- [html-pipeline-typogruby_filter](https://github.com/bmikol/html-pipeline-typogruby_filter) - Add Typogruby text filters to your HTMLPipeline
                -- [korgi](https://github.com/jodeci/korgi) - HTMLPipeline filters for links to Rails resources
                -
                @@ -378 +363 @@
                -config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.dup
                +config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.deep_dup
        UPGRADING.md
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/UPGRADING.md	2026-01-07 03:01:52.691488668 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/UPGRADING.md	2026-01-07 03:01:52.695488738 +0000
                @@ -17 +16,0 @@
                -
                @@ -20 +18,0 @@
                -- `TextFilter`
        html-pipeline.gemspec
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/html-pipeline.gemspec	2026-01-07 03:01:52.691488668 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/html-pipeline.gemspec	2026-01-07 03:01:52.695488738 +0000
                @@ -19 +19,2 @@
                -  gem.required_ruby_version = "~> 3.1"
                +  gem.required_ruby_version = ">= 3.2"
                +
                @@ -28 +29 @@
                -  gem.add_dependency("selma", "~> 0.1")
                +  gem.add_dependency("selma", "~> 0.4")
        lib/html_pipeline.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline.rb	2026-01-07 03:01:52.691488668 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline.rb	2026-01-07 03:01:52.696488755 +0000
                @@ -125 +125 @@
                -    if @convert_filter.nil? && (!@text_filters.empty? && !@node_filters.empty?)
                +    if @convert_filter.nil? && !@text_filters.empty? && !@node_filters.empty?
                @@ -156,3 +156,3 @@
                -        text_filters: @text_filters.map(&:name),
                -        context: context,
                -        result: result,
                +        text_filters: @text_filters.map { |f| f.class.name },
                +        context:,
                +        result:,
                @@ -163 +163 @@
                -            perform_filter(filter, doc, context: context, result: result)
                +            perform_filter(filter, doc, context: (filter.context || {}).merge(context), result:)
                @@ -174 +174 @@
                -        html = @convert_filter.call(text)
                +        html = @convert_filter.call(text, context: (@convert_filter.context || {}).merge(context))
                @@ -178 +178,11 @@
                -    unless @node_filters.empty?
                +    rewriter_options = {
                +      memory: {
                +        max_allowed_memory_usage: 5242880, # arbitrary limit of 5MB
                +      },
                +    }
                +
                +    if @node_filters.empty? && !@sanitization_config.nil?
                +      instrument("sanitization.html_pipeline", payload) do
                +        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, options: rewriter_options).rewrite(html)
                +      end
                +    elsif @node_filters.any?
                @@ -180,2 +190,2 @@
                -        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
                -        html = result[:output]
                +        @node_filters.each { |filter| filter.context = (filter.context || {}).merge(context) }
                +        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters, options: rewriter_options).rewrite(html)
                @@ -184,2 +194,2 @@
                -          context: context,
                -          result: result,
                +          context:,
                +          result:,
                @@ -188,4 +198,2 @@
                -    end
                -
                -    instrument("html_pipeline.sanitization", payload) do
                -      result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
                +    else
                +      result[:output] = html
                @@ -207,3 +215,3 @@
                -      filter: filter.name,
                -      context: context,
                -      result: result,
                +      filter: filter.class.name,
                +      context:,
                +      result:,
                @@ -213 +221 @@
                -      filter.call(doc, context: context, result: result)
                +      filter.call(doc, context:, result:)
                @@ -219 +227 @@
                -    result = call(input, context: context, result: result)
                +    result = call(input, context:, result:)
                @@ -269 +277 @@
                -      verb = invalid_filters.count == 1 ? "does" : "do"
                +      verb = invalid_filters.one? ? "does" : "do"
        lib/html_pipeline/convert_filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/convert_filter.rb	2026-01-07 03:01:52.691488668 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/convert_filter.rb	2026-01-07 03:01:52.696488755 +0000
                @@ -8 +8 @@
                -      super(context: context, result: result)
                +      super
        lib/html_pipeline/convert_filter/markdown_filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/convert_filter/markdown_filter.rb	2026-01-07 03:01:52.691488668 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/convert_filter/markdown_filter.rb	2026-01-07 03:01:52.696488755 +0000
                @@ -6 +6 @@
                -  class ConvertFilter
                +  class ConvertFilter < Filter
                @@ -15 +15 @@
                -        super(context: context, result: result)
                +        super
                @@ -19,2 +19,2 @@
                -      def call(text)
                -        options = @context.fetch(:markdown, {})
                +      def call(text, context: @context)
                +        options = context.fetch(:markdown, {})
        lib/html_pipeline/filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/filter.rb	2026-01-07 03:01:52.691488668 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/filter.rb	2026-01-07 03:01:52.696488755 +0000
                @@ -30 +30 @@
                -    attr_reader :context
                +    attr_accessor :context
        lib/html_pipeline/node_filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/node_filter.rb	2026-01-07 03:01:52.692488685 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/node_filter.rb	2026-01-07 03:01:52.696488755 +0000
                @@ -6,0 +7,2 @@
                +    attr_accessor :context
                +
        lib/html_pipeline/node_filter/emoji_filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/node_filter/emoji_filter.rb	2026-01-07 03:01:52.692488685 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/node_filter/emoji_filter.rb	2026-01-07 03:01:52.696488755 +0000
                @@ -76 +76 @@
                -            next if value.nil?
                +              next if value.nil?
                @@ -78,2 +78,2 @@
                -            value = value.respond_to?(:call) && value.call(name) || value
                -            arr << %(#{attr}="#{value}")
                +              value = value.respond_to?(:call) && value.call(name) || value
                +              arr << %(#{attr}="#{value}")
        lib/html_pipeline/node_filter/mention_filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/node_filter/mention_filter.rb	2026-01-07 03:01:52.692488685 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/node_filter/mention_filter.rb	2026-01-07 03:01:52.697488773 +0000
                @@ -118 +118,2 @@
                -        url << "/" unless %r{[/~]\z}.match?(url)
                +        excluded_prefixes = %r{[/(?:~|@]\z}
                +        url << "/" unless excluded_prefixes.match?(url)
        lib/html_pipeline/node_filter/syntax_highlight_filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/node_filter/syntax_highlight_filter.rb	2026-01-07 03:01:52.692488685 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/node_filter/syntax_highlight_filter.rb	2026-01-07 03:01:52.697488773 +0000
                @@ -18 +18 @@
                -        super(context: context, result: result)
                +        super
        lib/html_pipeline/node_filter/team_mention_filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/node_filter/team_mention_filter.rb	2026-01-07 03:01:52.692488685 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/node_filter/team_mention_filter.rb	2026-01-07 03:01:52.697488773 +0000
                @@ -97 +97,2 @@
                -        url << "/" unless %r{[/~]\z}.match?(url)
                +        excluded_prefixes = %r{[/(?:~|@]\z}
                +        url << "/" unless excluded_prefixes.match?(url)
        lib/html_pipeline/text_filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/text_filter.rb	2026-01-07 03:01:52.692488685 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/text_filter.rb	2026-01-07 03:01:52.697488773 +0000
                @@ -7,6 +7,2 @@
                -    def initialize(text, context: {}, result: {})
                -      raise TypeError, "text must be a String" unless text.is_a?(String)
                -
                -      # Ensure that this is always a string
                -      @text = text.respond_to?(:to_str) ? text.to_str : text.to_s
                -      super(context: context, result: result)
                +    def initialize(context: {}, result: {})
                +      super
                @@ -16,2 +12,6 @@
                -      def call(input, context: {}, result: {})
                -        new(input, context: context, result: result).call
                +      def call(text, context: {}, result: {})
                +        raise TypeError, "text must be a String" unless text.is_a?(String)
                +
                +        # Ensure that this is always a string
                +        text = text.respond_to?(:to_str) ? text.to_str : text.to_s
                +        new(context: context, result: result).call(text)
        lib/html_pipeline/text_filter/image_filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/text_filter/image_filter.rb	2026-01-07 03:01:52.693488703 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/text_filter/image_filter.rb	2026-01-07 03:01:52.697488773 +0000
                @@ -12,2 +12,2 @@
                -      def call
                -        @text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
                +      def call(text, context: {}, result: {})
                +        text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
        lib/html_pipeline/text_filter/plain_text_input_filter.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/text_filter/plain_text_input_filter.rb	2026-01-07 03:01:52.693488703 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/text_filter/plain_text_input_filter.rb	2026-01-07 03:01:52.697488773 +0000
                @@ -8,2 +8,2 @@
                -      def call
                -        "<div>#{CGI.escapeHTML(@text)}</div>"
                +      def call(text, context: {}, result: {})
                +        "<div>#{CGI.escapeHTML(text)}</div>"
        lib/html_pipeline/version.rb
                --- /tmp/d20260107-490-k3wm1/html-pipeline-3.0.3/lib/html_pipeline/version.rb	2026-01-07 03:01:52.693488703 +0000
                +++ /tmp/d20260107-490-k3wm1/html-pipeline-3.2.4/lib/html_pipeline/version.rb	2026-01-07 03:01:52.697488773 +0000
                @@ -4 +4 @@
                -  VERSION = "3.0.3"
                +  VERSION = "3.2.4"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare html-pipeline 3.0.3 3.2.4

Compared versions: ["3.0.3", "3.2.4"]
  DIFFERENT date:
    3.0.3: 2024-02-02 00:00:00 UTC
    3.2.4: 1980-01-02 00:00:00 UTC
  DIFFERENT required_ruby_version:
    3.0.3: ~> 3.1
    3.2.4: >= 3.2
  DIFFERENT rubygems_version:
    3.0.3: 3.5.5
    3.2.4: 4.0.3
  DIFFERENT version:
    3.0.3: 3.0.3
    3.2.4: 3.2.4
  DIFFERENT files:
    3.0.3->3.2.4:
      * Changed:
            .github/workflows/automerge.yml +6/-3
            .github/workflows/ci.yml +5/-13
            .github/workflows/lint.yml +6/-13
            .github/workflows/publish.yml +15/-4
            .gitignore +3/-1
            .rubocop.yml +3/-0
            .vscode/settings.json +3/-0
            CHANGELOG.md +129/-52
            Gemfile +3/-5
            README.md +26/-41
            UPGRADING.md +0/-2
            html-pipeline.gemspec +3/-2
            lib/html_pipeline.rb +29/-21
            lib/html_pipeline/convert_filter.rb +1/-1
            lib/html_pipeline/convert_filter/markdown_filter.rb +4/-4
            lib/html_pipeline/filter.rb +1/-1
            lib/html_pipeline/node_filter.rb +2/-0
            lib/html_pipeline/node_filter/emoji_filter.rb +3/-3
            lib/html_pipeline/node_filter/mention_filter.rb +2/-1
            lib/html_pipeline/node_filter/syntax_highlight_filter.rb +1/-1
            lib/html_pipeline/node_filter/team_mention_filter.rb +2/-1
            lib/html_pipeline/text_filter.rb +8/-8
            lib/html_pipeline/text_filter/image_filter.rb +2/-2
            lib/html_pipeline/text_filter/plain_text_input_filter.rb +2/-2
            lib/html_pipeline/version.rb +1/-1
  DIFFERENT runtime dependencies:
    3.0.3->3.2.4:
      * Updated:
            selma from: ["~> 0.1"] to: ["~> 0.4"]
  DIFFERENT Gemfile dependencies
    3.0.3->3.2.4:
      * Added:
            minitest-mock ["~> 5.27"] (development)
      * Deleted
            github_changelog_generator ["~> 1.16"] (runtime)
      * Updated
            commonmarker from: ["~> 1.0.0.pre7"] to: ["~> 2.6"]
            minitest from: [">= 0"] to: ["~> 6.0"]

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare rb_sys 0.9.105 0.9.124

Compared versions: ["0.9.105", "0.9.124"]
  DIFFERENT cert_chain:
    0.9.105: ["-----BEGIN CERTIFICATE-----\nMIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRQwEgYDVQQDDAtpLmtl\ncnNleW1lcjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD\nY29tMB4XDTI0MDQxODA1MzY0N1oXDTI1MDQxODA1MzY0N1owQjEUMBIGA1UEAwwL\naS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk\nARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ2pG+er4cP\nPasxsMIKL9/tmLL4gh80EMuF3SCS0qZoh+Oo8dkvRYxW8NXdwEIcp3cCNgE+5G+J\nTCMOVF8S15n1Z1P7xxXiXxa/BIofKKbtatVRngm14uR/6pjdkvLXqlrWdS57bNwv\n7LtpzYVfDHfsl/qRWaEi4jq00PNCRSWjcva8teqswjBg8KlwGtyygpezPbVSWP8Y\nvzWZmVF7fqRBXU78Ah0+pNOhslBXDTvI3xJdN4hQ3H7rLjpD/qxKWq/8o+Qvx6cX\ndNZ3ugH/Pr3BAsqt4JFLXin9AK7PO9GDMH5JXJrUb+hAt2VNIZqpz9VlKA6BA0jN\neWGea+yCZkECAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O\nBBYEFOkrF6hsocaIMOjR/K3JBzyXCLJPMA0GCSqGSIb3DQEBCwUAA4IBAQARHgco\nyCxWUqN+HBGewmSB7T4oq6YS2FtU62K+GuWWCTqjl5byLKMXQW8HPDja9TC1My1m\n2r0uDshtUvUjuB/Vfe9jVMTjnPBspHZYo0MRuMPc7owJaahjkqD3l7w9aa8Ci5aC\nYU4Aj71Sc8s7YIxgHn/yIUdCe1yu6cC0+h+Ss9r/Yjr53NNXwjGQlDmH1eHcVQGZ\nmEoVcZO1uWNtRPPsn1gfvKLPjRe5pclXQnGviS5DiH0Du+8QMxQGBJnYz2zSMW7G\nLvd35BNvZkhFzs9xfykhurpkT2TiP2F3ZFn9dwLXMFe41pwrtEYLIWhYi8mUG4Ek\n6aR8M/tqIpChVV39\n-----END CERTIFICATE-----\n"]
    0.9.124: ["-----BEGIN CERTIFICATE-----\nMIIDZTCCAk2gAwIBAgIUBA3+R8/tEu+w03IWit3NPqhAv5EwDQYJKoZIhvcNAQEL\nBQAwQjEUMBIGA1UEAwwLaS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFp\nbDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNTA1MDcxOTA3NDNaFw0zNTA1MDUx\nOTA3NDNaMEIxFDASBgNVBAMMC2kua2Vyc2V5bWVyMRUwEwYKCZImiZPyLGQBGRYF\nZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQDCdqRvnq+HDz2rMbDCCi/f7Ziy+IIfNBDLhd0gktKmaIfjqPHZ\nL0WMVvDV3cBCHKd3AjYBPuRviUwjDlRfEteZ9WdT+8cV4l8WvwSKHyim7WrVUZ4J\nteLkf+qY3ZLy16pa1nUue2zcL+y7ac2FXwx37Jf6kVmhIuI6tNDzQkUlo3L2vLXq\nrMIwYPCpcBrcsoKXsz21Ulj/GL81mZlRe36kQV1O/AIdPqTTobJQVw07yN8SXTeI\nUNx+6y46Q/6sSlqv/KPkL8enF3TWd7oB/z69wQLKreCRS14p/QCuzzvRgzB+SVya\n1G/oQLdlTSGaqc/VZSgOgQNIzXlhnmvsgmZBAgMBAAGjUzBRMB0GA1UdDgQWBBTp\nKxeobKHGiDDo0fytyQc8lwiyTzAfBgNVHSMEGDAWgBTpKxeobKHGiDDo0fytyQc8\nlwiyTzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAhKxsiI5Xz\nH3isxJy4pD1FZ6rrU0gg/kFkWlsYgrw/Cqt53Nj6ValhpbA/VoftE80xEHfv4qR0\neiBkYVyULXZbojF9qRokVTXDY6lWzHdesbSt314IBBJR55aTw4IPHGikhMNeZ3M1\nffINONWhsL+ZwMaiLedThkRkPNzCvvRSNZiQXsdl/xV55JWqmmgfONCafx6/L8cI\nEZEISe0Z9uvVtO6G+mfX6nfGGVjJg6B53wSXaipDGxOh0vn1YiQzPxY+8ouXmfj6\nC/k2s4tlFwg7XEtz7wjSnVeiNP9EOK50WgVr4muWx1rhvOFhpxypONCCANJUILGk\n1JUZhXwcbcst\n-----END CERTIFICATE-----\n"]
  DIFFERENT date:
    0.9.105: 2024-12-28 00:00:00 UTC
    0.9.124: 1980-01-01 00:00:00 UTC
  DIFFERENT required_ruby_version:
    0.9.105: >= 2.5.0
    0.9.124: >= 2.7.0
  DIFFERENT rubygems_version:
    0.9.105: 3.5.22
    0.9.124: 4.0.3
  DIFFERENT version:
    0.9.105: 0.9.105
    0.9.124: 0.9.124
  DIFFERENT files:
    0.9.105->0.9.124:
      * Changed:
            README.md +16/-75
            certs/ianks.pem +19/-18
            exe/rb-sys-dock +44/-16
            lib/rb_sys/cargo_builder.rb +6/-6
            lib/rb_sys/error.rb +2/-2
            lib/rb_sys/mkmf.rb +19/-7
            lib/rb_sys/mkmf/config.rb +9/-5
            lib/rb_sys/toolchain_info/data.rb +1/-1
            lib/rb_sys/version.rb +1/-1
  DIFFERENT runtime dependencies:
    0.9.105->0.9.124:
      * Added:
            rake-compiler-dock ["= 1.11.0"] (runtime)

2 similar comments
@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare rb_sys 0.9.105 0.9.124

Compared versions: ["0.9.105", "0.9.124"]
  DIFFERENT cert_chain:
    0.9.105: ["-----BEGIN CERTIFICATE-----\nMIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRQwEgYDVQQDDAtpLmtl\ncnNleW1lcjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD\nY29tMB4XDTI0MDQxODA1MzY0N1oXDTI1MDQxODA1MzY0N1owQjEUMBIGA1UEAwwL\naS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk\nARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ2pG+er4cP\nPasxsMIKL9/tmLL4gh80EMuF3SCS0qZoh+Oo8dkvRYxW8NXdwEIcp3cCNgE+5G+J\nTCMOVF8S15n1Z1P7xxXiXxa/BIofKKbtatVRngm14uR/6pjdkvLXqlrWdS57bNwv\n7LtpzYVfDHfsl/qRWaEi4jq00PNCRSWjcva8teqswjBg8KlwGtyygpezPbVSWP8Y\nvzWZmVF7fqRBXU78Ah0+pNOhslBXDTvI3xJdN4hQ3H7rLjpD/qxKWq/8o+Qvx6cX\ndNZ3ugH/Pr3BAsqt4JFLXin9AK7PO9GDMH5JXJrUb+hAt2VNIZqpz9VlKA6BA0jN\neWGea+yCZkECAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O\nBBYEFOkrF6hsocaIMOjR/K3JBzyXCLJPMA0GCSqGSIb3DQEBCwUAA4IBAQARHgco\nyCxWUqN+HBGewmSB7T4oq6YS2FtU62K+GuWWCTqjl5byLKMXQW8HPDja9TC1My1m\n2r0uDshtUvUjuB/Vfe9jVMTjnPBspHZYo0MRuMPc7owJaahjkqD3l7w9aa8Ci5aC\nYU4Aj71Sc8s7YIxgHn/yIUdCe1yu6cC0+h+Ss9r/Yjr53NNXwjGQlDmH1eHcVQGZ\nmEoVcZO1uWNtRPPsn1gfvKLPjRe5pclXQnGviS5DiH0Du+8QMxQGBJnYz2zSMW7G\nLvd35BNvZkhFzs9xfykhurpkT2TiP2F3ZFn9dwLXMFe41pwrtEYLIWhYi8mUG4Ek\n6aR8M/tqIpChVV39\n-----END CERTIFICATE-----\n"]
    0.9.124: ["-----BEGIN CERTIFICATE-----\nMIIDZTCCAk2gAwIBAgIUBA3+R8/tEu+w03IWit3NPqhAv5EwDQYJKoZIhvcNAQEL\nBQAwQjEUMBIGA1UEAwwLaS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFp\nbDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNTA1MDcxOTA3NDNaFw0zNTA1MDUx\nOTA3NDNaMEIxFDASBgNVBAMMC2kua2Vyc2V5bWVyMRUwEwYKCZImiZPyLGQBGRYF\nZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQDCdqRvnq+HDz2rMbDCCi/f7Ziy+IIfNBDLhd0gktKmaIfjqPHZ\nL0WMVvDV3cBCHKd3AjYBPuRviUwjDlRfEteZ9WdT+8cV4l8WvwSKHyim7WrVUZ4J\nteLkf+qY3ZLy16pa1nUue2zcL+y7ac2FXwx37Jf6kVmhIuI6tNDzQkUlo3L2vLXq\nrMIwYPCpcBrcsoKXsz21Ulj/GL81mZlRe36kQV1O/AIdPqTTobJQVw07yN8SXTeI\nUNx+6y46Q/6sSlqv/KPkL8enF3TWd7oB/z69wQLKreCRS14p/QCuzzvRgzB+SVya\n1G/oQLdlTSGaqc/VZSgOgQNIzXlhnmvsgmZBAgMBAAGjUzBRMB0GA1UdDgQWBBTp\nKxeobKHGiDDo0fytyQc8lwiyTzAfBgNVHSMEGDAWgBTpKxeobKHGiDDo0fytyQc8\nlwiyTzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAhKxsiI5Xz\nH3isxJy4pD1FZ6rrU0gg/kFkWlsYgrw/Cqt53Nj6ValhpbA/VoftE80xEHfv4qR0\neiBkYVyULXZbojF9qRokVTXDY6lWzHdesbSt314IBBJR55aTw4IPHGikhMNeZ3M1\nffINONWhsL+ZwMaiLedThkRkPNzCvvRSNZiQXsdl/xV55JWqmmgfONCafx6/L8cI\nEZEISe0Z9uvVtO6G+mfX6nfGGVjJg6B53wSXaipDGxOh0vn1YiQzPxY+8ouXmfj6\nC/k2s4tlFwg7XEtz7wjSnVeiNP9EOK50WgVr4muWx1rhvOFhpxypONCCANJUILGk\n1JUZhXwcbcst\n-----END CERTIFICATE-----\n"]
  DIFFERENT date:
    0.9.105: 2024-12-28 00:00:00 UTC
    0.9.124: 1980-01-01 00:00:00 UTC
  DIFFERENT required_ruby_version:
    0.9.105: >= 2.5.0
    0.9.124: >= 2.7.0
  DIFFERENT rubygems_version:
    0.9.105: 3.5.22
    0.9.124: 4.0.3
  DIFFERENT version:
    0.9.105: 0.9.105
    0.9.124: 0.9.124
  DIFFERENT files:
    0.9.105->0.9.124:
      * Changed:
            README.md +16/-75
            certs/ianks.pem +19/-18
            exe/rb-sys-dock +44/-16
            lib/rb_sys/cargo_builder.rb +6/-6
            lib/rb_sys/error.rb +2/-2
            lib/rb_sys/mkmf.rb +19/-7
            lib/rb_sys/mkmf/config.rb +9/-5
            lib/rb_sys/toolchain_info/data.rb +1/-1
            lib/rb_sys/version.rb +1/-1
  DIFFERENT runtime dependencies:
    0.9.105->0.9.124:
      * Added:
            rake-compiler-dock ["= 1.11.0"] (runtime)

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare rb_sys 0.9.105 0.9.124

Compared versions: ["0.9.105", "0.9.124"]
  DIFFERENT cert_chain:
    0.9.105: ["-----BEGIN CERTIFICATE-----\nMIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRQwEgYDVQQDDAtpLmtl\ncnNleW1lcjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD\nY29tMB4XDTI0MDQxODA1MzY0N1oXDTI1MDQxODA1MzY0N1owQjEUMBIGA1UEAwwL\naS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk\nARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ2pG+er4cP\nPasxsMIKL9/tmLL4gh80EMuF3SCS0qZoh+Oo8dkvRYxW8NXdwEIcp3cCNgE+5G+J\nTCMOVF8S15n1Z1P7xxXiXxa/BIofKKbtatVRngm14uR/6pjdkvLXqlrWdS57bNwv\n7LtpzYVfDHfsl/qRWaEi4jq00PNCRSWjcva8teqswjBg8KlwGtyygpezPbVSWP8Y\nvzWZmVF7fqRBXU78Ah0+pNOhslBXDTvI3xJdN4hQ3H7rLjpD/qxKWq/8o+Qvx6cX\ndNZ3ugH/Pr3BAsqt4JFLXin9AK7PO9GDMH5JXJrUb+hAt2VNIZqpz9VlKA6BA0jN\neWGea+yCZkECAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O\nBBYEFOkrF6hsocaIMOjR/K3JBzyXCLJPMA0GCSqGSIb3DQEBCwUAA4IBAQARHgco\nyCxWUqN+HBGewmSB7T4oq6YS2FtU62K+GuWWCTqjl5byLKMXQW8HPDja9TC1My1m\n2r0uDshtUvUjuB/Vfe9jVMTjnPBspHZYo0MRuMPc7owJaahjkqD3l7w9aa8Ci5aC\nYU4Aj71Sc8s7YIxgHn/yIUdCe1yu6cC0+h+Ss9r/Yjr53NNXwjGQlDmH1eHcVQGZ\nmEoVcZO1uWNtRPPsn1gfvKLPjRe5pclXQnGviS5DiH0Du+8QMxQGBJnYz2zSMW7G\nLvd35BNvZkhFzs9xfykhurpkT2TiP2F3ZFn9dwLXMFe41pwrtEYLIWhYi8mUG4Ek\n6aR8M/tqIpChVV39\n-----END CERTIFICATE-----\n"]
    0.9.124: ["-----BEGIN CERTIFICATE-----\nMIIDZTCCAk2gAwIBAgIUBA3+R8/tEu+w03IWit3NPqhAv5EwDQYJKoZIhvcNAQEL\nBQAwQjEUMBIGA1UEAwwLaS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFp\nbDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNTA1MDcxOTA3NDNaFw0zNTA1MDUx\nOTA3NDNaMEIxFDASBgNVBAMMC2kua2Vyc2V5bWVyMRUwEwYKCZImiZPyLGQBGRYF\nZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQDCdqRvnq+HDz2rMbDCCi/f7Ziy+IIfNBDLhd0gktKmaIfjqPHZ\nL0WMVvDV3cBCHKd3AjYBPuRviUwjDlRfEteZ9WdT+8cV4l8WvwSKHyim7WrVUZ4J\nteLkf+qY3ZLy16pa1nUue2zcL+y7ac2FXwx37Jf6kVmhIuI6tNDzQkUlo3L2vLXq\nrMIwYPCpcBrcsoKXsz21Ulj/GL81mZlRe36kQV1O/AIdPqTTobJQVw07yN8SXTeI\nUNx+6y46Q/6sSlqv/KPkL8enF3TWd7oB/z69wQLKreCRS14p/QCuzzvRgzB+SVya\n1G/oQLdlTSGaqc/VZSgOgQNIzXlhnmvsgmZBAgMBAAGjUzBRMB0GA1UdDgQWBBTp\nKxeobKHGiDDo0fytyQc8lwiyTzAfBgNVHSMEGDAWgBTpKxeobKHGiDDo0fytyQc8\nlwiyTzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAhKxsiI5Xz\nH3isxJy4pD1FZ6rrU0gg/kFkWlsYgrw/Cqt53Nj6ValhpbA/VoftE80xEHfv4qR0\neiBkYVyULXZbojF9qRokVTXDY6lWzHdesbSt314IBBJR55aTw4IPHGikhMNeZ3M1\nffINONWhsL+ZwMaiLedThkRkPNzCvvRSNZiQXsdl/xV55JWqmmgfONCafx6/L8cI\nEZEISe0Z9uvVtO6G+mfX6nfGGVjJg6B53wSXaipDGxOh0vn1YiQzPxY+8ouXmfj6\nC/k2s4tlFwg7XEtz7wjSnVeiNP9EOK50WgVr4muWx1rhvOFhpxypONCCANJUILGk\n1JUZhXwcbcst\n-----END CERTIFICATE-----\n"]
  DIFFERENT date:
    0.9.105: 2024-12-28 00:00:00 UTC
    0.9.124: 1980-01-01 00:00:00 UTC
  DIFFERENT required_ruby_version:
    0.9.105: >= 2.5.0
    0.9.124: >= 2.7.0
  DIFFERENT rubygems_version:
    0.9.105: 3.5.22
    0.9.124: 4.0.3
  DIFFERENT version:
    0.9.105: 0.9.105
    0.9.124: 0.9.124
  DIFFERENT files:
    0.9.105->0.9.124:
      * Changed:
            README.md +16/-75
            certs/ianks.pem +19/-18
            exe/rb-sys-dock +44/-16
            lib/rb_sys/cargo_builder.rb +6/-6
            lib/rb_sys/error.rb +2/-2
            lib/rb_sys/mkmf.rb +19/-7
            lib/rb_sys/mkmf/config.rb +9/-5
            lib/rb_sys/toolchain_info/data.rb +1/-1
            lib/rb_sys/version.rb +1/-1
  DIFFERENT runtime dependencies:
    0.9.105->0.9.124:
      * Added:
            rake-compiler-dock ["= 1.11.0"] (runtime)

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff rb_sys 0.9.105 0.9.124

Compared versions: ["0.9.105", "0.9.124"]
  DIFFERENT files:
    0.9.105->0.9.124:
      * Changed:
        README.md
                --- /tmp/d20260107-761-ytq2r3/rb_sys-0.9.105/README.md	2026-01-07 03:02:12.836535899 +0000
                +++ /tmp/d20260107-761-ytq2r3/rb_sys-0.9.124/README.md	2026-01-07 03:02:12.838535914 +0000
                @@ -7,2 +7,2 @@
                -The `rb_sys` gem is a Ruby gem makes it easy to build native Ruby extensions in Rust. It interops with the existing Ruby
                -native extension toolchains (i.e. `rake-compiler`) to make testing, building, and cross compilation of gems easy.
                +The `rb_sys` gem makes it easy to build native Ruby extensions in Rust. It interoperates with existing Ruby native
                +extension toolchains (i.e. `rake-compiler`) to make testing, building, and cross-compilation of gems easy.
                @@ -10 +10 @@
                -## `RbSys::ExtensionTask`
                +## Documentation
                @@ -12,2 +12,8 @@
                -This gem provides a `RbSys::ExtensionTask` class that can be used to build a Ruby extension in Rust. It's a thin wrapper
                -around `Rake::ExtensionTask` that provides sane defaults for building Rust extensions.
                +For comprehensive documentation, please refer to the [Ruby on Rust Book](https://oxidize-rb.github.io/rb-sys/), which
                +includes:
                +
                +- [API Reference for rb_sys Gem Configuration](https://oxidize-rb.github.io/rb-sys/api-reference/rb-sys-gem-config.html)
                +- [The Build Process](https://oxidize-rb.github.io/rb-sys/build-process.html)
                +- [Cross-Platform Development](https://oxidize-rb.github.io/rb-sys/cross-platform.html)
                +
                +## Basic Usage
                @@ -17 +22,0 @@
                -
                @@ -24,3 +29 @@
                -
                -  # If you want to use `rb-sys-dock` for cross-compilation:
                -  ext.cross_compile = true
                +  ext.cross_compile = true  # For rb-sys-dock cross-compilation
                @@ -30,5 +32,0 @@
                -## `create_rust_makefile`
                -
                -This gem provides a simple helper to build a Ruby compatible Makefile for you Rust extension. For a full example, see
                -the [examples](./../examples) directory.
                -
                @@ -36,3 +34 @@
                -# ext/rust_reverse/extconf.rb
                -
                -# We need to require mkmf *first* this since `rake-compiler` injects code here for cross compilation
                +# ext/my_gem/extconf.rb
                @@ -42,27 +38 @@
                -create_rust_makefile("rust_reverse") do |r|
                -  # Create debug builds in dev. Make sure that release gems are compiled with
                -  # `RB_SYS_CARGO_PROFILE=release` (optional)
                -  r.profile = ENV.fetch("RB_SYS_CARGO_PROFILE", :dev).to_sym
                -
                -  # Can be overridden with `RB_SYS_CARGO_FEATURES` env var (optional)
                -  r.features = ["test-feature"]
                -
                -  # You can add whatever env vars you want to the env hash (optional)
                -  r.env = {"FOO" => "BAR"}
                -
                -  # If your Cargo.toml is in a different directory, you can specify it here (optional)
                -  r.ext_dir = "."
                -
                -  # Extra flags to pass to the $RUSTFLAGS environment variable (optional)
                -  r.extra_rustflags = ["--cfg=some_nested_config_var_for_crate"]
                -
                -  # Force a rust toolchain to be installed via rustup (optional)
                -  # You can also set the env var `RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN=true`
                -  r.force_install_rust_toolchain = "stable"
                -
                -  # Clean up the target/ dir after `gem install` to reduce bloat (optional)
                -  r.clean_after_install = false # default: true if invoked by rubygems
                -
                -  # Auto-install Rust toolchain if not present on "gem install" (optional)
                -  r.auto_install_rust_toolchain = false # default: true if invoked by rubygems
                -end
                +create_rust_makefile("my_gem")
                @@ -71,31 +41,2 @@
                -## Tips and Tricks
                -
                -- When using `rake-compiler` to build your gem, you can use the `RB_SYS_CARGO_PROFILE` environment variable to set the
                -  Cargo profile (i.e. `release` or `dev`).
                -
                -- You can pass Cargo arguments to `rake-compiler` like so: `rake compile -- --verbose`
                -
                -- It's possible to force an installation of a Rust toolchain by setting the `RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN`
                -  environment variable. This will install [rustup](https://rustup.rs/) and [cargo](https://crates.io/) in the build
                -  directory, so the end user does not have to have Rust pre-installed. Ideally, this should be a last resort, as it's
                -  better to already have the toolchain installed on your system.
                -
                -## Troubleshooting
                -
                -### Libclang issues
                -
                -If you see an error like this:
                -
                -```
                -thread 'main' panicked at 'Unable to find libclang: "couldn't find any valid shared libraries matching: \['libclang.so', 'libclang-*.so', 'libclang.so.*', 'libclang-*.so.*'\], set the `LIBCLANG_PATH` environment variable to a path where one of these files can be found (invalid: \[\])"'
                -```
                -
                -This means that bindgen is having issues finding a usable version of libclang. An easy way to fix this is to install the
                -[`libclang` gem](https://github.com/oxidize-rb/libclang-rb), which will install a pre-built version of libclang for you.
                -`rb_sys` will automatically detect this gem and use it.
                -
                -```ruby
                -# Gemfile
                -
                -gem "libclang", "~> 14.0.6"
                -```
                +For full configuration options and more advanced usage, see the
                +[rb_sys Gem Configuration](https://oxidize-rb.github.io/rb-sys/api-reference/rb-sys-gem-config.html) reference.
        certs/ianks.pem
                --- /tmp/d20260107-761-ytq2r3/rb_sys-0.9.105/certs/ianks.pem	2026-01-07 03:02:12.836535899 +0000
                +++ /tmp/d20260107-761-ytq2r3/rb_sys-0.9.124/certs/ianks.pem	2026-01-07 03:02:12.838535914 +0000
                @@ -2,18 +2,19 @@
                -MIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRQwEgYDVQQDDAtpLmtl
                -cnNleW1lcjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD
                -Y29tMB4XDTI0MDQxODA1MzY0N1oXDTI1MDQxODA1MzY0N1owQjEUMBIGA1UEAwwL
                -aS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
                -ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ2pG+er4cP
                -PasxsMIKL9/tmLL4gh80EMuF3SCS0qZoh+Oo8dkvRYxW8NXdwEIcp3cCNgE+5G+J
                -TCMOVF8S15n1Z1P7xxXiXxa/BIofKKbtatVRngm14uR/6pjdkvLXqlrWdS57bNwv
                -7LtpzYVfDHfsl/qRWaEi4jq00PNCRSWjcva8teqswjBg8KlwGtyygpezPbVSWP8Y
                -vzWZmVF7fqRBXU78Ah0+pNOhslBXDTvI3xJdN4hQ3H7rLjpD/qxKWq/8o+Qvx6cX
                -dNZ3ugH/Pr3BAsqt4JFLXin9AK7PO9GDMH5JXJrUb+hAt2VNIZqpz9VlKA6BA0jN
                -eWGea+yCZkECAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
                -BBYEFOkrF6hsocaIMOjR/K3JBzyXCLJPMA0GCSqGSIb3DQEBCwUAA4IBAQARHgco
                -yCxWUqN+HBGewmSB7T4oq6YS2FtU62K+GuWWCTqjl5byLKMXQW8HPDja9TC1My1m
                -2r0uDshtUvUjuB/Vfe9jVMTjnPBspHZYo0MRuMPc7owJaahjkqD3l7w9aa8Ci5aC
                -YU4Aj71Sc8s7YIxgHn/yIUdCe1yu6cC0+h+Ss9r/Yjr53NNXwjGQlDmH1eHcVQGZ
                -mEoVcZO1uWNtRPPsn1gfvKLPjRe5pclXQnGviS5DiH0Du+8QMxQGBJnYz2zSMW7G
                -Lvd35BNvZkhFzs9xfykhurpkT2TiP2F3ZFn9dwLXMFe41pwrtEYLIWhYi8mUG4Ek
                -6aR8M/tqIpChVV39
                +MIIDZTCCAk2gAwIBAgIUBA3+R8/tEu+w03IWit3NPqhAv5EwDQYJKoZIhvcNAQEL
                +BQAwQjEUMBIGA1UEAwwLaS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFp
                +bDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNTA1MDcxOTA3NDNaFw0zNTA1MDUx
                +OTA3NDNaMEIxFDASBgNVBAMMC2kua2Vyc2V5bWVyMRUwEwYKCZImiZPyLGQBGRYF
                +Z21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
                +DwAwggEKAoIBAQDCdqRvnq+HDz2rMbDCCi/f7Ziy+IIfNBDLhd0gktKmaIfjqPHZ
                +L0WMVvDV3cBCHKd3AjYBPuRviUwjDlRfEteZ9WdT+8cV4l8WvwSKHyim7WrVUZ4J
                +teLkf+qY3ZLy16pa1nUue2zcL+y7ac2FXwx37Jf6kVmhIuI6tNDzQkUlo3L2vLXq
                +rMIwYPCpcBrcsoKXsz21Ulj/GL81mZlRe36kQV1O/AIdPqTTobJQVw07yN8SXTeI
                +UNx+6y46Q/6sSlqv/KPkL8enF3TWd7oB/z69wQLKreCRS14p/QCuzzvRgzB+SVya
                +1G/oQLdlTSGaqc/VZSgOgQNIzXlhnmvsgmZBAgMBAAGjUzBRMB0GA1UdDgQWBBTp
                +KxeobKHGiDDo0fytyQc8lwiyTzAfBgNVHSMEGDAWgBTpKxeobKHGiDDo0fytyQc8
                +lwiyTzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAhKxsiI5Xz
                +H3isxJy4pD1FZ6rrU0gg/kFkWlsYgrw/Cqt53Nj6ValhpbA/VoftE80xEHfv4qR0
                +eiBkYVyULXZbojF9qRokVTXDY6lWzHdesbSt314IBBJR55aTw4IPHGikhMNeZ3M1
                +ffINONWhsL+ZwMaiLedThkRkPNzCvvRSNZiQXsdl/xV55JWqmmgfONCafx6/L8cI
                +EZEISe0Z9uvVtO6G+mfX6nfGGVjJg6B53wSXaipDGxOh0vn1YiQzPxY+8ouXmfj6
                +C/k2s4tlFwg7XEtz7wjSnVeiNP9EOK50WgVr4muWx1rhvOFhpxypONCCANJUILGk
                +1JUZhXwcbcst
        exe/rb-sys-dock
                --- /tmp/d20260107-761-ytq2r3/rb_sys-0.9.105/exe/rb-sys-dock	2026-01-07 03:02:12.836535899 +0000
                +++ /tmp/d20260107-761-ytq2r3/rb_sys-0.9.124/exe/rb-sys-dock	2026-01-07 03:02:12.839535922 +0000
                @@ -6,0 +7 @@
                +require "rake_compiler_dock"
                @@ -16 +17 @@
                -  version: RbSys::VERSION,
                +  version: ENV["RCD_IMAGE_VERSION"] || RbSys::VERSION,
                @@ -40,4 +41,6 @@
                -    logger.io = $stdout
                -    puts "- #{p.platform}"
                -  ensure
                -    logger.io = old
                +    begin
                +      logger.io = $stdout
                +      puts "- #{p.platform}"
                +    ensure
                +      logger.io = old
                +    end
                @@ -101,5 +104,8 @@
                -  opts.on("-r", "--ruby-versions LIST", "List all supported Ruby versions") do |arg|
                -    vers = arg.split(/[^0-9.]+/).map do |v|
                -      parts = v.split(".")
                -      parts[2] = "0" if parts[2].nil?
                -      parts.join(".")
                +  opts.on("-r", "--ruby-versions LIST", "Comma- or colon-separated Ruby requirements (e.g., '3.4,~> 3.1')") do |arg|
                +    requirements = arg.tr(":", ",").split(",").map(&:strip).reject(&:empty?)
                +
                +    begin
                +      resolved = RakeCompilerDock.ruby_cc_version(*requirements)
                +    rescue => error
                +      logger.error("Could not resolve requested Ruby versions: #{error.message}")
                +      exit(1)
                @@ -108 +114,3 @@
                -    OPTIONS[:ruby_versions] = vers
                +    resolved_versions = resolved.split(":")
                +    OPTIONS[:ruby_version_requirements] = requirements
                +    OPTIONS[:ruby_versions] = resolved_versions
                @@ -110 +118 @@
                -    logger.info("Building for Ruby requested versions: #{vers}")
                +    logger.info("Building for Ruby requested versions: #{resolved_versions.join(":")}")
                @@ -112 +120 @@
                -    ENV["RUBY_CC_VERSION"] = vers.join(":")
                +    RakeCompilerDock.set_ruby_cc_version(*requirements)
                @@ -118,0 +127 @@
                +    ENV["RCD_IMAGE_VERSION"] = tag
                @@ -362 +371 @@
                -  docker_options = []
                +  docker_options = ["--pid=host"]
                @@ -364,0 +374,2 @@
                +  ruby_versions = ENV["RUBY_CC_VERSION"] || RakeCompilerDock.cross_rubies.values.join(":")
                +
                @@ -386 +397,3 @@
                -      #{ENV["RUBY_CC_VERSION"] ? "-e RUBY_CC_VERSION=#{ENV["RUBY_CC_VERSION"]}" : ""} \
                +      -e RUBY_CC_VERSION="#{ruby_versions}" \
                +      -e RUBY_TARGET="#{OPTIONS.fetch(:platform)}" \
                +      -e SOURCE_DATE_EPOCH="#{source_date_epoch}" \
                @@ -404,0 +418,13 @@
                +def source_date_epoch
                +  return ENV["SOURCE_DATE_EPOCH"] if ENV.key?("SOURCE_DATE_EPOCH")
                +
                +  stdout, status = Open3.capture2("git log -1 --pretty=%ct")
                +
                +  if status.success?
                +    stdout.strip
                +  else
                +    logger.warn("Could not determine SOURCE_DATE_EPOCH from git log, using current time")
                +    Time.now.to_i.to_s
                +  end
                +end
                +
                @@ -426 +452,3 @@
                -  ENV["RCD_IMAGE"] ||= "rbsys/#{ruby_platform}:#{OPTIONS[:version]}"
                +  ENV["RCD_IMAGE_VERSION"] ||= OPTIONS[:version]
                +  version = ENV.fetch("RCD_IMAGE_VERSION")
                +  ENV["RCD_IMAGE"] ||= "rbsys/#{ruby_platform}:#{version}"
        lib/rb_sys/cargo_builder.rb
                --- /tmp/d20260107-761-ytq2r3/rb_sys-0.9.105/lib/rb_sys/cargo_builder.rb	2026-01-07 03:02:12.837535907 +0000
                +++ /tmp/d20260107-761-ytq2r3/rb_sys-0.9.124/lib/rb_sys/cargo_builder.rb	2026-01-07 03:02:12.840535930 +0000
                @@ -90 +90 @@
                -      prefix = so_ext == "dll" ? "" : "lib"
                +      prefix = (so_ext == "dll") ? "" : "lib"
                @@ -112,0 +113,4 @@
                +    def rubygems_invoked?
                +      ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1" && !ENV.key?("NIX_STORE")
                +    end
                +
                @@ -345,4 +348,0 @@
                -    def rubygems_invoked?
                -      ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1"
                -    end
                -
                @@ -358 +358 @@
                -        super <<~MSG
                +        super(<<~MSG)
        lib/rb_sys/error.rb
                --- /tmp/d20260107-761-ytq2r3/rb_sys-0.9.105/lib/rb_sys/error.rb	2026-01-07 03:02:12.837535907 +0000
                +++ /tmp/d20260107-761-ytq2r3/rb_sys-0.9.124/lib/rb_sys/error.rb	2026-01-07 03:02:12.840535930 +0000
                @@ -11,2 +11,2 @@
                -        Could not find Cargo package metadata for #{@name.inspect}. Please
                -        check that #{@name.inspect} matches the crate name in your
                +        Could not find Cargo package metadata for #{name.inspect}. Please
                +        check that #{name.inspect} matches the crate name in your
        lib/rb_sys/mkmf.rb
                --- /tmp/d20260107-761-ytq2r3/rb_sys-0.9.105/lib/rb_sys/mkmf.rb	2026-01-07 03:02:12.837535907 +0000
                +++ /tmp/d20260107-761-ytq2r3/rb_sys-0.9.124/lib/rb_sys/mkmf.rb	2026-01-07 03:02:12.840535930 +0000
                @@ -144 +144 @@
                -        gemclean:
                +        gemclean: install-so
                @@ -148 +148 @@
                -        install: #{builder.clean_after_install ? "install-so gemclean" : "install-so"}
                +        install: #{builder.clean_after_install ? "gemclean" : "install-so"}
                @@ -252,0 +253,3 @@
                +      rustup_default_cmd = "$(Q) $(CARGO_HOME)/bin/rustup default $(RB_SYS_DEFAULT_TOOLCHAIN)"
                +      rustup_toolchain_cmd = "$(Q) $(CARGO_HOME)/bin/rustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)"
                +
                @@ -263,2 +266,2 @@
                -        \t$(Q) $(CARGO_HOME)/bin/rustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)
                -        \t$(Q) $(CARGO_HOME)/bin/rustup default $(RB_SYS_DEFAULT_TOOLCHAIN)
                +        \t#{rustup_toolchain_cmd} || (sleep 5; #{rustup_toolchain_cmd}) || (sleep 5; #{rustup_toolchain_cmd})
                +        \t#{rustup_default_cmd} || (sleep 5; #{rustup_default_cmd}) || (sleep 5; #{rustup_default_cmd})
                @@ -286 +289,10 @@
                -      return unless find_executable("install_name_tool")
                +      # Try to find install_name_tool, checking multiple possible names:
                +      # 1. Native macOS install_name_tool
                +      # 2. Target-prefixed version from osxcross (e.g., aarch64-apple-darwin-install_name_tool)
                +      tool = if find_executable("install_name_tool")
                +        "install_name_tool"
                +      elsif find_executable("$(CARGO_BUILD_TARGET)-install_name_tool")
                +        "$(CARGO_BUILD_TARGET)-install_name_tool"
                +      else
                +        return
                +      end
                @@ -288 +300 @@
                -      '$(Q) install_name_tool -id "" $(DLLIB)'
                +      %($(Q) #{tool} -id "" $(DLLIB))
                @@ -329 +341 @@
                -        "#{"\t" * indent}#{export ? "export " : ""}#{a} ?= #{b}"
                +        "#{"\t" * indent}#{"export " if export}#{a} ?= #{b}"
        lib/rb_sys/mkmf/config.rb
                --- /tmp/d20260107-761-ytq2r3/rb_sys-0.9.105/lib/rb_sys/mkmf/config.rb	2026-01-07 03:02:12.837535907 +0000
                +++ /tmp/d20260107-761-ytq2r3/rb_sys-0.9.124/lib/rb_sys/mkmf/config.rb	2026-01-07 03:02:12.840535930 +0000
                @@ -58,4 +58,8 @@
                -      # Seems to be the only way to reliably know if we were invoked by Rubygems.
                -      # We want to know this so we can cleanup the target directory after an
                -      # install, to remove bloat.
                -      # @api private
                +      # Unfortunate, but this seems to be the only way to reliably know if we
                +      # were invoked by Rubygems. We want to know this so we can cleanup the
                +      # target directory after an install, to remove bloat.
                +      #
                +      # Note: we avoid nix environments so we do not force recompilation in
                +      # development, and accept that the "clean" task will not automatically
                +      # run.
                +      #
                @@ -63 +67 @@
                -        ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1"
                +        ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1" && !ENV.key?("NIX_STORE")
        lib/rb_sys/toolchain_info/data.rb
                --- /tmp/d20260107-761-ytq2r3/rb_sys-0.9.105/lib/rb_sys/toolchain_info/data.rb	2026-01-07 03:02:12.837535907 +0000
                +++ /tmp/d20260107-761-ytq2r3/rb_sys-0.9.124/lib/rb_sys/toolchain_info/data.rb	2026-01-07 03:02:12.841535937 +0000
                @@ -8 +8 @@
                -    DATA = {"arm-linux" => {"rust-target" => "arm-unknown-linux-gnueabihf", "rake-compiler-dock" => {"cc" => "arm-linux-gnueabihf-gcc"}, "docker-platform" => "linux/arm/v7", "supported" => true}, "aarch64-linux" => {"rust-target" => "aarch64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "aarch64-linux-gnu-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "aarch64-linux-musl" => {"rust-target" => "aarch64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "aarch64-linux-musl-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "arm64-darwin" => {"rust-target" => "aarch64-apple-darwin", "rake-compiler-dock" => {"cc" => "aarch64-apple-darwin-clang"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "x64-mingw-ucrt" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x64-mingw32" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86-linux" => {"rust-target" => "i686-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "i686-redhat-linux-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86-mingw32" => {"rust-target" => "i686-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "i686-w64-mingw32-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86_64-darwin" => {"rust-target" => "x86_64-apple-darwin", "rake-compiler-dock" => {"cc" => "x86_64-apple-darwin-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux" => {"rust-target" => "x86_64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "x86_64-redhat-linux-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux-musl" => {"rust-target" => "x86_64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "x86_64-unknown-linux-musl-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}}
                +    DATA = {"arm-linux" => {"rust-target" => "arm-unknown-linux-gnueabihf", "rake-compiler-dock" => {"cc" => "arm-linux-gnueabihf-gcc"}, "docker-platform" => "linux/arm/v7", "supported" => true}, "aarch64-linux" => {"aliases" => ["aarch64-linux-gnu", "aarch64-unknown-linux-gnu"], "rust-target" => "aarch64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "aarch64-linux-gnu-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "aarch64-linux-musl" => {"rust-target" => "aarch64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "aarch64-linux-musl-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "arm64-darwin" => {"rust-target" => "aarch64-apple-darwin", "rake-compiler-dock" => {"cc" => "aarch64-apple-darwin-clang"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "x64-mingw-ucrt" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "aarch64-mingw-ucrt" => {"rust-target" => "aarch64-pc-windows-gnullvm", "rake-compiler-dock" => {"cc" => "aarch64-w64-mingw32-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x64-mingw32" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86-linux" => {"rust-target" => "i686-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "i686-redhat-linux-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86-mingw32" => {"rust-target" => "i686-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "i686-w64-mingw32-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86_64-darwin" => {"rust-target" => "x86_64-apple-darwin", "rake-compiler-dock" => {"cc" => "x86_64-apple-darwin-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux" => {"aliases" => ["x86_64-linux-gnu", "x86_64-unknown-linux-gnu"], "rust-target" => "x86_64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "x86_64-redhat-linux-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux-musl" => {"rust-target" => "x86_64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "x86_64-unknown-linux-musl-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}}
        lib/rb_sys/version.rb
                --- /tmp/d20260107-761-ytq2r3/rb_sys-0.9.105/lib/rb_sys/version.rb	2026-01-07 03:02:12.838535914 +0000
                +++ /tmp/d20260107-761-ytq2r3/rb_sys-0.9.124/lib/rb_sys/version.rb	2026-01-07 03:02:12.841535937 +0000
                @@ -4 +4 @@
                -  VERSION = "0.9.105"
                +  VERSION = "0.9.124"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff rb_sys 0.9.105 0.9.124

Compared versions: ["0.9.105", "0.9.124"]
  DIFFERENT files:
    0.9.105->0.9.124:
      * Changed:
        README.md
                --- /tmp/d20260107-746-zkvd6x/rb_sys-0.9.105/README.md	2026-01-07 03:02:13.798495727 +0000
                +++ /tmp/d20260107-746-zkvd6x/rb_sys-0.9.124/README.md	2026-01-07 03:02:13.800495736 +0000
                @@ -7,2 +7,2 @@
                -The `rb_sys` gem is a Ruby gem makes it easy to build native Ruby extensions in Rust. It interops with the existing Ruby
                -native extension toolchains (i.e. `rake-compiler`) to make testing, building, and cross compilation of gems easy.
                +The `rb_sys` gem makes it easy to build native Ruby extensions in Rust. It interoperates with existing Ruby native
                +extension toolchains (i.e. `rake-compiler`) to make testing, building, and cross-compilation of gems easy.
                @@ -10 +10 @@
                -## `RbSys::ExtensionTask`
                +## Documentation
                @@ -12,2 +12,8 @@
                -This gem provides a `RbSys::ExtensionTask` class that can be used to build a Ruby extension in Rust. It's a thin wrapper
                -around `Rake::ExtensionTask` that provides sane defaults for building Rust extensions.
                +For comprehensive documentation, please refer to the [Ruby on Rust Book](https://oxidize-rb.github.io/rb-sys/), which
                +includes:
                +
                +- [API Reference for rb_sys Gem Configuration](https://oxidize-rb.github.io/rb-sys/api-reference/rb-sys-gem-config.html)
                +- [The Build Process](https://oxidize-rb.github.io/rb-sys/build-process.html)
                +- [Cross-Platform Development](https://oxidize-rb.github.io/rb-sys/cross-platform.html)
                +
                +## Basic Usage
                @@ -17 +22,0 @@
                -
                @@ -24,3 +29 @@
                -
                -  # If you want to use `rb-sys-dock` for cross-compilation:
                -  ext.cross_compile = true
                +  ext.cross_compile = true  # For rb-sys-dock cross-compilation
                @@ -30,5 +32,0 @@
                -## `create_rust_makefile`
                -
                -This gem provides a simple helper to build a Ruby compatible Makefile for you Rust extension. For a full example, see
                -the [examples](./../examples) directory.
                -
                @@ -36,3 +34 @@
                -# ext/rust_reverse/extconf.rb
                -
                -# We need to require mkmf *first* this since `rake-compiler` injects code here for cross compilation
                +# ext/my_gem/extconf.rb
                @@ -42,27 +38 @@
                -create_rust_makefile("rust_reverse") do |r|
                -  # Create debug builds in dev. Make sure that release gems are compiled with
                -  # `RB_SYS_CARGO_PROFILE=release` (optional)
                -  r.profile = ENV.fetch("RB_SYS_CARGO_PROFILE", :dev).to_sym
                -
                -  # Can be overridden with `RB_SYS_CARGO_FEATURES` env var (optional)
                -  r.features = ["test-feature"]
                -
                -  # You can add whatever env vars you want to the env hash (optional)
                -  r.env = {"FOO" => "BAR"}
                -
                -  # If your Cargo.toml is in a different directory, you can specify it here (optional)
                -  r.ext_dir = "."
                -
                -  # Extra flags to pass to the $RUSTFLAGS environment variable (optional)
                -  r.extra_rustflags = ["--cfg=some_nested_config_var_for_crate"]
                -
                -  # Force a rust toolchain to be installed via rustup (optional)
                -  # You can also set the env var `RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN=true`
                -  r.force_install_rust_toolchain = "stable"
                -
                -  # Clean up the target/ dir after `gem install` to reduce bloat (optional)
                -  r.clean_after_install = false # default: true if invoked by rubygems
                -
                -  # Auto-install Rust toolchain if not present on "gem install" (optional)
                -  r.auto_install_rust_toolchain = false # default: true if invoked by rubygems
                -end
                +create_rust_makefile("my_gem")
                @@ -71,31 +41,2 @@
                -## Tips and Tricks
                -
                -- When using `rake-compiler` to build your gem, you can use the `RB_SYS_CARGO_PROFILE` environment variable to set the
                -  Cargo profile (i.e. `release` or `dev`).
                -
                -- You can pass Cargo arguments to `rake-compiler` like so: `rake compile -- --verbose`
                -
                -- It's possible to force an installation of a Rust toolchain by setting the `RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN`
                -  environment variable. This will install [rustup](https://rustup.rs/) and [cargo](https://crates.io/) in the build
                -  directory, so the end user does not have to have Rust pre-installed. Ideally, this should be a last resort, as it's
                -  better to already have the toolchain installed on your system.
                -
                -## Troubleshooting
                -
                -### Libclang issues
                -
                -If you see an error like this:
                -
                -```
                -thread 'main' panicked at 'Unable to find libclang: "couldn't find any valid shared libraries matching: \['libclang.so', 'libclang-*.so', 'libclang.so.*', 'libclang-*.so.*'\], set the `LIBCLANG_PATH` environment variable to a path where one of these files can be found (invalid: \[\])"'
                -```
                -
                -This means that bindgen is having issues finding a usable version of libclang. An easy way to fix this is to install the
                -[`libclang` gem](https://github.com/oxidize-rb/libclang-rb), which will install a pre-built version of libclang for you.
                -`rb_sys` will automatically detect this gem and use it.
                -
                -```ruby
                -# Gemfile
                -
                -gem "libclang", "~> 14.0.6"
                -```
                +For full configuration options and more advanced usage, see the
                +[rb_sys Gem Configuration](https://oxidize-rb.github.io/rb-sys/api-reference/rb-sys-gem-config.html) reference.
        certs/ianks.pem
                --- /tmp/d20260107-746-zkvd6x/rb_sys-0.9.105/certs/ianks.pem	2026-01-07 03:02:13.798495727 +0000
                +++ /tmp/d20260107-746-zkvd6x/rb_sys-0.9.124/certs/ianks.pem	2026-01-07 03:02:13.800495736 +0000
                @@ -2,18 +2,19 @@
                -MIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRQwEgYDVQQDDAtpLmtl
                -cnNleW1lcjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD
                -Y29tMB4XDTI0MDQxODA1MzY0N1oXDTI1MDQxODA1MzY0N1owQjEUMBIGA1UEAwwL
                -aS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
                -ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ2pG+er4cP
                -PasxsMIKL9/tmLL4gh80EMuF3SCS0qZoh+Oo8dkvRYxW8NXdwEIcp3cCNgE+5G+J
                -TCMOVF8S15n1Z1P7xxXiXxa/BIofKKbtatVRngm14uR/6pjdkvLXqlrWdS57bNwv
                -7LtpzYVfDHfsl/qRWaEi4jq00PNCRSWjcva8teqswjBg8KlwGtyygpezPbVSWP8Y
                -vzWZmVF7fqRBXU78Ah0+pNOhslBXDTvI3xJdN4hQ3H7rLjpD/qxKWq/8o+Qvx6cX
                -dNZ3ugH/Pr3BAsqt4JFLXin9AK7PO9GDMH5JXJrUb+hAt2VNIZqpz9VlKA6BA0jN
                -eWGea+yCZkECAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
                -BBYEFOkrF6hsocaIMOjR/K3JBzyXCLJPMA0GCSqGSIb3DQEBCwUAA4IBAQARHgco
                -yCxWUqN+HBGewmSB7T4oq6YS2FtU62K+GuWWCTqjl5byLKMXQW8HPDja9TC1My1m
                -2r0uDshtUvUjuB/Vfe9jVMTjnPBspHZYo0MRuMPc7owJaahjkqD3l7w9aa8Ci5aC
                -YU4Aj71Sc8s7YIxgHn/yIUdCe1yu6cC0+h+Ss9r/Yjr53NNXwjGQlDmH1eHcVQGZ
                -mEoVcZO1uWNtRPPsn1gfvKLPjRe5pclXQnGviS5DiH0Du+8QMxQGBJnYz2zSMW7G
                -Lvd35BNvZkhFzs9xfykhurpkT2TiP2F3ZFn9dwLXMFe41pwrtEYLIWhYi8mUG4Ek
                -6aR8M/tqIpChVV39
                +MIIDZTCCAk2gAwIBAgIUBA3+R8/tEu+w03IWit3NPqhAv5EwDQYJKoZIhvcNAQEL
                +BQAwQjEUMBIGA1UEAwwLaS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFp
                +bDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNTA1MDcxOTA3NDNaFw0zNTA1MDUx
                +OTA3NDNaMEIxFDASBgNVBAMMC2kua2Vyc2V5bWVyMRUwEwYKCZImiZPyLGQBGRYF
                +Z21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
                +DwAwggEKAoIBAQDCdqRvnq+HDz2rMbDCCi/f7Ziy+IIfNBDLhd0gktKmaIfjqPHZ
                +L0WMVvDV3cBCHKd3AjYBPuRviUwjDlRfEteZ9WdT+8cV4l8WvwSKHyim7WrVUZ4J
                +teLkf+qY3ZLy16pa1nUue2zcL+y7ac2FXwx37Jf6kVmhIuI6tNDzQkUlo3L2vLXq
                +rMIwYPCpcBrcsoKXsz21Ulj/GL81mZlRe36kQV1O/AIdPqTTobJQVw07yN8SXTeI
                +UNx+6y46Q/6sSlqv/KPkL8enF3TWd7oB/z69wQLKreCRS14p/QCuzzvRgzB+SVya
                +1G/oQLdlTSGaqc/VZSgOgQNIzXlhnmvsgmZBAgMBAAGjUzBRMB0GA1UdDgQWBBTp
                +KxeobKHGiDDo0fytyQc8lwiyTzAfBgNVHSMEGDAWgBTpKxeobKHGiDDo0fytyQc8
                +lwiyTzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAhKxsiI5Xz
                +H3isxJy4pD1FZ6rrU0gg/kFkWlsYgrw/Cqt53Nj6ValhpbA/VoftE80xEHfv4qR0
                +eiBkYVyULXZbojF9qRokVTXDY6lWzHdesbSt314IBBJR55aTw4IPHGikhMNeZ3M1
                +ffINONWhsL+ZwMaiLedThkRkPNzCvvRSNZiQXsdl/xV55JWqmmgfONCafx6/L8cI
                +EZEISe0Z9uvVtO6G+mfX6nfGGVjJg6B53wSXaipDGxOh0vn1YiQzPxY+8ouXmfj6
                +C/k2s4tlFwg7XEtz7wjSnVeiNP9EOK50WgVr4muWx1rhvOFhpxypONCCANJUILGk
                +1JUZhXwcbcst
        exe/rb-sys-dock
                --- /tmp/d20260107-746-zkvd6x/rb_sys-0.9.105/exe/rb-sys-dock	2026-01-07 03:02:13.798495727 +0000
                +++ /tmp/d20260107-746-zkvd6x/rb_sys-0.9.124/exe/rb-sys-dock	2026-01-07 03:02:13.801495740 +0000
                @@ -6,0 +7 @@
                +require "rake_compiler_dock"
                @@ -16 +17 @@
                -  version: RbSys::VERSION,
                +  version: ENV["RCD_IMAGE_VERSION"] || RbSys::VERSION,
                @@ -40,4 +41,6 @@
                -    logger.io = $stdout
                -    puts "- #{p.platform}"
                -  ensure
                -    logger.io = old
                +    begin
                +      logger.io = $stdout
                +      puts "- #{p.platform}"
                +    ensure
                +      logger.io = old
                +    end
                @@ -101,5 +104,8 @@
                -  opts.on("-r", "--ruby-versions LIST", "List all supported Ruby versions") do |arg|
                -    vers = arg.split(/[^0-9.]+/).map do |v|
                -      parts = v.split(".")
                -      parts[2] = "0" if parts[2].nil?
                -      parts.join(".")
                +  opts.on("-r", "--ruby-versions LIST", "Comma- or colon-separated Ruby requirements (e.g., '3.4,~> 3.1')") do |arg|
                +    requirements = arg.tr(":", ",").split(",").map(&:strip).reject(&:empty?)
                +
                +    begin
                +      resolved = RakeCompilerDock.ruby_cc_version(*requirements)
                +    rescue => error
                +      logger.error("Could not resolve requested Ruby versions: #{error.message}")
                +      exit(1)
                @@ -108 +114,3 @@
                -    OPTIONS[:ruby_versions] = vers
                +    resolved_versions = resolved.split(":")
                +    OPTIONS[:ruby_version_requirements] = requirements
                +    OPTIONS[:ruby_versions] = resolved_versions
                @@ -110 +118 @@
                -    logger.info("Building for Ruby requested versions: #{vers}")
                +    logger.info("Building for Ruby requested versions: #{resolved_versions.join(":")}")
                @@ -112 +120 @@
                -    ENV["RUBY_CC_VERSION"] = vers.join(":")
                +    RakeCompilerDock.set_ruby_cc_version(*requirements)
                @@ -118,0 +127 @@
                +    ENV["RCD_IMAGE_VERSION"] = tag
                @@ -362 +371 @@
                -  docker_options = []
                +  docker_options = ["--pid=host"]
                @@ -364,0 +374,2 @@
                +  ruby_versions = ENV["RUBY_CC_VERSION"] || RakeCompilerDock.cross_rubies.values.join(":")
                +
                @@ -386 +397,3 @@
                -      #{ENV["RUBY_CC_VERSION"] ? "-e RUBY_CC_VERSION=#{ENV["RUBY_CC_VERSION"]}" : ""} \
                +      -e RUBY_CC_VERSION="#{ruby_versions}" \
                +      -e RUBY_TARGET="#{OPTIONS.fetch(:platform)}" \
                +      -e SOURCE_DATE_EPOCH="#{source_date_epoch}" \
                @@ -404,0 +418,13 @@
                +def source_date_epoch
                +  return ENV["SOURCE_DATE_EPOCH"] if ENV.key?("SOURCE_DATE_EPOCH")
                +
                +  stdout, status = Open3.capture2("git log -1 --pretty=%ct")
                +
                +  if status.success?
                +    stdout.strip
                +  else
                +    logger.warn("Could not determine SOURCE_DATE_EPOCH from git log, using current time")
                +    Time.now.to_i.to_s
                +  end
                +end
                +
                @@ -426 +452,3 @@
                -  ENV["RCD_IMAGE"] ||= "rbsys/#{ruby_platform}:#{OPTIONS[:version]}"
                +  ENV["RCD_IMAGE_VERSION"] ||= OPTIONS[:version]
                +  version = ENV.fetch("RCD_IMAGE_VERSION")
                +  ENV["RCD_IMAGE"] ||= "rbsys/#{ruby_platform}:#{version}"
        lib/rb_sys/cargo_builder.rb
                --- /tmp/d20260107-746-zkvd6x/rb_sys-0.9.105/lib/rb_sys/cargo_builder.rb	2026-01-07 03:02:13.799495731 +0000
                +++ /tmp/d20260107-746-zkvd6x/rb_sys-0.9.124/lib/rb_sys/cargo_builder.rb	2026-01-07 03:02:13.802495744 +0000
                @@ -90 +90 @@
                -      prefix = so_ext == "dll" ? "" : "lib"
                +      prefix = (so_ext == "dll") ? "" : "lib"
                @@ -112,0 +113,4 @@
                +    def rubygems_invoked?
                +      ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1" && !ENV.key?("NIX_STORE")
                +    end
                +
                @@ -345,4 +348,0 @@
                -    def rubygems_invoked?
                -      ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1"
                -    end
                -
                @@ -358 +358 @@
                -        super <<~MSG
                +        super(<<~MSG)
        lib/rb_sys/error.rb
                --- /tmp/d20260107-746-zkvd6x/rb_sys-0.9.105/lib/rb_sys/error.rb	2026-01-07 03:02:13.799495731 +0000
                +++ /tmp/d20260107-746-zkvd6x/rb_sys-0.9.124/lib/rb_sys/error.rb	2026-01-07 03:02:13.802495744 +0000
                @@ -11,2 +11,2 @@
                -        Could not find Cargo package metadata for #{@name.inspect}. Please
                -        check that #{@name.inspect} matches the crate name in your
                +        Could not find Cargo package metadata for #{name.inspect}. Please
                +        check that #{name.inspect} matches the crate name in your
        lib/rb_sys/mkmf.rb
                --- /tmp/d20260107-746-zkvd6x/rb_sys-0.9.105/lib/rb_sys/mkmf.rb	2026-01-07 03:02:13.799495731 +0000
                +++ /tmp/d20260107-746-zkvd6x/rb_sys-0.9.124/lib/rb_sys/mkmf.rb	2026-01-07 03:02:13.803495749 +0000
                @@ -144 +144 @@
                -        gemclean:
                +        gemclean: install-so
                @@ -148 +148 @@
                -        install: #{builder.clean_after_install ? "install-so gemclean" : "install-so"}
                +        install: #{builder.clean_after_install ? "gemclean" : "install-so"}
                @@ -252,0 +253,3 @@
                +      rustup_default_cmd = "$(Q) $(CARGO_HOME)/bin/rustup default $(RB_SYS_DEFAULT_TOOLCHAIN)"
                +      rustup_toolchain_cmd = "$(Q) $(CARGO_HOME)/bin/rustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)"
                +
                @@ -263,2 +266,2 @@
                -        \t$(Q) $(CARGO_HOME)/bin/rustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)
                -        \t$(Q) $(CARGO_HOME)/bin/rustup default $(RB_SYS_DEFAULT_TOOLCHAIN)
                +        \t#{rustup_toolchain_cmd} || (sleep 5; #{rustup_toolchain_cmd}) || (sleep 5; #{rustup_toolchain_cmd})
                +        \t#{rustup_default_cmd} || (sleep 5; #{rustup_default_cmd}) || (sleep 5; #{rustup_default_cmd})
                @@ -286 +289,10 @@
                -      return unless find_executable("install_name_tool")
                +      # Try to find install_name_tool, checking multiple possible names:
                +      # 1. Native macOS install_name_tool
                +      # 2. Target-prefixed version from osxcross (e.g., aarch64-apple-darwin-install_name_tool)
                +      tool = if find_executable("install_name_tool")
                +        "install_name_tool"
                +      elsif find_executable("$(CARGO_BUILD_TARGET)-install_name_tool")
                +        "$(CARGO_BUILD_TARGET)-install_name_tool"
                +      else
                +        return
                +      end
                @@ -288 +300 @@
                -      '$(Q) install_name_tool -id "" $(DLLIB)'
                +      %($(Q) #{tool} -id "" $(DLLIB))
                @@ -329 +341 @@
                -        "#{"\t" * indent}#{export ? "export " : ""}#{a} ?= #{b}"
                +        "#{"\t" * indent}#{"export " if export}#{a} ?= #{b}"
        lib/rb_sys/mkmf/config.rb
                --- /tmp/d20260107-746-zkvd6x/rb_sys-0.9.105/lib/rb_sys/mkmf/config.rb	2026-01-07 03:02:13.799495731 +0000
                +++ /tmp/d20260107-746-zkvd6x/rb_sys-0.9.124/lib/rb_sys/mkmf/config.rb	2026-01-07 03:02:13.803495749 +0000
                @@ -58,4 +58,8 @@
                -      # Seems to be the only way to reliably know if we were invoked by Rubygems.
                -      # We want to know this so we can cleanup the target directory after an
                -      # install, to remove bloat.
                -      # @api private
                +      # Unfortunate, but this seems to be the only way to reliably know if we
                +      # were invoked by Rubygems. We want to know this so we can cleanup the
                +      # target directory after an install, to remove bloat.
                +      #
                +      # Note: we avoid nix environments so we do not force recompilation in
                +      # development, and accept that the "clean" task will not automatically
                +      # run.
                +      #
                @@ -63 +67 @@
                -        ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1"
                +        ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1" && !ENV.key?("NIX_STORE")
        lib/rb_sys/toolchain_info/data.rb
                --- /tmp/d20260107-746-zkvd6x/rb_sys-0.9.105/lib/rb_sys/toolchain_info/data.rb	2026-01-07 03:02:13.799495731 +0000
                +++ /tmp/d20260107-746-zkvd6x/rb_sys-0.9.124/lib/rb_sys/toolchain_info/data.rb	2026-01-07 03:02:13.803495749 +0000
                @@ -8 +8 @@
                -    DATA = {"arm-linux" => {"rust-target" => "arm-unknown-linux-gnueabihf", "rake-compiler-dock" => {"cc" => "arm-linux-gnueabihf-gcc"}, "docker-platform" => "linux/arm/v7", "supported" => true}, "aarch64-linux" => {"rust-target" => "aarch64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "aarch64-linux-gnu-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "aarch64-linux-musl" => {"rust-target" => "aarch64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "aarch64-linux-musl-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "arm64-darwin" => {"rust-target" => "aarch64-apple-darwin", "rake-compiler-dock" => {"cc" => "aarch64-apple-darwin-clang"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "x64-mingw-ucrt" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x64-mingw32" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86-linux" => {"rust-target" => "i686-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "i686-redhat-linux-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86-mingw32" => {"rust-target" => "i686-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "i686-w64-mingw32-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86_64-darwin" => {"rust-target" => "x86_64-apple-darwin", "rake-compiler-dock" => {"cc" => "x86_64-apple-darwin-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux" => {"rust-target" => "x86_64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "x86_64-redhat-linux-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux-musl" => {"rust-target" => "x86_64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "x86_64-unknown-linux-musl-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}}
                +    DATA = {"arm-linux" => {"rust-target" => "arm-unknown-linux-gnueabihf", "rake-compiler-dock" => {"cc" => "arm-linux-gnueabihf-gcc"}, "docker-platform" => "linux/arm/v7", "supported" => true}, "aarch64-linux" => {"aliases" => ["aarch64-linux-gnu", "aarch64-unknown-linux-gnu"], "rust-target" => "aarch64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "aarch64-linux-gnu-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "aarch64-linux-musl" => {"rust-target" => "aarch64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "aarch64-linux-musl-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "arm64-darwin" => {"rust-target" => "aarch64-apple-darwin", "rake-compiler-dock" => {"cc" => "aarch64-apple-darwin-clang"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "x64-mingw-ucrt" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "aarch64-mingw-ucrt" => {"rust-target" => "aarch64-pc-windows-gnullvm", "rake-compiler-dock" => {"cc" => "aarch64-w64-mingw32-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x64-mingw32" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86-linux" => {"rust-target" => "i686-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "i686-redhat-linux-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86-mingw32" => {"rust-target" => "i686-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "i686-w64-mingw32-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86_64-darwin" => {"rust-target" => "x86_64-apple-darwin", "rake-compiler-dock" => {"cc" => "x86_64-apple-darwin-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux" => {"aliases" => ["x86_64-linux-gnu", "x86_64-unknown-linux-gnu"], "rust-target" => "x86_64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "x86_64-redhat-linux-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux-musl" => {"rust-target" => "x86_64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "x86_64-unknown-linux-musl-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}}
        lib/rb_sys/version.rb
                --- /tmp/d20260107-746-zkvd6x/rb_sys-0.9.105/lib/rb_sys/version.rb	2026-01-07 03:02:13.800495736 +0000
                +++ /tmp/d20260107-746-zkvd6x/rb_sys-0.9.124/lib/rb_sys/version.rb	2026-01-07 03:02:13.803495749 +0000
                @@ -4 +4 @@
                -  VERSION = "0.9.105"
                +  VERSION = "0.9.124"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff rb_sys 0.9.105 0.9.124

Compared versions: ["0.9.105", "0.9.124"]
  DIFFERENT files:
    0.9.105->0.9.124:
      * Changed:
        README.md
                --- /tmp/d20260107-760-4br8tq/rb_sys-0.9.105/README.md	2026-01-07 03:02:17.277913321 +0000
                +++ /tmp/d20260107-760-4br8tq/rb_sys-0.9.124/README.md	2026-01-07 03:02:17.282913408 +0000
                @@ -7,2 +7,2 @@
                -The `rb_sys` gem is a Ruby gem makes it easy to build native Ruby extensions in Rust. It interops with the existing Ruby
                -native extension toolchains (i.e. `rake-compiler`) to make testing, building, and cross compilation of gems easy.
                +The `rb_sys` gem makes it easy to build native Ruby extensions in Rust. It interoperates with existing Ruby native
                +extension toolchains (i.e. `rake-compiler`) to make testing, building, and cross-compilation of gems easy.
                @@ -10 +10 @@
                -## `RbSys::ExtensionTask`
                +## Documentation
                @@ -12,2 +12,8 @@
                -This gem provides a `RbSys::ExtensionTask` class that can be used to build a Ruby extension in Rust. It's a thin wrapper
                -around `Rake::ExtensionTask` that provides sane defaults for building Rust extensions.
                +For comprehensive documentation, please refer to the [Ruby on Rust Book](https://oxidize-rb.github.io/rb-sys/), which
                +includes:
                +
                +- [API Reference for rb_sys Gem Configuration](https://oxidize-rb.github.io/rb-sys/api-reference/rb-sys-gem-config.html)
                +- [The Build Process](https://oxidize-rb.github.io/rb-sys/build-process.html)
                +- [Cross-Platform Development](https://oxidize-rb.github.io/rb-sys/cross-platform.html)
                +
                +## Basic Usage
                @@ -17 +22,0 @@
                -
                @@ -24,3 +29 @@
                -
                -  # If you want to use `rb-sys-dock` for cross-compilation:
                -  ext.cross_compile = true
                +  ext.cross_compile = true  # For rb-sys-dock cross-compilation
                @@ -30,5 +32,0 @@
                -## `create_rust_makefile`
                -
                -This gem provides a simple helper to build a Ruby compatible Makefile for you Rust extension. For a full example, see
                -the [examples](./../examples) directory.
                -
                @@ -36,3 +34 @@
                -# ext/rust_reverse/extconf.rb
                -
                -# We need to require mkmf *first* this since `rake-compiler` injects code here for cross compilation
                +# ext/my_gem/extconf.rb
                @@ -42,27 +38 @@
                -create_rust_makefile("rust_reverse") do |r|
                -  # Create debug builds in dev. Make sure that release gems are compiled with
                -  # `RB_SYS_CARGO_PROFILE=release` (optional)
                -  r.profile = ENV.fetch("RB_SYS_CARGO_PROFILE", :dev).to_sym
                -
                -  # Can be overridden with `RB_SYS_CARGO_FEATURES` env var (optional)
                -  r.features = ["test-feature"]
                -
                -  # You can add whatever env vars you want to the env hash (optional)
                -  r.env = {"FOO" => "BAR"}
                -
                -  # If your Cargo.toml is in a different directory, you can specify it here (optional)
                -  r.ext_dir = "."
                -
                -  # Extra flags to pass to the $RUSTFLAGS environment variable (optional)
                -  r.extra_rustflags = ["--cfg=some_nested_config_var_for_crate"]
                -
                -  # Force a rust toolchain to be installed via rustup (optional)
                -  # You can also set the env var `RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN=true`
                -  r.force_install_rust_toolchain = "stable"
                -
                -  # Clean up the target/ dir after `gem install` to reduce bloat (optional)
                -  r.clean_after_install = false # default: true if invoked by rubygems
                -
                -  # Auto-install Rust toolchain if not present on "gem install" (optional)
                -  r.auto_install_rust_toolchain = false # default: true if invoked by rubygems
                -end
                +create_rust_makefile("my_gem")
                @@ -71,31 +41,2 @@
                -## Tips and Tricks
                -
                -- When using `rake-compiler` to build your gem, you can use the `RB_SYS_CARGO_PROFILE` environment variable to set the
                -  Cargo profile (i.e. `release` or `dev`).
                -
                -- You can pass Cargo arguments to `rake-compiler` like so: `rake compile -- --verbose`
                -
                -- It's possible to force an installation of a Rust toolchain by setting the `RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN`
                -  environment variable. This will install [rustup](https://rustup.rs/) and [cargo](https://crates.io/) in the build
                -  directory, so the end user does not have to have Rust pre-installed. Ideally, this should be a last resort, as it's
                -  better to already have the toolchain installed on your system.
                -
                -## Troubleshooting
                -
                -### Libclang issues
                -
                -If you see an error like this:
                -
                -```
                -thread 'main' panicked at 'Unable to find libclang: "couldn't find any valid shared libraries matching: \['libclang.so', 'libclang-*.so', 'libclang.so.*', 'libclang-*.so.*'\], set the `LIBCLANG_PATH` environment variable to a path where one of these files can be found (invalid: \[\])"'
                -```
                -
                -This means that bindgen is having issues finding a usable version of libclang. An easy way to fix this is to install the
                -[`libclang` gem](https://github.com/oxidize-rb/libclang-rb), which will install a pre-built version of libclang for you.
                -`rb_sys` will automatically detect this gem and use it.
                -
                -```ruby
                -# Gemfile
                -
                -gem "libclang", "~> 14.0.6"
                -```
                +For full configuration options and more advanced usage, see the
                +[rb_sys Gem Configuration](https://oxidize-rb.github.io/rb-sys/api-reference/rb-sys-gem-config.html) reference.
        certs/ianks.pem
                --- /tmp/d20260107-760-4br8tq/rb_sys-0.9.105/certs/ianks.pem	2026-01-07 03:02:17.278913339 +0000
                +++ /tmp/d20260107-760-4br8tq/rb_sys-0.9.124/certs/ianks.pem	2026-01-07 03:02:17.282913408 +0000
                @@ -2,18 +2,19 @@
                -MIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRQwEgYDVQQDDAtpLmtl
                -cnNleW1lcjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD
                -Y29tMB4XDTI0MDQxODA1MzY0N1oXDTI1MDQxODA1MzY0N1owQjEUMBIGA1UEAwwL
                -aS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
                -ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ2pG+er4cP
                -PasxsMIKL9/tmLL4gh80EMuF3SCS0qZoh+Oo8dkvRYxW8NXdwEIcp3cCNgE+5G+J
                -TCMOVF8S15n1Z1P7xxXiXxa/BIofKKbtatVRngm14uR/6pjdkvLXqlrWdS57bNwv
                -7LtpzYVfDHfsl/qRWaEi4jq00PNCRSWjcva8teqswjBg8KlwGtyygpezPbVSWP8Y
                -vzWZmVF7fqRBXU78Ah0+pNOhslBXDTvI3xJdN4hQ3H7rLjpD/qxKWq/8o+Qvx6cX
                -dNZ3ugH/Pr3BAsqt4JFLXin9AK7PO9GDMH5JXJrUb+hAt2VNIZqpz9VlKA6BA0jN
                -eWGea+yCZkECAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
                -BBYEFOkrF6hsocaIMOjR/K3JBzyXCLJPMA0GCSqGSIb3DQEBCwUAA4IBAQARHgco
                -yCxWUqN+HBGewmSB7T4oq6YS2FtU62K+GuWWCTqjl5byLKMXQW8HPDja9TC1My1m
                -2r0uDshtUvUjuB/Vfe9jVMTjnPBspHZYo0MRuMPc7owJaahjkqD3l7w9aa8Ci5aC
                -YU4Aj71Sc8s7YIxgHn/yIUdCe1yu6cC0+h+Ss9r/Yjr53NNXwjGQlDmH1eHcVQGZ
                -mEoVcZO1uWNtRPPsn1gfvKLPjRe5pclXQnGviS5DiH0Du+8QMxQGBJnYz2zSMW7G
                -Lvd35BNvZkhFzs9xfykhurpkT2TiP2F3ZFn9dwLXMFe41pwrtEYLIWhYi8mUG4Ek
                -6aR8M/tqIpChVV39
                +MIIDZTCCAk2gAwIBAgIUBA3+R8/tEu+w03IWit3NPqhAv5EwDQYJKoZIhvcNAQEL
                +BQAwQjEUMBIGA1UEAwwLaS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFp
                +bDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNTA1MDcxOTA3NDNaFw0zNTA1MDUx
                +OTA3NDNaMEIxFDASBgNVBAMMC2kua2Vyc2V5bWVyMRUwEwYKCZImiZPyLGQBGRYF
                +Z21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
                +DwAwggEKAoIBAQDCdqRvnq+HDz2rMbDCCi/f7Ziy+IIfNBDLhd0gktKmaIfjqPHZ
                +L0WMVvDV3cBCHKd3AjYBPuRviUwjDlRfEteZ9WdT+8cV4l8WvwSKHyim7WrVUZ4J
                +teLkf+qY3ZLy16pa1nUue2zcL+y7ac2FXwx37Jf6kVmhIuI6tNDzQkUlo3L2vLXq
                +rMIwYPCpcBrcsoKXsz21Ulj/GL81mZlRe36kQV1O/AIdPqTTobJQVw07yN8SXTeI
                +UNx+6y46Q/6sSlqv/KPkL8enF3TWd7oB/z69wQLKreCRS14p/QCuzzvRgzB+SVya
                +1G/oQLdlTSGaqc/VZSgOgQNIzXlhnmvsgmZBAgMBAAGjUzBRMB0GA1UdDgQWBBTp
                +KxeobKHGiDDo0fytyQc8lwiyTzAfBgNVHSMEGDAWgBTpKxeobKHGiDDo0fytyQc8
                +lwiyTzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAhKxsiI5Xz
                +H3isxJy4pD1FZ6rrU0gg/kFkWlsYgrw/Cqt53Nj6ValhpbA/VoftE80xEHfv4qR0
                +eiBkYVyULXZbojF9qRokVTXDY6lWzHdesbSt314IBBJR55aTw4IPHGikhMNeZ3M1
                +ffINONWhsL+ZwMaiLedThkRkPNzCvvRSNZiQXsdl/xV55JWqmmgfONCafx6/L8cI
                +EZEISe0Z9uvVtO6G+mfX6nfGGVjJg6B53wSXaipDGxOh0vn1YiQzPxY+8ouXmfj6
                +C/k2s4tlFwg7XEtz7wjSnVeiNP9EOK50WgVr4muWx1rhvOFhpxypONCCANJUILGk
                +1JUZhXwcbcst
        exe/rb-sys-dock
                --- /tmp/d20260107-760-4br8tq/rb_sys-0.9.105/exe/rb-sys-dock	2026-01-07 03:02:17.278913339 +0000
                +++ /tmp/d20260107-760-4br8tq/rb_sys-0.9.124/exe/rb-sys-dock	2026-01-07 03:02:17.282913408 +0000
                @@ -6,0 +7 @@
                +require "rake_compiler_dock"
                @@ -16 +17 @@
                -  version: RbSys::VERSION,
                +  version: ENV["RCD_IMAGE_VERSION"] || RbSys::VERSION,
                @@ -40,4 +41,6 @@
                -    logger.io = $stdout
                -    puts "- #{p.platform}"
                -  ensure
                -    logger.io = old
                +    begin
                +      logger.io = $stdout
                +      puts "- #{p.platform}"
                +    ensure
                +      logger.io = old
                +    end
                @@ -101,5 +104,8 @@
                -  opts.on("-r", "--ruby-versions LIST", "List all supported Ruby versions") do |arg|
                -    vers = arg.split(/[^0-9.]+/).map do |v|
                -      parts = v.split(".")
                -      parts[2] = "0" if parts[2].nil?
                -      parts.join(".")
                +  opts.on("-r", "--ruby-versions LIST", "Comma- or colon-separated Ruby requirements (e.g., '3.4,~> 3.1')") do |arg|
                +    requirements = arg.tr(":", ",").split(",").map(&:strip).reject(&:empty?)
                +
                +    begin
                +      resolved = RakeCompilerDock.ruby_cc_version(*requirements)
                +    rescue => error
                +      logger.error("Could not resolve requested Ruby versions: #{error.message}")
                +      exit(1)
                @@ -108 +114,3 @@
                -    OPTIONS[:ruby_versions] = vers
                +    resolved_versions = resolved.split(":")
                +    OPTIONS[:ruby_version_requirements] = requirements
                +    OPTIONS[:ruby_versions] = resolved_versions
                @@ -110 +118 @@
                -    logger.info("Building for Ruby requested versions: #{vers}")
                +    logger.info("Building for Ruby requested versions: #{resolved_versions.join(":")}")
                @@ -112 +120 @@
                -    ENV["RUBY_CC_VERSION"] = vers.join(":")
                +    RakeCompilerDock.set_ruby_cc_version(*requirements)
                @@ -118,0 +127 @@
                +    ENV["RCD_IMAGE_VERSION"] = tag
                @@ -362 +371 @@
                -  docker_options = []
                +  docker_options = ["--pid=host"]
                @@ -364,0 +374,2 @@
                +  ruby_versions = ENV["RUBY_CC_VERSION"] || RakeCompilerDock.cross_rubies.values.join(":")
                +
                @@ -386 +397,3 @@
                -      #{ENV["RUBY_CC_VERSION"] ? "-e RUBY_CC_VERSION=#{ENV["RUBY_CC_VERSION"]}" : ""} \
                +      -e RUBY_CC_VERSION="#{ruby_versions}" \
                +      -e RUBY_TARGET="#{OPTIONS.fetch(:platform)}" \
                +      -e SOURCE_DATE_EPOCH="#{source_date_epoch}" \
                @@ -404,0 +418,13 @@
                +def source_date_epoch
                +  return ENV["SOURCE_DATE_EPOCH"] if ENV.key?("SOURCE_DATE_EPOCH")
                +
                +  stdout, status = Open3.capture2("git log -1 --pretty=%ct")
                +
                +  if status.success?
                +    stdout.strip
                +  else
                +    logger.warn("Could not determine SOURCE_DATE_EPOCH from git log, using current time")
                +    Time.now.to_i.to_s
                +  end
                +end
                +
                @@ -426 +452,3 @@
                -  ENV["RCD_IMAGE"] ||= "rbsys/#{ruby_platform}:#{OPTIONS[:version]}"
                +  ENV["RCD_IMAGE_VERSION"] ||= OPTIONS[:version]
                +  version = ENV.fetch("RCD_IMAGE_VERSION")
                +  ENV["RCD_IMAGE"] ||= "rbsys/#{ruby_platform}:#{version}"
        lib/rb_sys/cargo_builder.rb
                --- /tmp/d20260107-760-4br8tq/rb_sys-0.9.105/lib/rb_sys/cargo_builder.rb	2026-01-07 03:02:17.279913356 +0000
                +++ /tmp/d20260107-760-4br8tq/rb_sys-0.9.124/lib/rb_sys/cargo_builder.rb	2026-01-07 03:02:17.283913426 +0000
                @@ -90 +90 @@
                -      prefix = so_ext == "dll" ? "" : "lib"
                +      prefix = (so_ext == "dll") ? "" : "lib"
                @@ -112,0 +113,4 @@
                +    def rubygems_invoked?
                +      ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1" && !ENV.key?("NIX_STORE")
                +    end
                +
                @@ -345,4 +348,0 @@
                -    def rubygems_invoked?
                -      ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1"
                -    end
                -
                @@ -358 +358 @@
                -        super <<~MSG
                +        super(<<~MSG)
        lib/rb_sys/error.rb
                --- /tmp/d20260107-760-4br8tq/rb_sys-0.9.105/lib/rb_sys/error.rb	2026-01-07 03:02:17.280913374 +0000
                +++ /tmp/d20260107-760-4br8tq/rb_sys-0.9.124/lib/rb_sys/error.rb	2026-01-07 03:02:17.283913426 +0000
                @@ -11,2 +11,2 @@
                -        Could not find Cargo package metadata for #{@name.inspect}. Please
                -        check that #{@name.inspect} matches the crate name in your
                +        Could not find Cargo package metadata for #{name.inspect}. Please
                +        check that #{name.inspect} matches the crate name in your
        lib/rb_sys/mkmf.rb
                --- /tmp/d20260107-760-4br8tq/rb_sys-0.9.105/lib/rb_sys/mkmf.rb	2026-01-07 03:02:17.280913374 +0000
                +++ /tmp/d20260107-760-4br8tq/rb_sys-0.9.124/lib/rb_sys/mkmf.rb	2026-01-07 03:02:17.283913426 +0000
                @@ -144 +144 @@
                -        gemclean:
                +        gemclean: install-so
                @@ -148 +148 @@
                -        install: #{builder.clean_after_install ? "install-so gemclean" : "install-so"}
                +        install: #{builder.clean_after_install ? "gemclean" : "install-so"}
                @@ -252,0 +253,3 @@
                +      rustup_default_cmd = "$(Q) $(CARGO_HOME)/bin/rustup default $(RB_SYS_DEFAULT_TOOLCHAIN)"
                +      rustup_toolchain_cmd = "$(Q) $(CARGO_HOME)/bin/rustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)"
                +
                @@ -263,2 +266,2 @@
                -        \t$(Q) $(CARGO_HOME)/bin/rustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)
                -        \t$(Q) $(CARGO_HOME)/bin/rustup default $(RB_SYS_DEFAULT_TOOLCHAIN)
                +        \t#{rustup_toolchain_cmd} || (sleep 5; #{rustup_toolchain_cmd}) || (sleep 5; #{rustup_toolchain_cmd})
                +        \t#{rustup_default_cmd} || (sleep 5; #{rustup_default_cmd}) || (sleep 5; #{rustup_default_cmd})
                @@ -286 +289,10 @@
                -      return unless find_executable("install_name_tool")
                +      # Try to find install_name_tool, checking multiple possible names:
                +      # 1. Native macOS install_name_tool
                +      # 2. Target-prefixed version from osxcross (e.g., aarch64-apple-darwin-install_name_tool)
                +      tool = if find_executable("install_name_tool")
                +        "install_name_tool"
                +      elsif find_executable("$(CARGO_BUILD_TARGET)-install_name_tool")
                +        "$(CARGO_BUILD_TARGET)-install_name_tool"
                +      else
                +        return
                +      end
                @@ -288 +300 @@
                -      '$(Q) install_name_tool -id "" $(DLLIB)'
                +      %($(Q) #{tool} -id "" $(DLLIB))
                @@ -329 +341 @@
                -        "#{"\t" * indent}#{export ? "export " : ""}#{a} ?= #{b}"
                +        "#{"\t" * indent}#{"export " if export}#{a} ?= #{b}"
        lib/rb_sys/mkmf/config.rb
                --- /tmp/d20260107-760-4br8tq/rb_sys-0.9.105/lib/rb_sys/mkmf/config.rb	2026-01-07 03:02:17.280913374 +0000
                +++ /tmp/d20260107-760-4br8tq/rb_sys-0.9.124/lib/rb_sys/mkmf/config.rb	2026-01-07 03:02:17.283913426 +0000
                @@ -58,4 +58,8 @@
                -      # Seems to be the only way to reliably know if we were invoked by Rubygems.
                -      # We want to know this so we can cleanup the target directory after an
                -      # install, to remove bloat.
                -      # @api private
                +      # Unfortunate, but this seems to be the only way to reliably know if we
                +      # were invoked by Rubygems. We want to know this so we can cleanup the
                +      # target directory after an install, to remove bloat.
                +      #
                +      # Note: we avoid nix environments so we do not force recompilation in
                +      # development, and accept that the "clean" task will not automatically
                +      # run.
                +      #
                @@ -63 +67 @@
                -        ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1"
                +        ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1" && !ENV.key?("NIX_STORE")
        lib/rb_sys/toolchain_info/data.rb
                --- /tmp/d20260107-760-4br8tq/rb_sys-0.9.105/lib/rb_sys/toolchain_info/data.rb	2026-01-07 03:02:17.281913391 +0000
                +++ /tmp/d20260107-760-4br8tq/rb_sys-0.9.124/lib/rb_sys/toolchain_info/data.rb	2026-01-07 03:02:17.284913443 +0000
                @@ -8 +8 @@
                -    DATA = {"arm-linux" => {"rust-target" => "arm-unknown-linux-gnueabihf", "rake-compiler-dock" => {"cc" => "arm-linux-gnueabihf-gcc"}, "docker-platform" => "linux/arm/v7", "supported" => true}, "aarch64-linux" => {"rust-target" => "aarch64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "aarch64-linux-gnu-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "aarch64-linux-musl" => {"rust-target" => "aarch64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "aarch64-linux-musl-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "arm64-darwin" => {"rust-target" => "aarch64-apple-darwin", "rake-compiler-dock" => {"cc" => "aarch64-apple-darwin-clang"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "x64-mingw-ucrt" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x64-mingw32" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86-linux" => {"rust-target" => "i686-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "i686-redhat-linux-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86-mingw32" => {"rust-target" => "i686-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "i686-w64-mingw32-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86_64-darwin" => {"rust-target" => "x86_64-apple-darwin", "rake-compiler-dock" => {"cc" => "x86_64-apple-darwin-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux" => {"rust-target" => "x86_64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "x86_64-redhat-linux-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux-musl" => {"rust-target" => "x86_64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "x86_64-unknown-linux-musl-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}}
                +    DATA = {"arm-linux" => {"rust-target" => "arm-unknown-linux-gnueabihf", "rake-compiler-dock" => {"cc" => "arm-linux-gnueabihf-gcc"}, "docker-platform" => "linux/arm/v7", "supported" => true}, "aarch64-linux" => {"aliases" => ["aarch64-linux-gnu", "aarch64-unknown-linux-gnu"], "rust-target" => "aarch64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "aarch64-linux-gnu-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "aarch64-linux-musl" => {"rust-target" => "aarch64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "aarch64-linux-musl-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "arm64-darwin" => {"rust-target" => "aarch64-apple-darwin", "rake-compiler-dock" => {"cc" => "aarch64-apple-darwin-clang"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "x64-mingw-ucrt" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "aarch64-mingw-ucrt" => {"rust-target" => "aarch64-pc-windows-gnullvm", "rake-compiler-dock" => {"cc" => "aarch64-w64-mingw32-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x64-mingw32" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86-linux" => {"rust-target" => "i686-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "i686-redhat-linux-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86-mingw32" => {"rust-target" => "i686-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "i686-w64-mingw32-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86_64-darwin" => {"rust-target" => "x86_64-apple-darwin", "rake-compiler-dock" => {"cc" => "x86_64-apple-darwin-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux" => {"aliases" => ["x86_64-linux-gnu", "x86_64-unknown-linux-gnu"], "rust-target" => "x86_64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "x86_64-redhat-linux-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux-musl" => {"rust-target" => "x86_64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "x86_64-unknown-linux-musl-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}}
        lib/rb_sys/version.rb
                --- /tmp/d20260107-760-4br8tq/rb_sys-0.9.105/lib/rb_sys/version.rb	2026-01-07 03:02:17.281913391 +0000
                +++ /tmp/d20260107-760-4br8tq/rb_sys-0.9.124/lib/rb_sys/version.rb	2026-01-07 03:02:17.284913443 +0000
                @@ -4 +4 @@
                -  VERSION = "0.9.105"
                +  VERSION = "0.9.124"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare rb_sys 0.9.105 0.9.124

Compared versions: ["0.9.105", "0.9.124"]
  DIFFERENT cert_chain:
    0.9.105: ["-----BEGIN CERTIFICATE-----\nMIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRQwEgYDVQQDDAtpLmtl\ncnNleW1lcjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD\nY29tMB4XDTI0MDQxODA1MzY0N1oXDTI1MDQxODA1MzY0N1owQjEUMBIGA1UEAwwL\naS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk\nARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ2pG+er4cP\nPasxsMIKL9/tmLL4gh80EMuF3SCS0qZoh+Oo8dkvRYxW8NXdwEIcp3cCNgE+5G+J\nTCMOVF8S15n1Z1P7xxXiXxa/BIofKKbtatVRngm14uR/6pjdkvLXqlrWdS57bNwv\n7LtpzYVfDHfsl/qRWaEi4jq00PNCRSWjcva8teqswjBg8KlwGtyygpezPbVSWP8Y\nvzWZmVF7fqRBXU78Ah0+pNOhslBXDTvI3xJdN4hQ3H7rLjpD/qxKWq/8o+Qvx6cX\ndNZ3ugH/Pr3BAsqt4JFLXin9AK7PO9GDMH5JXJrUb+hAt2VNIZqpz9VlKA6BA0jN\neWGea+yCZkECAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O\nBBYEFOkrF6hsocaIMOjR/K3JBzyXCLJPMA0GCSqGSIb3DQEBCwUAA4IBAQARHgco\nyCxWUqN+HBGewmSB7T4oq6YS2FtU62K+GuWWCTqjl5byLKMXQW8HPDja9TC1My1m\n2r0uDshtUvUjuB/Vfe9jVMTjnPBspHZYo0MRuMPc7owJaahjkqD3l7w9aa8Ci5aC\nYU4Aj71Sc8s7YIxgHn/yIUdCe1yu6cC0+h+Ss9r/Yjr53NNXwjGQlDmH1eHcVQGZ\nmEoVcZO1uWNtRPPsn1gfvKLPjRe5pclXQnGviS5DiH0Du+8QMxQGBJnYz2zSMW7G\nLvd35BNvZkhFzs9xfykhurpkT2TiP2F3ZFn9dwLXMFe41pwrtEYLIWhYi8mUG4Ek\n6aR8M/tqIpChVV39\n-----END CERTIFICATE-----\n"]
    0.9.124: ["-----BEGIN CERTIFICATE-----\nMIIDZTCCAk2gAwIBAgIUBA3+R8/tEu+w03IWit3NPqhAv5EwDQYJKoZIhvcNAQEL\nBQAwQjEUMBIGA1UEAwwLaS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFp\nbDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNTA1MDcxOTA3NDNaFw0zNTA1MDUx\nOTA3NDNaMEIxFDASBgNVBAMMC2kua2Vyc2V5bWVyMRUwEwYKCZImiZPyLGQBGRYF\nZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQDCdqRvnq+HDz2rMbDCCi/f7Ziy+IIfNBDLhd0gktKmaIfjqPHZ\nL0WMVvDV3cBCHKd3AjYBPuRviUwjDlRfEteZ9WdT+8cV4l8WvwSKHyim7WrVUZ4J\nteLkf+qY3ZLy16pa1nUue2zcL+y7ac2FXwx37Jf6kVmhIuI6tNDzQkUlo3L2vLXq\nrMIwYPCpcBrcsoKXsz21Ulj/GL81mZlRe36kQV1O/AIdPqTTobJQVw07yN8SXTeI\nUNx+6y46Q/6sSlqv/KPkL8enF3TWd7oB/z69wQLKreCRS14p/QCuzzvRgzB+SVya\n1G/oQLdlTSGaqc/VZSgOgQNIzXlhnmvsgmZBAgMBAAGjUzBRMB0GA1UdDgQWBBTp\nKxeobKHGiDDo0fytyQc8lwiyTzAfBgNVHSMEGDAWgBTpKxeobKHGiDDo0fytyQc8\nlwiyTzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAhKxsiI5Xz\nH3isxJy4pD1FZ6rrU0gg/kFkWlsYgrw/Cqt53Nj6ValhpbA/VoftE80xEHfv4qR0\neiBkYVyULXZbojF9qRokVTXDY6lWzHdesbSt314IBBJR55aTw4IPHGikhMNeZ3M1\nffINONWhsL+ZwMaiLedThkRkPNzCvvRSNZiQXsdl/xV55JWqmmgfONCafx6/L8cI\nEZEISe0Z9uvVtO6G+mfX6nfGGVjJg6B53wSXaipDGxOh0vn1YiQzPxY+8ouXmfj6\nC/k2s4tlFwg7XEtz7wjSnVeiNP9EOK50WgVr4muWx1rhvOFhpxypONCCANJUILGk\n1JUZhXwcbcst\n-----END CERTIFICATE-----\n"]
  DIFFERENT date:
    0.9.105: 2024-12-28 00:00:00 UTC
    0.9.124: 1980-01-01 00:00:00 UTC
  DIFFERENT required_ruby_version:
    0.9.105: >= 2.5.0
    0.9.124: >= 2.7.0
  DIFFERENT rubygems_version:
    0.9.105: 3.5.22
    0.9.124: 4.0.3
  DIFFERENT version:
    0.9.105: 0.9.105
    0.9.124: 0.9.124
  DIFFERENT files:
    0.9.105->0.9.124:
      * Changed:
            README.md +16/-75
            certs/ianks.pem +19/-18
            exe/rb-sys-dock +44/-16
            lib/rb_sys/cargo_builder.rb +6/-6
            lib/rb_sys/error.rb +2/-2
            lib/rb_sys/mkmf.rb +19/-7
            lib/rb_sys/mkmf/config.rb +9/-5
            lib/rb_sys/toolchain_info/data.rb +1/-1
            lib/rb_sys/version.rb +1/-1
  DIFFERENT runtime dependencies:
    0.9.105->0.9.124:
      * Added:
            rake-compiler-dock ["= 1.11.0"] (runtime)

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare selma 0.4.11 0.4.15

Compared versions: ["0.4.11", "0.4.15"]
  DIFFERENT date:
    0.4.11: 2024-12-29 00:00:00 UTC
    0.4.15: 2026-01-06 00:00:00 UTC
  DIFFERENT required_ruby_version:
    0.4.11: >= 3.2, < 3.5.dev
    0.4.15: >= 3.2, < 4.1.dev
  DIFFERENT required_rubygems_version:
    0.4.11: ~> 3.4
    0.4.15: >= 3.4
  DIFFERENT version:
    0.4.11: 0.4.11
    0.4.15: 0.4.15
  DIFFERENT files:
    0.4.11->0.4.15:
      * Added:
            lib/selma/3.3/selma.so 
              (!) Unexpected permissions: 100755
              (!) File is executable
            lib/selma/4.0/selma.so 
              (!) Unexpected permissions: 100755
              (!) File is executable
      * Changed:
            README.md +3/-3
            lib/selma/version.rb +1/-1

1 similar comment
@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare selma 0.4.11 0.4.15

Compared versions: ["0.4.11", "0.4.15"]
  DIFFERENT date:
    0.4.11: 2024-12-29 00:00:00 UTC
    0.4.15: 2026-01-06 00:00:00 UTC
  DIFFERENT required_ruby_version:
    0.4.11: >= 3.2, < 3.5.dev
    0.4.15: >= 3.2, < 4.1.dev
  DIFFERENT required_rubygems_version:
    0.4.11: ~> 3.4
    0.4.15: >= 3.4
  DIFFERENT version:
    0.4.11: 0.4.11
    0.4.15: 0.4.15
  DIFFERENT files:
    0.4.11->0.4.15:
      * Added:
            lib/selma/3.3/selma.so 
              (!) Unexpected permissions: 100755
              (!) File is executable
            lib/selma/4.0/selma.so 
              (!) Unexpected permissions: 100755
              (!) File is executable
      * Changed:
            README.md +3/-3
            lib/selma/version.rb +1/-1

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff rb_sys 0.9.105 0.9.124

Compared versions: ["0.9.105", "0.9.124"]
  DIFFERENT files:
    0.9.105->0.9.124:
      * Changed:
        README.md
                --- /tmp/d20260107-782-je9vg6/rb_sys-0.9.105/README.md	2026-01-07 03:02:30.906348797 +0000
                +++ /tmp/d20260107-782-je9vg6/rb_sys-0.9.124/README.md	2026-01-07 03:02:30.909348806 +0000
                @@ -7,2 +7,2 @@
                -The `rb_sys` gem is a Ruby gem makes it easy to build native Ruby extensions in Rust. It interops with the existing Ruby
                -native extension toolchains (i.e. `rake-compiler`) to make testing, building, and cross compilation of gems easy.
                +The `rb_sys` gem makes it easy to build native Ruby extensions in Rust. It interoperates with existing Ruby native
                +extension toolchains (i.e. `rake-compiler`) to make testing, building, and cross-compilation of gems easy.
                @@ -10 +10 @@
                -## `RbSys::ExtensionTask`
                +## Documentation
                @@ -12,2 +12,8 @@
                -This gem provides a `RbSys::ExtensionTask` class that can be used to build a Ruby extension in Rust. It's a thin wrapper
                -around `Rake::ExtensionTask` that provides sane defaults for building Rust extensions.
                +For comprehensive documentation, please refer to the [Ruby on Rust Book](https://oxidize-rb.github.io/rb-sys/), which
                +includes:
                +
                +- [API Reference for rb_sys Gem Configuration](https://oxidize-rb.github.io/rb-sys/api-reference/rb-sys-gem-config.html)
                +- [The Build Process](https://oxidize-rb.github.io/rb-sys/build-process.html)
                +- [Cross-Platform Development](https://oxidize-rb.github.io/rb-sys/cross-platform.html)
                +
                +## Basic Usage
                @@ -17 +22,0 @@
                -
                @@ -24,3 +29 @@
                -
                -  # If you want to use `rb-sys-dock` for cross-compilation:
                -  ext.cross_compile = true
                +  ext.cross_compile = true  # For rb-sys-dock cross-compilation
                @@ -30,5 +32,0 @@
                -## `create_rust_makefile`
                -
                -This gem provides a simple helper to build a Ruby compatible Makefile for you Rust extension. For a full example, see
                -the [examples](./../examples) directory.
                -
                @@ -36,3 +34 @@
                -# ext/rust_reverse/extconf.rb
                -
                -# We need to require mkmf *first* this since `rake-compiler` injects code here for cross compilation
                +# ext/my_gem/extconf.rb
                @@ -42,27 +38 @@
                -create_rust_makefile("rust_reverse") do |r|
                -  # Create debug builds in dev. Make sure that release gems are compiled with
                -  # `RB_SYS_CARGO_PROFILE=release` (optional)
                -  r.profile = ENV.fetch("RB_SYS_CARGO_PROFILE", :dev).to_sym
                -
                -  # Can be overridden with `RB_SYS_CARGO_FEATURES` env var (optional)
                -  r.features = ["test-feature"]
                -
                -  # You can add whatever env vars you want to the env hash (optional)
                -  r.env = {"FOO" => "BAR"}
                -
                -  # If your Cargo.toml is in a different directory, you can specify it here (optional)
                -  r.ext_dir = "."
                -
                -  # Extra flags to pass to the $RUSTFLAGS environment variable (optional)
                -  r.extra_rustflags = ["--cfg=some_nested_config_var_for_crate"]
                -
                -  # Force a rust toolchain to be installed via rustup (optional)
                -  # You can also set the env var `RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN=true`
                -  r.force_install_rust_toolchain = "stable"
                -
                -  # Clean up the target/ dir after `gem install` to reduce bloat (optional)
                -  r.clean_after_install = false # default: true if invoked by rubygems
                -
                -  # Auto-install Rust toolchain if not present on "gem install" (optional)
                -  r.auto_install_rust_toolchain = false # default: true if invoked by rubygems
                -end
                +create_rust_makefile("my_gem")
                @@ -71,31 +41,2 @@
                -## Tips and Tricks
                -
                -- When using `rake-compiler` to build your gem, you can use the `RB_SYS_CARGO_PROFILE` environment variable to set the
                -  Cargo profile (i.e. `release` or `dev`).
                -
                -- You can pass Cargo arguments to `rake-compiler` like so: `rake compile -- --verbose`
                -
                -- It's possible to force an installation of a Rust toolchain by setting the `RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN`
                -  environment variable. This will install [rustup](https://rustup.rs/) and [cargo](https://crates.io/) in the build
                -  directory, so the end user does not have to have Rust pre-installed. Ideally, this should be a last resort, as it's
                -  better to already have the toolchain installed on your system.
                -
                -## Troubleshooting
                -
                -### Libclang issues
                -
                -If you see an error like this:
                -
                -```
                -thread 'main' panicked at 'Unable to find libclang: "couldn't find any valid shared libraries matching: \['libclang.so', 'libclang-*.so', 'libclang.so.*', 'libclang-*.so.*'\], set the `LIBCLANG_PATH` environment variable to a path where one of these files can be found (invalid: \[\])"'
                -```
                -
                -This means that bindgen is having issues finding a usable version of libclang. An easy way to fix this is to install the
                -[`libclang` gem](https://github.com/oxidize-rb/libclang-rb), which will install a pre-built version of libclang for you.
                -`rb_sys` will automatically detect this gem and use it.
                -
                -```ruby
                -# Gemfile
                -
                -gem "libclang", "~> 14.0.6"
                -```
                +For full configuration options and more advanced usage, see the
                +[rb_sys Gem Configuration](https://oxidize-rb.github.io/rb-sys/api-reference/rb-sys-gem-config.html) reference.
        certs/ianks.pem
                --- /tmp/d20260107-782-je9vg6/rb_sys-0.9.105/certs/ianks.pem	2026-01-07 03:02:30.907348800 +0000
                +++ /tmp/d20260107-782-je9vg6/rb_sys-0.9.124/certs/ianks.pem	2026-01-07 03:02:30.909348806 +0000
                @@ -2,18 +2,19 @@
                -MIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRQwEgYDVQQDDAtpLmtl
                -cnNleW1lcjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD
                -Y29tMB4XDTI0MDQxODA1MzY0N1oXDTI1MDQxODA1MzY0N1owQjEUMBIGA1UEAwwL
                -aS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
                -ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ2pG+er4cP
                -PasxsMIKL9/tmLL4gh80EMuF3SCS0qZoh+Oo8dkvRYxW8NXdwEIcp3cCNgE+5G+J
                -TCMOVF8S15n1Z1P7xxXiXxa/BIofKKbtatVRngm14uR/6pjdkvLXqlrWdS57bNwv
                -7LtpzYVfDHfsl/qRWaEi4jq00PNCRSWjcva8teqswjBg8KlwGtyygpezPbVSWP8Y
                -vzWZmVF7fqRBXU78Ah0+pNOhslBXDTvI3xJdN4hQ3H7rLjpD/qxKWq/8o+Qvx6cX
                -dNZ3ugH/Pr3BAsqt4JFLXin9AK7PO9GDMH5JXJrUb+hAt2VNIZqpz9VlKA6BA0jN
                -eWGea+yCZkECAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
                -BBYEFOkrF6hsocaIMOjR/K3JBzyXCLJPMA0GCSqGSIb3DQEBCwUAA4IBAQARHgco
                -yCxWUqN+HBGewmSB7T4oq6YS2FtU62K+GuWWCTqjl5byLKMXQW8HPDja9TC1My1m
                -2r0uDshtUvUjuB/Vfe9jVMTjnPBspHZYo0MRuMPc7owJaahjkqD3l7w9aa8Ci5aC
                -YU4Aj71Sc8s7YIxgHn/yIUdCe1yu6cC0+h+Ss9r/Yjr53NNXwjGQlDmH1eHcVQGZ
                -mEoVcZO1uWNtRPPsn1gfvKLPjRe5pclXQnGviS5DiH0Du+8QMxQGBJnYz2zSMW7G
                -Lvd35BNvZkhFzs9xfykhurpkT2TiP2F3ZFn9dwLXMFe41pwrtEYLIWhYi8mUG4Ek
                -6aR8M/tqIpChVV39
                +MIIDZTCCAk2gAwIBAgIUBA3+R8/tEu+w03IWit3NPqhAv5EwDQYJKoZIhvcNAQEL
                +BQAwQjEUMBIGA1UEAwwLaS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFp
                +bDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNTA1MDcxOTA3NDNaFw0zNTA1MDUx
                +OTA3NDNaMEIxFDASBgNVBAMMC2kua2Vyc2V5bWVyMRUwEwYKCZImiZPyLGQBGRYF
                +Z21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
                +DwAwggEKAoIBAQDCdqRvnq+HDz2rMbDCCi/f7Ziy+IIfNBDLhd0gktKmaIfjqPHZ
                +L0WMVvDV3cBCHKd3AjYBPuRviUwjDlRfEteZ9WdT+8cV4l8WvwSKHyim7WrVUZ4J
                +teLkf+qY3ZLy16pa1nUue2zcL+y7ac2FXwx37Jf6kVmhIuI6tNDzQkUlo3L2vLXq
                +rMIwYPCpcBrcsoKXsz21Ulj/GL81mZlRe36kQV1O/AIdPqTTobJQVw07yN8SXTeI
                +UNx+6y46Q/6sSlqv/KPkL8enF3TWd7oB/z69wQLKreCRS14p/QCuzzvRgzB+SVya
                +1G/oQLdlTSGaqc/VZSgOgQNIzXlhnmvsgmZBAgMBAAGjUzBRMB0GA1UdDgQWBBTp
                +KxeobKHGiDDo0fytyQc8lwiyTzAfBgNVHSMEGDAWgBTpKxeobKHGiDDo0fytyQc8
                +lwiyTzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAhKxsiI5Xz
                +H3isxJy4pD1FZ6rrU0gg/kFkWlsYgrw/Cqt53Nj6ValhpbA/VoftE80xEHfv4qR0
                +eiBkYVyULXZbojF9qRokVTXDY6lWzHdesbSt314IBBJR55aTw4IPHGikhMNeZ3M1
                +ffINONWhsL+ZwMaiLedThkRkPNzCvvRSNZiQXsdl/xV55JWqmmgfONCafx6/L8cI
                +EZEISe0Z9uvVtO6G+mfX6nfGGVjJg6B53wSXaipDGxOh0vn1YiQzPxY+8ouXmfj6
                +C/k2s4tlFwg7XEtz7wjSnVeiNP9EOK50WgVr4muWx1rhvOFhpxypONCCANJUILGk
                +1JUZhXwcbcst
        exe/rb-sys-dock
                --- /tmp/d20260107-782-je9vg6/rb_sys-0.9.105/exe/rb-sys-dock	2026-01-07 03:02:30.907348800 +0000
                +++ /tmp/d20260107-782-je9vg6/rb_sys-0.9.124/exe/rb-sys-dock	2026-01-07 03:02:30.910348809 +0000
                @@ -6,0 +7 @@
                +require "rake_compiler_dock"
                @@ -16 +17 @@
                -  version: RbSys::VERSION,
                +  version: ENV["RCD_IMAGE_VERSION"] || RbSys::VERSION,
                @@ -40,4 +41,6 @@
                -    logger.io = $stdout
                -    puts "- #{p.platform}"
                -  ensure
                -    logger.io = old
                +    begin
                +      logger.io = $stdout
                +      puts "- #{p.platform}"
                +    ensure
                +      logger.io = old
                +    end
                @@ -101,5 +104,8 @@
                -  opts.on("-r", "--ruby-versions LIST", "List all supported Ruby versions") do |arg|
                -    vers = arg.split(/[^0-9.]+/).map do |v|
                -      parts = v.split(".")
                -      parts[2] = "0" if parts[2].nil?
                -      parts.join(".")
                +  opts.on("-r", "--ruby-versions LIST", "Comma- or colon-separated Ruby requirements (e.g., '3.4,~> 3.1')") do |arg|
                +    requirements = arg.tr(":", ",").split(",").map(&:strip).reject(&:empty?)
                +
                +    begin
                +      resolved = RakeCompilerDock.ruby_cc_version(*requirements)
                +    rescue => error
                +      logger.error("Could not resolve requested Ruby versions: #{error.message}")
                +      exit(1)
                @@ -108 +114,3 @@
                -    OPTIONS[:ruby_versions] = vers
                +    resolved_versions = resolved.split(":")
                +    OPTIONS[:ruby_version_requirements] = requirements
                +    OPTIONS[:ruby_versions] = resolved_versions
                @@ -110 +118 @@
                -    logger.info("Building for Ruby requested versions: #{vers}")
                +    logger.info("Building for Ruby requested versions: #{resolved_versions.join(":")}")
                @@ -112 +120 @@
                -    ENV["RUBY_CC_VERSION"] = vers.join(":")
                +    RakeCompilerDock.set_ruby_cc_version(*requirements)
                @@ -118,0 +127 @@
                +    ENV["RCD_IMAGE_VERSION"] = tag
                @@ -362 +371 @@
                -  docker_options = []
                +  docker_options = ["--pid=host"]
                @@ -364,0 +374,2 @@
                +  ruby_versions = ENV["RUBY_CC_VERSION"] || RakeCompilerDock.cross_rubies.values.join(":")
                +
                @@ -386 +397,3 @@
                -      #{ENV["RUBY_CC_VERSION"] ? "-e RUBY_CC_VERSION=#{ENV["RUBY_CC_VERSION"]}" : ""} \
                +      -e RUBY_CC_VERSION="#{ruby_versions}" \
                +      -e RUBY_TARGET="#{OPTIONS.fetch(:platform)}" \
                +      -e SOURCE_DATE_EPOCH="#{source_date_epoch}" \
                @@ -404,0 +418,13 @@
                +def source_date_epoch
                +  return ENV["SOURCE_DATE_EPOCH"] if ENV.key?("SOURCE_DATE_EPOCH")
                +
                +  stdout, status = Open3.capture2("git log -1 --pretty=%ct")
                +
                +  if status.success?
                +    stdout.strip
                +  else
                +    logger.warn("Could not determine SOURCE_DATE_EPOCH from git log, using current time")
                +    Time.now.to_i.to_s
                +  end
                +end
                +
                @@ -426 +452,3 @@
                -  ENV["RCD_IMAGE"] ||= "rbsys/#{ruby_platform}:#{OPTIONS[:version]}"
                +  ENV["RCD_IMAGE_VERSION"] ||= OPTIONS[:version]
                +  version = ENV.fetch("RCD_IMAGE_VERSION")
                +  ENV["RCD_IMAGE"] ||= "rbsys/#{ruby_platform}:#{version}"
        lib/rb_sys/cargo_builder.rb
                --- /tmp/d20260107-782-je9vg6/rb_sys-0.9.105/lib/rb_sys/cargo_builder.rb	2026-01-07 03:02:30.908348803 +0000
                +++ /tmp/d20260107-782-je9vg6/rb_sys-0.9.124/lib/rb_sys/cargo_builder.rb	2026-01-07 03:02:30.911348813 +0000
                @@ -90 +90 @@
                -      prefix = so_ext == "dll" ? "" : "lib"
                +      prefix = (so_ext == "dll") ? "" : "lib"
                @@ -112,0 +113,4 @@
                +    def rubygems_invoked?
                +      ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1" && !ENV.key?("NIX_STORE")
                +    end
                +
                @@ -345,4 +348,0 @@
                -    def rubygems_invoked?
                -      ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1"
                -    end
                -
                @@ -358 +358 @@
                -        super <<~MSG
                +        super(<<~MSG)
        lib/rb_sys/error.rb
                --- /tmp/d20260107-782-je9vg6/rb_sys-0.9.105/lib/rb_sys/error.rb	2026-01-07 03:02:30.908348803 +0000
                +++ /tmp/d20260107-782-je9vg6/rb_sys-0.9.124/lib/rb_sys/error.rb	2026-01-07 03:02:30.911348813 +0000
                @@ -11,2 +11,2 @@
                -        Could not find Cargo package metadata for #{@name.inspect}. Please
                -        check that #{@name.inspect} matches the crate name in your
                +        Could not find Cargo package metadata for #{name.inspect}. Please
                +        check that #{name.inspect} matches the crate name in your
        lib/rb_sys/mkmf.rb
                --- /tmp/d20260107-782-je9vg6/rb_sys-0.9.105/lib/rb_sys/mkmf.rb	2026-01-07 03:02:30.908348803 +0000
                +++ /tmp/d20260107-782-je9vg6/rb_sys-0.9.124/lib/rb_sys/mkmf.rb	2026-01-07 03:02:30.911348813 +0000
                @@ -144 +144 @@
                -        gemclean:
                +        gemclean: install-so
                @@ -148 +148 @@
                -        install: #{builder.clean_after_install ? "install-so gemclean" : "install-so"}
                +        install: #{builder.clean_after_install ? "gemclean" : "install-so"}
                @@ -252,0 +253,3 @@
                +      rustup_default_cmd = "$(Q) $(CARGO_HOME)/bin/rustup default $(RB_SYS_DEFAULT_TOOLCHAIN)"
                +      rustup_toolchain_cmd = "$(Q) $(CARGO_HOME)/bin/rustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)"
                +
                @@ -263,2 +266,2 @@
                -        \t$(Q) $(CARGO_HOME)/bin/rustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)
                -        \t$(Q) $(CARGO_HOME)/bin/rustup default $(RB_SYS_DEFAULT_TOOLCHAIN)
                +        \t#{rustup_toolchain_cmd} || (sleep 5; #{rustup_toolchain_cmd}) || (sleep 5; #{rustup_toolchain_cmd})
                +        \t#{rustup_default_cmd} || (sleep 5; #{rustup_default_cmd}) || (sleep 5; #{rustup_default_cmd})
                @@ -286 +289,10 @@
                -      return unless find_executable("install_name_tool")
                +      # Try to find install_name_tool, checking multiple possible names:
                +      # 1. Native macOS install_name_tool
                +      # 2. Target-prefixed version from osxcross (e.g., aarch64-apple-darwin-install_name_tool)
                +      tool = if find_executable("install_name_tool")
                +        "install_name_tool"
                +      elsif find_executable("$(CARGO_BUILD_TARGET)-install_name_tool")
                +        "$(CARGO_BUILD_TARGET)-install_name_tool"
                +      else
                +        return
                +      end
                @@ -288 +300 @@
                -      '$(Q) install_name_tool -id "" $(DLLIB)'
                +      %($(Q) #{tool} -id "" $(DLLIB))
                @@ -329 +341 @@
                -        "#{"\t" * indent}#{export ? "export " : ""}#{a} ?= #{b}"
                +        "#{"\t" * indent}#{"export " if export}#{a} ?= #{b}"
        lib/rb_sys/mkmf/config.rb
                --- /tmp/d20260107-782-je9vg6/rb_sys-0.9.105/lib/rb_sys/mkmf/config.rb	2026-01-07 03:02:30.908348803 +0000
                +++ /tmp/d20260107-782-je9vg6/rb_sys-0.9.124/lib/rb_sys/mkmf/config.rb	2026-01-07 03:02:30.912348816 +0000
                @@ -58,4 +58,8 @@
                -      # Seems to be the only way to reliably know if we were invoked by Rubygems.
                -      # We want to know this so we can cleanup the target directory after an
                -      # install, to remove bloat.
                -      # @api private
                +      # Unfortunate, but this seems to be the only way to reliably know if we
                +      # were invoked by Rubygems. We want to know this so we can cleanup the
                +      # target directory after an install, to remove bloat.
                +      #
                +      # Note: we avoid nix environments so we do not force recompilation in
                +      # development, and accept that the "clean" task will not automatically
                +      # run.
                +      #
                @@ -63 +67 @@
                -        ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1"
                +        ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1" && !ENV.key?("NIX_STORE")
        lib/rb_sys/toolchain_info/data.rb
                --- /tmp/d20260107-782-je9vg6/rb_sys-0.9.105/lib/rb_sys/toolchain_info/data.rb	2026-01-07 03:02:30.908348803 +0000
                +++ /tmp/d20260107-782-je9vg6/rb_sys-0.9.124/lib/rb_sys/toolchain_info/data.rb	2026-01-07 03:02:30.912348816 +0000
                @@ -8 +8 @@
                -    DATA = {"arm-linux" => {"rust-target" => "arm-unknown-linux-gnueabihf", "rake-compiler-dock" => {"cc" => "arm-linux-gnueabihf-gcc"}, "docker-platform" => "linux/arm/v7", "supported" => true}, "aarch64-linux" => {"rust-target" => "aarch64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "aarch64-linux-gnu-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "aarch64-linux-musl" => {"rust-target" => "aarch64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "aarch64-linux-musl-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "arm64-darwin" => {"rust-target" => "aarch64-apple-darwin", "rake-compiler-dock" => {"cc" => "aarch64-apple-darwin-clang"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "x64-mingw-ucrt" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x64-mingw32" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86-linux" => {"rust-target" => "i686-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "i686-redhat-linux-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86-mingw32" => {"rust-target" => "i686-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "i686-w64-mingw32-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86_64-darwin" => {"rust-target" => "x86_64-apple-darwin", "rake-compiler-dock" => {"cc" => "x86_64-apple-darwin-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux" => {"rust-target" => "x86_64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "x86_64-redhat-linux-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux-musl" => {"rust-target" => "x86_64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "x86_64-unknown-linux-musl-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}}
                +    DATA = {"arm-linux" => {"rust-target" => "arm-unknown-linux-gnueabihf", "rake-compiler-dock" => {"cc" => "arm-linux-gnueabihf-gcc"}, "docker-platform" => "linux/arm/v7", "supported" => true}, "aarch64-linux" => {"aliases" => ["aarch64-linux-gnu", "aarch64-unknown-linux-gnu"], "rust-target" => "aarch64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "aarch64-linux-gnu-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "aarch64-linux-musl" => {"rust-target" => "aarch64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "aarch64-linux-musl-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "arm64-darwin" => {"rust-target" => "aarch64-apple-darwin", "rake-compiler-dock" => {"cc" => "aarch64-apple-darwin-clang"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "x64-mingw-ucrt" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "aarch64-mingw-ucrt" => {"rust-target" => "aarch64-pc-windows-gnullvm", "rake-compiler-dock" => {"cc" => "aarch64-w64-mingw32-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x64-mingw32" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86-linux" => {"rust-target" => "i686-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "i686-redhat-linux-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86-mingw32" => {"rust-target" => "i686-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "i686-w64-mingw32-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86_64-darwin" => {"rust-target" => "x86_64-apple-darwin", "rake-compiler-dock" => {"cc" => "x86_64-apple-darwin-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux" => {"aliases" => ["x86_64-linux-gnu", "x86_64-unknown-linux-gnu"], "rust-target" => "x86_64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "x86_64-redhat-linux-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux-musl" => {"rust-target" => "x86_64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "x86_64-unknown-linux-musl-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}}
        lib/rb_sys/version.rb
                --- /tmp/d20260107-782-je9vg6/rb_sys-0.9.105/lib/rb_sys/version.rb	2026-01-07 03:02:30.909348806 +0000
                +++ /tmp/d20260107-782-je9vg6/rb_sys-0.9.124/lib/rb_sys/version.rb	2026-01-07 03:02:30.912348816 +0000
                @@ -4 +4 @@
                -  VERSION = "0.9.105"
                +  VERSION = "0.9.124"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff html-pipeline 3.0.3 3.2.4

Compared versions: ["3.0.3", "3.2.4"]
  DIFFERENT files:
    3.0.3->3.2.4:
      * Changed:
        .github/workflows/automerge.yml
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/.github/workflows/automerge.yml	2026-01-07 03:02:31.538848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/.github/workflows/automerge.yml	2026-01-07 03:02:31.542848175 +0000
                @@ -3,0 +4 @@
                +  workflow_dispatch:
                @@ -11,3 +12,5 @@
                -  dependabot:
                -    uses: yettoapp/actions/.github/workflows/automerge_dependabot.yml@main
                -    secrets: inherit
                +  bot-check:
                +    uses: gjtorikian/actions/.github/workflows/automerge.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                +
        .github/workflows/ci.yml
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/.github/workflows/ci.yml	2026-01-07 03:02:31.538848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/.github/workflows/ci.yml	2026-01-07 03:02:31.542848175 +0000
                @@ -7 +7,2 @@
                -  contents: read
                +  contents: write
                +  pull-requests: write
                @@ -11,12 +12,3 @@
                -    runs-on: ubuntu-latest
                -
                -    steps:
                -      - uses: actions/checkout@v4
                -
                -      - name: Set up Ruby
                -        uses: yettoapp/actions/setup-languages@main
                -        with:
                -          ruby: true
                -
                -      - name: Run tests
                -        run: bundle exec rake test
                +    uses: gjtorikian/actions/.github/workflows/ruby_test_suite.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
        .github/workflows/lint.yml
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/.github/workflows/lint.yml	2026-01-07 03:02:31.538848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/.github/workflows/lint.yml	2026-01-07 03:02:31.542848175 +0000
                @@ -1 +1 @@
                -name: Linting
                +name: Lint
                @@ -9 +9 @@
                -  contents: read
                +  contents: write
                @@ -12,4 +12,4 @@
                -  test:
                -    runs-on: ubuntu-latest
                -    steps:
                -      - uses: actions/checkout@v4
                +  lint:
                +    uses: gjtorikian/actions/.github/workflows/ruby_lint.yml@main
                +    secrets:
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                @@ -17,7 +16,0 @@
                -      - name: Set up Ruby
                -        uses: yettoapp/actions/setup-languages@main
                -        with:
                -          ruby: true
                -
                -      - name: Rubocop
                -        run: bundle exec rake rubocop
        .github/workflows/publish.yml
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/.github/workflows/publish.yml	2026-01-07 03:02:31.538848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/.github/workflows/publish.yml	2026-01-07 03:02:31.543848175 +0000
                @@ -1 +1 @@
                -name: Release
                +name: Tag and Release
                @@ -9,0 +10,9 @@
                +  pull_request_target:
                +    types:
                +      - closed
                +
                +permissions:
                +  pull-requests: write
                +  contents: write
                +  id-token: write
                +  actions: write
                @@ -13 +22 @@
                -    uses: yettoapp/actions/.github/workflows/ruby_gem_release.yml@main
                +    uses: gjtorikian/actions/.github/workflows/ruby_gem_release.yml@main
                @@ -15,2 +24 @@
                -      rubygems_api_key: ${{ secrets.RUBYGEMS_API_BOT_KEY }}
                -      gh_token: ${{ secrets.PUBLIC_PUSH_TO_PROTECTED_BRANCH }}
                +      gh_token: ${{ secrets.GITHUB_TOKEN }}
                @@ -19,0 +28,3 @@
                +      prepare: ${{ github.event_name == 'push' }}
                +      release: ${{ github.event_name == 'workflow_dispatch' || ((github.event.pull_request.merged == true) && (contains(github.event.pull_request.labels.*.name, 'release'))) }}
                +      oidc_role_to_assume: rg_oidc_akr_h9dt72ax2bswgewowdv7
        .gitignore
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/.gitignore	2026-01-07 03:02:31.538848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/.gitignore	2026-01-07 03:02:31.543848175 +0000
                @@ -20 +20,3 @@
                -vendor/gems
                \ No newline at end of file
                +
                +vendor/cache/
                +vendor/bundle/
        .rubocop.yml
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/.rubocop.yml	2026-01-07 03:02:31.538848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/.rubocop.yml	2026-01-07 03:02:31.543848175 +0000
                @@ -17,0 +18,3 @@
                +
                +ThreadSafety/ClassAndModuleAttributes:
                +  Enabled: false
        .vscode/settings.json
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/.vscode/settings.json	2026-01-07 03:02:31.539848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/.vscode/settings.json	2026-01-07 03:02:31.543848175 +0000
                @@ -6,0 +7,3 @@
                +    },
                +    "[github-actions-workflow]": {
                +        "editor.defaultFormatter": "redhat.vscode-yaml"
        CHANGELOG.md
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/CHANGELOG.md	2026-01-07 03:02:31.539848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/CHANGELOG.md	2026-01-07 03:02:31.543848175 +0000
                @@ -0,0 +1,67 @@
                +# [v3.2.4] - 06-01-2026
                +## What's Changed
                +* [skip test] Release v3.2.3 by @github-actions[bot] in https://github.com/gjtorikian/html-pipeline/pull/419
                +* Bump actions/checkout from 4 to 5 in the github-actions group by @dependabot[bot] in https://github.com/gjtorikian/html-pipeline/pull/424
                +* Bump actions/checkout from 5 to 6 in the github-actions group by @dependabot[bot] in https://github.com/gjtorikian/html-pipeline/pull/426
                +* Support Ruby 4.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/427
                +* Allow for completely nil sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/428
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.3...v3.2.4
                +# [v3.2.3] - 24-04-2025
                +## What's Changed
                +* Allow for just text pipelines by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/418
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.2...v3.2.3
                +# [v3.2.2] - 09-08-2024
                +## What's Changed
                +* Add support for @ prefix on MentionFilter base_url by @jeremysmithco in https://github.com/gjtorikian/html-pipeline/pull/411
                +* Bugfix: sanitization-only filters should still work by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/414
                +
                +## New Contributors
                +* @jeremysmithco made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/411
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.1...v3.2.2
                +# [v3.2.1] - 16-07-2024
                +## What's Changed
                +* Update commonmarker requirement from ~> 1.0.0.pre7 to ~> 1.1.2 in the bundler-dependencies group by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/404
                +* Remove superfluous sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/408
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.0...v3.2.1
                +## [v3.2.0] - 30-04-2024
                +## What's Changed
                +* Pass context along to every part of the pipeline by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/403
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.1...v3.2.0
                +## [v3.1.1] - 09-04-2024
                +## What's Changed
                +* Correct missing method implementation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/401
                +
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.0...v3.1.1
                +## [v3.1.0] - 28-02-2024
                +## What's Changed
                +* UPGRADING:  not removed by @dentarg in https://github.com/gjtorikian/html-pipeline/pull/397
                +* [BREAKING]  now requires instantiation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/398
                +
                +## New Contributors
                +* @dentarg made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/397
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.3...v3.1.0
                +## [v3.0.3] - 02-02-2024
                +
                +## What's Changed
                +
                +- Fix typo in README by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/394
                +- Prevent exception by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/395
                +- Cut 3.0.3 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/396
                +
                +## New Contributors
                +
                +- @ppworks made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/394
                +
                +**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.2...v3.0.3
                +
                @@ -1,0 +69 @@
                +
                @@ -3,2 +71,3 @@
                -* README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
                -* Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
                +
                +- README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
                +- Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
                @@ -7 +76,2 @@
                -* @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
                +
                +- @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
                @@ -9,0 +80 @@
                +
                @@ -10,0 +82 @@
                +
                @@ -12 +84,2 @@
                -* Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
                +
                +- Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
                @@ -15 +88,2 @@
                -* @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
                +
                +- @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
                @@ -17,0 +92 @@
                +
                @@ -18,0 +94 @@
                +
                @@ -20,20 +96,21 @@
                -* Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
                -* add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
                -* Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
                -* Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
                -* Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
                -* Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
                -* You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
                -* Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
                -* Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
                -* Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
                -* V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
                -* Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
                -* req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
                -* Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
                -* Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
                -* Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
                -* Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
                -* Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
                -* Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
                -* :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
                +
                +- Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
                +- add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
                +- Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
                +- Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
                +- Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
                +- Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
                +- You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
                +- Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
                +- Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
                +- Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
                +- V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
                +- Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
                +- req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
                +- Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
                +- Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
                +- Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
                +- Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
                +- Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
                +- Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
                +- :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
                @@ -42,3 +119,4 @@
                -* @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
                -* @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
                -* @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
                +
                +- @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
                +- @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
                +- @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
                @@ -46,0 +125 @@
                +
                @@ -47,0 +127 @@
                +
                @@ -48,0 +129 @@
                +
                @@ -79 +160 @@
                -- req convert\_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
                +- req convert_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
                @@ -140 +221 @@
                -- Replace EscapeUtils.escape\_html with CGI.escape\_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
                +- Replace EscapeUtils.escape_html with CGI.escape_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
                @@ -312 +393 @@
                -- New feature request for hashtags \# filter  [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
                +- New feature request for hashtags \# filter [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
                @@ -415 +496 @@
                --   add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
                +- add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
                @@ -424 +505 @@
                -- Missing context keys for HTML::Pipeline::EmojiFilter: :asset\_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
                +- Missing context keys for HTML::Pipeline::EmojiFilter: :asset_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
                @@ -507,2 +588,2 @@
                -- Fix for calling mention\_link\_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
                -- Add html-pipeline-linkify\_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- Fix for calling mention_link_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
                +- Add html-pipeline-linkify_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
                @@ -564 +645 @@
                -- MentionFilter base\_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
                +- MentionFilter base_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
                @@ -576,2 +657,2 @@
                -- Add 3rd party gem: html-pipeline-rouge\_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
                -- MentionFilter\#link\_to\_mentioned\_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
                +- Add 3rd party gem: html-pipeline-rouge_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- MentionFilter\#link_to_mentioned_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
                @@ -579 +660 @@
                -- Implement new context option: ignored\_ancestor\_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
                +- Implement new context option: ignored_ancestor_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
                @@ -596 +677 @@
                -- @mention\_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
                +- @mention_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
                @@ -603 +684 @@
                -- Prefer http\_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
                +- Prefer http_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
                @@ -635 +716 @@
                -- Remove RUBY\_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
                +- Remove RUBY_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
                @@ -662 +743 @@
                -- AutolinkFilter link\_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
                +- AutolinkFilter link_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
                @@ -750 +831 @@
                -- Add link\_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
                +- Add link_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
                @@ -752 +833 @@
                -- use xml\_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
                +- use xml_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
                @@ -820 +901 @@
                -- Allow passing skip\_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
                +- Allow passing skip_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
                @@ -873 +954 @@
                -- add result\[:mentioned\_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
                +- add result\[:mentioned_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
                @@ -889 +970 @@
                -- Bump escape\_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
                +- Bump escape_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
                @@ -981,4 +1061,0 @@
                -
                -
                -
                -\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
        Gemfile
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/Gemfile	2026-01-07 03:02:31.539848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/Gemfile	2026-01-07 03:02:31.543848175 +0000
                @@ -13,2 +12,0 @@
                -gem "github_changelog_generator", "~> 1.16"
                -
                @@ -30 +28 @@
                -  gem "commonmarker", "~> 1.0.0.pre7", require: false
                +  gem "commonmarker", "~> 2.6", require: false
                @@ -34,2 +32,2 @@
                -  gem "minitest"
                -
                +  gem "minitest", "~> 6.0"
                +  gem "minitest-mock", "~> 5.27"
        README.md
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/README.md	2026-01-07 03:02:31.539848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/README.md	2026-01-07 03:02:31.544848175 +0000
                @@ -3,3 +2,0 @@
                -> **Note**
                -> This README refers to the behavior in the new 3.0.0.pre gem.
                -
                @@ -63 +60,7 @@
                -As an example, suppose we want to transform Commonmark source text into Markdown HTML. With the content, we also want to:
                +As an example, suppose we want to transform Commonmark source text into Markdown HTML:
                +
                +```
                +Hey there, @gjtorikian
                +```
                +
                +With the content, we also want to:
                @@ -65 +68 @@
                -- change every instance of `$NAME` to "`Johnny"
                +- change every instance of `Hey` to `Hello`
                @@ -76 +79 @@
                -    text.gsub("$NAME", "Johnny")
                +    text.gsub("Hey", "Hello")
                @@ -107 +110 @@
                -context =  { markdown: { extensions: { footnotes: false } } }
                +context = { markdown: { extensions: { footnotes: false } } }
                @@ -111,0 +115,10 @@
                +Alternatively, you can construct a pipeline, and pass in a context during the call:
                +
                +```ruby
                +pipeline = HTMLPipeline.new(
                +  convert_filter: HTMLPipeline::ConvertFilter::MarkdownFilter.new,
                +  node_filters: [HTMLPipeline::NodeFilter::MentionFilter.new]
                +)
                +pipeline.call(user_supplied_text, context: { markdown: { extensions: { footnotes: false } } })
                +```
                +
                @@ -161 +174 @@
                -Because the web can be a scary place, HTML is automatically sanitized after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
                +Because the web can be a scary place, **HTML is automatically sanitized** after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
                @@ -163 +176 @@
                -The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings.
                +The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings. Note that users must correctly configure the sanitization configuration if they expect to use it correctly in conjunction with handlers which manipulate HTML.
                @@ -174 +187 @@
                -    HTMLPipeline::MarkdownFilter,
                +    HTMLPipeline::TextFilter::ImageFilter.new,
                @@ -202 +215 @@
                -    HTMLPipeline::MarkdownFilter,
                +    HTMLPipeline::TextFilter::ImageFilter.new,
                @@ -214 +227 @@
                -`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a custom state for `result` to take advantage of.
                +`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a fresh custom state for `result` to start from each time the pipeline is called.
                @@ -333,28 +345,0 @@
                -## Third Party Extensions
                -
                -If you have an idea for a filter, propose it as
                -[an issue](https://github.com/gjtorikian/html-pipeline/issues) first. This allows us to discuss
                -whether the filter is a common enough use case to belong in this gem, or should be
                -built as an external gem.
                -
                -Here are some extensions people have built:
                -
                -- [html-pipeline-asciidoc_filter](https://github.com/asciidoctor/html-pipeline-asciidoc_filter)
                -- [jekyll-html-pipeline](https://github.com/gjtorikian/jekyll-html-pipeline)
                -- [nanoc-html-pipeline](https://github.com/burnto/nanoc-html-pipeline)
                -- [html-pipeline-bitly](https://github.com/dewski/html-pipeline-bitly)
                -- [html-pipeline-cite](https://github.com/lifted-studios/html-pipeline-cite)
                -- [tilt-html-pipeline](https://github.com/bradgessler/tilt-html-pipeline)
                -- [html-pipeline-wiki-link'](https://github.com/lifted-studios/html-pipeline-wiki-link) - WikiMedia-style wiki links
                -- [task_list](https://github.com/github/task_list) - GitHub flavor Markdown Task List
                -- [html-pipeline-nico_link](https://github.com/rutan/html-pipeline-nico_link) - An HTMLPipeline filter for [niconico](http://www.nicovideo.jp) description links
                -- [html-pipeline-gitlab](https://gitlab.com/gitlab-org/html-pipeline-gitlab) - This gem implements various filters for html-pipeline used by GitLab
                -- [html-pipeline-youtube](https://github.com/st0012/html-pipeline-youtube) - An HTMLPipeline filter for YouTube links
                -- [html-pipeline-flickr](https://github.com/st0012/html-pipeline-flickr) - An HTMLPipeline filter for Flickr links
                -- [html-pipeline-vimeo](https://github.com/dlackty/html-pipeline-vimeo) - An HTMLPipeline filter for Vimeo links
                -- [html-pipeline-hashtag](https://github.com/mr-dxdy/html-pipeline-hashtag) - An HTMLPipeline filter for hashtags
                -- [html-pipeline-linkify_github](https://github.com/jollygoodcode/html-pipeline-linkify_github) - An HTMLPipeline filter to autolink GitHub urls
                -- [html-pipeline-redcarpet_filter](https://github.com/bmikol/html-pipeline-redcarpet_filter) - Render Markdown source text into Markdown HTML using Redcarpet
                -- [html-pipeline-typogruby_filter](https://github.com/bmikol/html-pipeline-typogruby_filter) - Add Typogruby text filters to your HTMLPipeline
                -- [korgi](https://github.com/jodeci/korgi) - HTMLPipeline filters for links to Rails resources
                -
                @@ -378 +363 @@
                -config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.dup
                +config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.deep_dup
        UPGRADING.md
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/UPGRADING.md	2026-01-07 03:02:31.539848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/UPGRADING.md	2026-01-07 03:02:31.544848175 +0000
                @@ -17 +16,0 @@
                -
                @@ -20 +18,0 @@
                -- `TextFilter`
        html-pipeline.gemspec
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/html-pipeline.gemspec	2026-01-07 03:02:31.539848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/html-pipeline.gemspec	2026-01-07 03:02:31.544848175 +0000
                @@ -19 +19,2 @@
                -  gem.required_ruby_version = "~> 3.1"
                +  gem.required_ruby_version = ">= 3.2"
                +
                @@ -28 +29 @@
                -  gem.add_dependency("selma", "~> 0.1")
                +  gem.add_dependency("selma", "~> 0.4")
        lib/html_pipeline.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline.rb	2026-01-07 03:02:31.540848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline.rb	2026-01-07 03:02:31.544848175 +0000
                @@ -125 +125 @@
                -    if @convert_filter.nil? && (!@text_filters.empty? && !@node_filters.empty?)
                +    if @convert_filter.nil? && !@text_filters.empty? && !@node_filters.empty?
                @@ -156,3 +156,3 @@
                -        text_filters: @text_filters.map(&:name),
                -        context: context,
                -        result: result,
                +        text_filters: @text_filters.map { |f| f.class.name },
                +        context:,
                +        result:,
                @@ -163 +163 @@
                -            perform_filter(filter, doc, context: context, result: result)
                +            perform_filter(filter, doc, context: (filter.context || {}).merge(context), result:)
                @@ -174 +174 @@
                -        html = @convert_filter.call(text)
                +        html = @convert_filter.call(text, context: (@convert_filter.context || {}).merge(context))
                @@ -178 +178,11 @@
                -    unless @node_filters.empty?
                +    rewriter_options = {
                +      memory: {
                +        max_allowed_memory_usage: 5242880, # arbitrary limit of 5MB
                +      },
                +    }
                +
                +    if @node_filters.empty? && !@sanitization_config.nil?
                +      instrument("sanitization.html_pipeline", payload) do
                +        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, options: rewriter_options).rewrite(html)
                +      end
                +    elsif @node_filters.any?
                @@ -180,2 +190,2 @@
                -        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
                -        html = result[:output]
                +        @node_filters.each { |filter| filter.context = (filter.context || {}).merge(context) }
                +        result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters, options: rewriter_options).rewrite(html)
                @@ -184,2 +194,2 @@
                -          context: context,
                -          result: result,
                +          context:,
                +          result:,
                @@ -188,4 +198,2 @@
                -    end
                -
                -    instrument("html_pipeline.sanitization", payload) do
                -      result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
                +    else
                +      result[:output] = html
                @@ -207,3 +215,3 @@
                -      filter: filter.name,
                -      context: context,
                -      result: result,
                +      filter: filter.class.name,
                +      context:,
                +      result:,
                @@ -213 +221 @@
                -      filter.call(doc, context: context, result: result)
                +      filter.call(doc, context:, result:)
                @@ -219 +227 @@
                -    result = call(input, context: context, result: result)
                +    result = call(input, context:, result:)
                @@ -269 +277 @@
                -      verb = invalid_filters.count == 1 ? "does" : "do"
                +      verb = invalid_filters.one? ? "does" : "do"
        lib/html_pipeline/convert_filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/convert_filter.rb	2026-01-07 03:02:31.540848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/convert_filter.rb	2026-01-07 03:02:31.544848175 +0000
                @@ -8 +8 @@
                -      super(context: context, result: result)
                +      super
        lib/html_pipeline/convert_filter/markdown_filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/convert_filter/markdown_filter.rb	2026-01-07 03:02:31.540848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/convert_filter/markdown_filter.rb	2026-01-07 03:02:31.544848175 +0000
                @@ -6 +6 @@
                -  class ConvertFilter
                +  class ConvertFilter < Filter
                @@ -15 +15 @@
                -        super(context: context, result: result)
                +        super
                @@ -19,2 +19,2 @@
                -      def call(text)
                -        options = @context.fetch(:markdown, {})
                +      def call(text, context: @context)
                +        options = context.fetch(:markdown, {})
        lib/html_pipeline/filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/filter.rb	2026-01-07 03:02:31.540848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/filter.rb	2026-01-07 03:02:31.544848175 +0000
                @@ -30 +30 @@
                -    attr_reader :context
                +    attr_accessor :context
        lib/html_pipeline/node_filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/node_filter.rb	2026-01-07 03:02:31.540848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/node_filter.rb	2026-01-07 03:02:31.544848175 +0000
                @@ -6,0 +7,2 @@
                +    attr_accessor :context
                +
        lib/html_pipeline/node_filter/emoji_filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/node_filter/emoji_filter.rb	2026-01-07 03:02:31.540848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/node_filter/emoji_filter.rb	2026-01-07 03:02:31.545848175 +0000
                @@ -76 +76 @@
                -            next if value.nil?
                +              next if value.nil?
                @@ -78,2 +78,2 @@
                -            value = value.respond_to?(:call) && value.call(name) || value
                -            arr << %(#{attr}="#{value}")
                +              value = value.respond_to?(:call) && value.call(name) || value
                +              arr << %(#{attr}="#{value}")
        lib/html_pipeline/node_filter/mention_filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/node_filter/mention_filter.rb	2026-01-07 03:02:31.541848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/node_filter/mention_filter.rb	2026-01-07 03:02:31.549848175 +0000
                @@ -118 +118,2 @@
                -        url << "/" unless %r{[/~]\z}.match?(url)
                +        excluded_prefixes = %r{[/(?:~|@]\z}
                +        url << "/" unless excluded_prefixes.match?(url)
        lib/html_pipeline/node_filter/syntax_highlight_filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/node_filter/syntax_highlight_filter.rb	2026-01-07 03:02:31.541848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/node_filter/syntax_highlight_filter.rb	2026-01-07 03:02:31.549848175 +0000
                @@ -18 +18 @@
                -        super(context: context, result: result)
                +        super
        lib/html_pipeline/node_filter/team_mention_filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/node_filter/team_mention_filter.rb	2026-01-07 03:02:31.541848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/node_filter/team_mention_filter.rb	2026-01-07 03:02:31.549848175 +0000
                @@ -97 +97,2 @@
                -        url << "/" unless %r{[/~]\z}.match?(url)
                +        excluded_prefixes = %r{[/(?:~|@]\z}
                +        url << "/" unless excluded_prefixes.match?(url)
        lib/html_pipeline/text_filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/text_filter.rb	2026-01-07 03:02:31.542848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/text_filter.rb	2026-01-07 03:02:31.549848175 +0000
                @@ -7,6 +7,2 @@
                -    def initialize(text, context: {}, result: {})
                -      raise TypeError, "text must be a String" unless text.is_a?(String)
                -
                -      # Ensure that this is always a string
                -      @text = text.respond_to?(:to_str) ? text.to_str : text.to_s
                -      super(context: context, result: result)
                +    def initialize(context: {}, result: {})
                +      super
                @@ -16,2 +12,6 @@
                -      def call(input, context: {}, result: {})
                -        new(input, context: context, result: result).call
                +      def call(text, context: {}, result: {})
                +        raise TypeError, "text must be a String" unless text.is_a?(String)
                +
                +        # Ensure that this is always a string
                +        text = text.respond_to?(:to_str) ? text.to_str : text.to_s
                +        new(context: context, result: result).call(text)
        lib/html_pipeline/text_filter/image_filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/text_filter/image_filter.rb	2026-01-07 03:02:31.542848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/text_filter/image_filter.rb	2026-01-07 03:02:31.549848175 +0000
                @@ -12,2 +12,2 @@
                -      def call
                -        @text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
                +      def call(text, context: {}, result: {})
                +        text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
        lib/html_pipeline/text_filter/plain_text_input_filter.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/text_filter/plain_text_input_filter.rb	2026-01-07 03:02:31.542848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/text_filter/plain_text_input_filter.rb	2026-01-07 03:02:31.549848175 +0000
                @@ -8,2 +8,2 @@
                -      def call
                -        "<div>#{CGI.escapeHTML(@text)}</div>"
                +      def call(text, context: {}, result: {})
                +        "<div>#{CGI.escapeHTML(text)}</div>"
        lib/html_pipeline/version.rb
                --- /tmp/d20260107-501-s6d49m/html-pipeline-3.0.3/lib/html_pipeline/version.rb	2026-01-07 03:02:31.542848175 +0000
                +++ /tmp/d20260107-501-s6d49m/html-pipeline-3.2.4/lib/html_pipeline/version.rb	2026-01-07 03:02:31.550848175 +0000
                @@ -4 +4 @@
                -  VERSION = "3.0.3"
                +  VERSION = "3.2.4"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare selma 0.4.11 0.4.15

Compared versions: ["0.4.11", "0.4.15"]
  DIFFERENT date:
    0.4.11: 2024-12-29 00:00:00 UTC
    0.4.15: 2026-01-06 00:00:00 UTC
  DIFFERENT required_ruby_version:
    0.4.11: >= 3.2, < 3.5.dev
    0.4.15: >= 3.2, < 4.1.dev
  DIFFERENT required_rubygems_version:
    0.4.11: ~> 3.4
    0.4.15: >= 3.4
  DIFFERENT version:
    0.4.11: 0.4.11
    0.4.15: 0.4.15
  DIFFERENT files:
    0.4.11->0.4.15:
      * Added:
            lib/selma/3.3/selma.so 
              (!) Unexpected permissions: 100755
              (!) File is executable
            lib/selma/4.0/selma.so 
              (!) Unexpected permissions: 100755
              (!) File is executable
      * Changed:
            README.md +3/-3
            lib/selma/version.rb +1/-1

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare rb_sys 0.9.105 0.9.124

Compared versions: ["0.9.105", "0.9.124"]
  DIFFERENT cert_chain:
    0.9.105: ["-----BEGIN CERTIFICATE-----\nMIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRQwEgYDVQQDDAtpLmtl\ncnNleW1lcjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD\nY29tMB4XDTI0MDQxODA1MzY0N1oXDTI1MDQxODA1MzY0N1owQjEUMBIGA1UEAwwL\naS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk\nARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ2pG+er4cP\nPasxsMIKL9/tmLL4gh80EMuF3SCS0qZoh+Oo8dkvRYxW8NXdwEIcp3cCNgE+5G+J\nTCMOVF8S15n1Z1P7xxXiXxa/BIofKKbtatVRngm14uR/6pjdkvLXqlrWdS57bNwv\n7LtpzYVfDHfsl/qRWaEi4jq00PNCRSWjcva8teqswjBg8KlwGtyygpezPbVSWP8Y\nvzWZmVF7fqRBXU78Ah0+pNOhslBXDTvI3xJdN4hQ3H7rLjpD/qxKWq/8o+Qvx6cX\ndNZ3ugH/Pr3BAsqt4JFLXin9AK7PO9GDMH5JXJrUb+hAt2VNIZqpz9VlKA6BA0jN\neWGea+yCZkECAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O\nBBYEFOkrF6hsocaIMOjR/K3JBzyXCLJPMA0GCSqGSIb3DQEBCwUAA4IBAQARHgco\nyCxWUqN+HBGewmSB7T4oq6YS2FtU62K+GuWWCTqjl5byLKMXQW8HPDja9TC1My1m\n2r0uDshtUvUjuB/Vfe9jVMTjnPBspHZYo0MRuMPc7owJaahjkqD3l7w9aa8Ci5aC\nYU4Aj71Sc8s7YIxgHn/yIUdCe1yu6cC0+h+Ss9r/Yjr53NNXwjGQlDmH1eHcVQGZ\nmEoVcZO1uWNtRPPsn1gfvKLPjRe5pclXQnGviS5DiH0Du+8QMxQGBJnYz2zSMW7G\nLvd35BNvZkhFzs9xfykhurpkT2TiP2F3ZFn9dwLXMFe41pwrtEYLIWhYi8mUG4Ek\n6aR8M/tqIpChVV39\n-----END CERTIFICATE-----\n"]
    0.9.124: ["-----BEGIN CERTIFICATE-----\nMIIDZTCCAk2gAwIBAgIUBA3+R8/tEu+w03IWit3NPqhAv5EwDQYJKoZIhvcNAQEL\nBQAwQjEUMBIGA1UEAwwLaS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFp\nbDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNTA1MDcxOTA3NDNaFw0zNTA1MDUx\nOTA3NDNaMEIxFDASBgNVBAMMC2kua2Vyc2V5bWVyMRUwEwYKCZImiZPyLGQBGRYF\nZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQDCdqRvnq+HDz2rMbDCCi/f7Ziy+IIfNBDLhd0gktKmaIfjqPHZ\nL0WMVvDV3cBCHKd3AjYBPuRviUwjDlRfEteZ9WdT+8cV4l8WvwSKHyim7WrVUZ4J\nteLkf+qY3ZLy16pa1nUue2zcL+y7ac2FXwx37Jf6kVmhIuI6tNDzQkUlo3L2vLXq\nrMIwYPCpcBrcsoKXsz21Ulj/GL81mZlRe36kQV1O/AIdPqTTobJQVw07yN8SXTeI\nUNx+6y46Q/6sSlqv/KPkL8enF3TWd7oB/z69wQLKreCRS14p/QCuzzvRgzB+SVya\n1G/oQLdlTSGaqc/VZSgOgQNIzXlhnmvsgmZBAgMBAAGjUzBRMB0GA1UdDgQWBBTp\nKxeobKHGiDDo0fytyQc8lwiyTzAfBgNVHSMEGDAWgBTpKxeobKHGiDDo0fytyQc8\nlwiyTzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAhKxsiI5Xz\nH3isxJy4pD1FZ6rrU0gg/kFkWlsYgrw/Cqt53Nj6ValhpbA/VoftE80xEHfv4qR0\neiBkYVyULXZbojF9qRokVTXDY6lWzHdesbSt314IBBJR55aTw4IPHGikhMNeZ3M1\nffINONWhsL+ZwMaiLedThkRkPNzCvvRSNZiQXsdl/xV55JWqmmgfONCafx6/L8cI\nEZEISe0Z9uvVtO6G+mfX6nfGGVjJg6B53wSXaipDGxOh0vn1YiQzPxY+8ouXmfj6\nC/k2s4tlFwg7XEtz7wjSnVeiNP9EOK50WgVr4muWx1rhvOFhpxypONCCANJUILGk\n1JUZhXwcbcst\n-----END CERTIFICATE-----\n"]
  DIFFERENT date:
    0.9.105: 2024-12-28 00:00:00 UTC
    0.9.124: 1980-01-01 00:00:00 UTC
  DIFFERENT required_ruby_version:
    0.9.105: >= 2.5.0
    0.9.124: >= 2.7.0
  DIFFERENT rubygems_version:
    0.9.105: 3.5.22
    0.9.124: 4.0.3
  DIFFERENT version:
    0.9.105: 0.9.105
    0.9.124: 0.9.124
  DIFFERENT files:
    0.9.105->0.9.124:
      * Changed:
            README.md +16/-75
            certs/ianks.pem +19/-18
            exe/rb-sys-dock +44/-16
            lib/rb_sys/cargo_builder.rb +6/-6
            lib/rb_sys/error.rb +2/-2
            lib/rb_sys/mkmf.rb +19/-7
            lib/rb_sys/mkmf/config.rb +9/-5
            lib/rb_sys/toolchain_info/data.rb +1/-1
            lib/rb_sys/version.rb +1/-1
  DIFFERENT runtime dependencies:
    0.9.105->0.9.124:
      * Added:
            rake-compiler-dock ["= 1.11.0"] (runtime)

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff rb_sys 0.9.105 0.9.124

Compared versions: ["0.9.105", "0.9.124"]
  DIFFERENT files:
    0.9.105->0.9.124:
      * Changed:
        README.md
                --- /tmp/d20260107-763-udh9ja/rb_sys-0.9.105/README.md	2026-01-07 03:02:55.168835573 +0000
                +++ /tmp/d20260107-763-udh9ja/rb_sys-0.9.124/README.md	2026-01-07 03:02:55.170835572 +0000
                @@ -7,2 +7,2 @@
                -The `rb_sys` gem is a Ruby gem makes it easy to build native Ruby extensions in Rust. It interops with the existing Ruby
                -native extension toolchains (i.e. `rake-compiler`) to make testing, building, and cross compilation of gems easy.
                +The `rb_sys` gem makes it easy to build native Ruby extensions in Rust. It interoperates with existing Ruby native
                +extension toolchains (i.e. `rake-compiler`) to make testing, building, and cross-compilation of gems easy.
                @@ -10 +10 @@
                -## `RbSys::ExtensionTask`
                +## Documentation
                @@ -12,2 +12,8 @@
                -This gem provides a `RbSys::ExtensionTask` class that can be used to build a Ruby extension in Rust. It's a thin wrapper
                -around `Rake::ExtensionTask` that provides sane defaults for building Rust extensions.
                +For comprehensive documentation, please refer to the [Ruby on Rust Book](https://oxidize-rb.github.io/rb-sys/), which
                +includes:
                +
                +- [API Reference for rb_sys Gem Configuration](https://oxidize-rb.github.io/rb-sys/api-reference/rb-sys-gem-config.html)
                +- [The Build Process](https://oxidize-rb.github.io/rb-sys/build-process.html)
                +- [Cross-Platform Development](https://oxidize-rb.github.io/rb-sys/cross-platform.html)
                +
                +## Basic Usage
                @@ -17 +22,0 @@
                -
                @@ -24,3 +29 @@
                -
                -  # If you want to use `rb-sys-dock` for cross-compilation:
                -  ext.cross_compile = true
                +  ext.cross_compile = true  # For rb-sys-dock cross-compilation
                @@ -30,5 +32,0 @@
                -## `create_rust_makefile`
                -
                -This gem provides a simple helper to build a Ruby compatible Makefile for you Rust extension. For a full example, see
                -the [examples](./../examples) directory.
                -
                @@ -36,3 +34 @@
                -# ext/rust_reverse/extconf.rb
                -
                -# We need to require mkmf *first* this since `rake-compiler` injects code here for cross compilation
                +# ext/my_gem/extconf.rb
                @@ -42,27 +38 @@
                -create_rust_makefile("rust_reverse") do |r|
                -  # Create debug builds in dev. Make sure that release gems are compiled with
                -  # `RB_SYS_CARGO_PROFILE=release` (optional)
                -  r.profile = ENV.fetch("RB_SYS_CARGO_PROFILE", :dev).to_sym
                -
                -  # Can be overridden with `RB_SYS_CARGO_FEATURES` env var (optional)
                -  r.features = ["test-feature"]
                -
                -  # You can add whatever env vars you want to the env hash (optional)
                -  r.env = {"FOO" => "BAR"}
                -
                -  # If your Cargo.toml is in a different directory, you can specify it here (optional)
                -  r.ext_dir = "."
                -
                -  # Extra flags to pass to the $RUSTFLAGS environment variable (optional)
                -  r.extra_rustflags = ["--cfg=some_nested_config_var_for_crate"]
                -
                -  # Force a rust toolchain to be installed via rustup (optional)
                -  # You can also set the env var `RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN=true`
                -  r.force_install_rust_toolchain = "stable"
                -
                -  # Clean up the target/ dir after `gem install` to reduce bloat (optional)
                -  r.clean_after_install = false # default: true if invoked by rubygems
                -
                -  # Auto-install Rust toolchain if not present on "gem install" (optional)
                -  r.auto_install_rust_toolchain = false # default: true if invoked by rubygems
                -end
                +create_rust_makefile("my_gem")
                @@ -71,31 +41,2 @@
                -## Tips and Tricks
                -
                -- When using `rake-compiler` to build your gem, you can use the `RB_SYS_CARGO_PROFILE` environment variable to set the
                -  Cargo profile (i.e. `release` or `dev`).
                -
                -- You can pass Cargo arguments to `rake-compiler` like so: `rake compile -- --verbose`
                -
                -- It's possible to force an installation of a Rust toolchain by setting the `RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN`
                -  environment variable. This will install [rustup](https://rustup.rs/) and [cargo](https://crates.io/) in the build
                -  directory, so the end user does not have to have Rust pre-installed. Ideally, this should be a last resort, as it's
                -  better to already have the toolchain installed on your system.
                -
                -## Troubleshooting
                -
                -### Libclang issues
                -
                -If you see an error like this:
                -
                -```
                -thread 'main' panicked at 'Unable to find libclang: "couldn't find any valid shared libraries matching: \['libclang.so', 'libclang-*.so', 'libclang.so.*', 'libclang-*.so.*'\], set the `LIBCLANG_PATH` environment variable to a path where one of these files can be found (invalid: \[\])"'
                -```
                -
                -This means that bindgen is having issues finding a usable version of libclang. An easy way to fix this is to install the
                -[`libclang` gem](https://github.com/oxidize-rb/libclang-rb), which will install a pre-built version of libclang for you.
                -`rb_sys` will automatically detect this gem and use it.
                -
                -```ruby
                -# Gemfile
                -
                -gem "libclang", "~> 14.0.6"
                -```
                +For full configuration options and more advanced usage, see the
                +[rb_sys Gem Configuration](https://oxidize-rb.github.io/rb-sys/api-reference/rb-sys-gem-config.html) reference.
        certs/ianks.pem
                --- /tmp/d20260107-763-udh9ja/rb_sys-0.9.105/certs/ianks.pem	2026-01-07 03:02:55.168835573 +0000
                +++ /tmp/d20260107-763-udh9ja/rb_sys-0.9.124/certs/ianks.pem	2026-01-07 03:02:55.170835572 +0000
                @@ -2,18 +2,19 @@
                -MIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRQwEgYDVQQDDAtpLmtl
                -cnNleW1lcjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD
                -Y29tMB4XDTI0MDQxODA1MzY0N1oXDTI1MDQxODA1MzY0N1owQjEUMBIGA1UEAwwL
                -aS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
                -ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ2pG+er4cP
                -PasxsMIKL9/tmLL4gh80EMuF3SCS0qZoh+Oo8dkvRYxW8NXdwEIcp3cCNgE+5G+J
                -TCMOVF8S15n1Z1P7xxXiXxa/BIofKKbtatVRngm14uR/6pjdkvLXqlrWdS57bNwv
                -7LtpzYVfDHfsl/qRWaEi4jq00PNCRSWjcva8teqswjBg8KlwGtyygpezPbVSWP8Y
                -vzWZmVF7fqRBXU78Ah0+pNOhslBXDTvI3xJdN4hQ3H7rLjpD/qxKWq/8o+Qvx6cX
                -dNZ3ugH/Pr3BAsqt4JFLXin9AK7PO9GDMH5JXJrUb+hAt2VNIZqpz9VlKA6BA0jN
                -eWGea+yCZkECAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
                -BBYEFOkrF6hsocaIMOjR/K3JBzyXCLJPMA0GCSqGSIb3DQEBCwUAA4IBAQARHgco
                -yCxWUqN+HBGewmSB7T4oq6YS2FtU62K+GuWWCTqjl5byLKMXQW8HPDja9TC1My1m
                -2r0uDshtUvUjuB/Vfe9jVMTjnPBspHZYo0MRuMPc7owJaahjkqD3l7w9aa8Ci5aC
                -YU4Aj71Sc8s7YIxgHn/yIUdCe1yu6cC0+h+Ss9r/Yjr53NNXwjGQlDmH1eHcVQGZ
                -mEoVcZO1uWNtRPPsn1gfvKLPjRe5pclXQnGviS5DiH0Du+8QMxQGBJnYz2zSMW7G
                -Lvd35BNvZkhFzs9xfykhurpkT2TiP2F3ZFn9dwLXMFe41pwrtEYLIWhYi8mUG4Ek
                -6aR8M/tqIpChVV39
                +MIIDZTCCAk2gAwIBAgIUBA3+R8/tEu+w03IWit3NPqhAv5EwDQYJKoZIhvcNAQEL
                +BQAwQjEUMBIGA1UEAwwLaS5rZXJzZXltZXIxFTATBgoJkiaJk/IsZAEZFgVnbWFp
                +bDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yNTA1MDcxOTA3NDNaFw0zNTA1MDUx
                +OTA3NDNaMEIxFDASBgNVBAMMC2kua2Vyc2V5bWVyMRUwEwYKCZImiZPyLGQBGRYF
                +Z21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
                +DwAwggEKAoIBAQDCdqRvnq+HDz2rMbDCCi/f7Ziy+IIfNBDLhd0gktKmaIfjqPHZ
                +L0WMVvDV3cBCHKd3AjYBPuRviUwjDlRfEteZ9WdT+8cV4l8WvwSKHyim7WrVUZ4J
                +teLkf+qY3ZLy16pa1nUue2zcL+y7ac2FXwx37Jf6kVmhIuI6tNDzQkUlo3L2vLXq
                +rMIwYPCpcBrcsoKXsz21Ulj/GL81mZlRe36kQV1O/AIdPqTTobJQVw07yN8SXTeI
                +UNx+6y46Q/6sSlqv/KPkL8enF3TWd7oB/z69wQLKreCRS14p/QCuzzvRgzB+SVya
                +1G/oQLdlTSGaqc/VZSgOgQNIzXlhnmvsgmZBAgMBAAGjUzBRMB0GA1UdDgQWBBTp
                +KxeobKHGiDDo0fytyQc8lwiyTzAfBgNVHSMEGDAWgBTpKxeobKHGiDDo0fytyQc8
                +lwiyTzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAhKxsiI5Xz
                +H3isxJy4pD1FZ6rrU0gg/kFkWlsYgrw/Cqt53Nj6ValhpbA/VoftE80xEHfv4qR0
                +eiBkYVyULXZbojF9qRokVTXDY6lWzHdesbSt314IBBJR55aTw4IPHGikhMNeZ3M1
                +ffINONWhsL+ZwMaiLedThkRkPNzCvvRSNZiQXsdl/xV55JWqmmgfONCafx6/L8cI
                +EZEISe0Z9uvVtO6G+mfX6nfGGVjJg6B53wSXaipDGxOh0vn1YiQzPxY+8ouXmfj6
                +C/k2s4tlFwg7XEtz7wjSnVeiNP9EOK50WgVr4muWx1rhvOFhpxypONCCANJUILGk
                +1JUZhXwcbcst
        exe/rb-sys-dock
                --- /tmp/d20260107-763-udh9ja/rb_sys-0.9.105/exe/rb-sys-dock	2026-01-07 03:02:55.168835573 +0000
                +++ /tmp/d20260107-763-udh9ja/rb_sys-0.9.124/exe/rb-sys-dock	2026-01-07 03:02:55.171835572 +0000
                @@ -6,0 +7 @@
                +require "rake_compiler_dock"
                @@ -16 +17 @@
                -  version: RbSys::VERSION,
                +  version: ENV["RCD_IMAGE_VERSION"] || RbSys::VERSION,
                @@ -40,4 +41,6 @@
                -    logger.io = $stdout
                -    puts "- #{p.platform}"
                -  ensure
                -    logger.io = old
                +    begin
                +      logger.io = $stdout
                +      puts "- #{p.platform}"
                +    ensure
                +      logger.io = old
                +    end
                @@ -101,5 +104,8 @@
                -  opts.on("-r", "--ruby-versions LIST", "List all supported Ruby versions") do |arg|
                -    vers = arg.split(/[^0-9.]+/).map do |v|
                -      parts = v.split(".")
                -      parts[2] = "0" if parts[2].nil?
                -      parts.join(".")
                +  opts.on("-r", "--ruby-versions LIST", "Comma- or colon-separated Ruby requirements (e.g., '3.4,~> 3.1')") do |arg|
                +    requirements = arg.tr(":", ",").split(",").map(&:strip).reject(&:empty?)
                +
                +    begin
                +      resolved = RakeCompilerDock.ruby_cc_version(*requirements)
                +    rescue => error
                +      logger.error("Could not resolve requested Ruby versions: #{error.message}")
                +      exit(1)
                @@ -108 +114,3 @@
                -    OPTIONS[:ruby_versions] = vers
                +    resolved_versions = resolved.split(":")
                +    OPTIONS[:ruby_version_requirements] = requirements
                +    OPTIONS[:ruby_versions] = resolved_versions
                @@ -110 +118 @@
                -    logger.info("Building for Ruby requested versions: #{vers}")
                +    logger.info("Building for Ruby requested versions: #{resolved_versions.join(":")}")
                @@ -112 +120 @@
                -    ENV["RUBY_CC_VERSION"] = vers.join(":")
                +    RakeCompilerDock.set_ruby_cc_version(*requirements)
                @@ -118,0 +127 @@
                +    ENV["RCD_IMAGE_VERSION"] = tag
                @@ -362 +371 @@
                -  docker_options = []
                +  docker_options = ["--pid=host"]
                @@ -364,0 +374,2 @@
                +  ruby_versions = ENV["RUBY_CC_VERSION"] || RakeCompilerDock.cross_rubies.values.join(":")
                +
                @@ -386 +397,3 @@
                -      #{ENV["RUBY_CC_VERSION"] ? "-e RUBY_CC_VERSION=#{ENV["RUBY_CC_VERSION"]}" : ""} \
                +      -e RUBY_CC_VERSION="#{ruby_versions}" \
                +      -e RUBY_TARGET="#{OPTIONS.fetch(:platform)}" \
                +      -e SOURCE_DATE_EPOCH="#{source_date_epoch}" \
                @@ -404,0 +418,13 @@
                +def source_date_epoch
                +  return ENV["SOURCE_DATE_EPOCH"] if ENV.key?("SOURCE_DATE_EPOCH")
                +
                +  stdout, status = Open3.capture2("git log -1 --pretty=%ct")
                +
                +  if status.success?
                +    stdout.strip
                +  else
                +    logger.warn("Could not determine SOURCE_DATE_EPOCH from git log, using current time")
                +    Time.now.to_i.to_s
                +  end
                +end
                +
                @@ -426 +452,3 @@
                -  ENV["RCD_IMAGE"] ||= "rbsys/#{ruby_platform}:#{OPTIONS[:version]}"
                +  ENV["RCD_IMAGE_VERSION"] ||= OPTIONS[:version]
                +  version = ENV.fetch("RCD_IMAGE_VERSION")
                +  ENV["RCD_IMAGE"] ||= "rbsys/#{ruby_platform}:#{version}"
        lib/rb_sys/cargo_builder.rb
                --- /tmp/d20260107-763-udh9ja/rb_sys-0.9.105/lib/rb_sys/cargo_builder.rb	2026-01-07 03:02:55.169835573 +0000
                +++ /tmp/d20260107-763-udh9ja/rb_sys-0.9.124/lib/rb_sys/cargo_builder.rb	2026-01-07 03:02:55.172835571 +0000
                @@ -90 +90 @@
                -      prefix = so_ext == "dll" ? "" : "lib"
                +      prefix = (so_ext == "dll") ? "" : "lib"
                @@ -112,0 +113,4 @@
                +    def rubygems_invoked?
                +      ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1" && !ENV.key?("NIX_STORE")
                +    end
                +
                @@ -345,4 +348,0 @@
                -    def rubygems_invoked?
                -      ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1"
                -    end
                -
                @@ -358 +358 @@
                -        super <<~MSG
                +        super(<<~MSG)
        lib/rb_sys/error.rb
                --- /tmp/d20260107-763-udh9ja/rb_sys-0.9.105/lib/rb_sys/error.rb	2026-01-07 03:02:55.169835573 +0000
                +++ /tmp/d20260107-763-udh9ja/rb_sys-0.9.124/lib/rb_sys/error.rb	2026-01-07 03:02:55.172835571 +0000
                @@ -11,2 +11,2 @@
                -        Could not find Cargo package metadata for #{@name.inspect}. Please
                -        check that #{@name.inspect} matches the crate name in your
                +        Could not find Cargo package metadata for #{name.inspect}. Please
                +        check that #{name.inspect} matches the crate name in your
        lib/rb_sys/mkmf.rb
                --- /tmp/d20260107-763-udh9ja/rb_sys-0.9.105/lib/rb_sys/mkmf.rb	2026-01-07 03:02:55.169835573 +0000
                +++ /tmp/d20260107-763-udh9ja/rb_sys-0.9.124/lib/rb_sys/mkmf.rb	2026-01-07 03:02:55.172835571 +0000
                @@ -144 +144 @@
                -        gemclean:
                +        gemclean: install-so
                @@ -148 +148 @@
                -        install: #{builder.clean_after_install ? "install-so gemclean" : "install-so"}
                +        install: #{builder.clean_after_install ? "gemclean" : "install-so"}
                @@ -252,0 +253,3 @@
                +      rustup_default_cmd = "$(Q) $(CARGO_HOME)/bin/rustup default $(RB_SYS_DEFAULT_TOOLCHAIN)"
                +      rustup_toolchain_cmd = "$(Q) $(CARGO_HOME)/bin/rustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)"
                +
                @@ -263,2 +266,2 @@
                -        \t$(Q) $(CARGO_HOME)/bin/rustup toolchain install $(RB_SYS_DEFAULT_TOOLCHAIN) --profile $(RB_SYS_RUSTUP_PROFILE)
                -        \t$(Q) $(CARGO_HOME)/bin/rustup default $(RB_SYS_DEFAULT_TOOLCHAIN)
                +        \t#{rustup_toolchain_cmd} || (sleep 5; #{rustup_toolchain_cmd}) || (sleep 5; #{rustup_toolchain_cmd})
                +        \t#{rustup_default_cmd} || (sleep 5; #{rustup_default_cmd}) || (sleep 5; #{rustup_default_cmd})
                @@ -286 +289,10 @@
                -      return unless find_executable("install_name_tool")
                +      # Try to find install_name_tool, checking multiple possible names:
                +      # 1. Native macOS install_name_tool
                +      # 2. Target-prefixed version from osxcross (e.g., aarch64-apple-darwin-install_name_tool)
                +      tool = if find_executable("install_name_tool")
                +        "install_name_tool"
                +      elsif find_executable("$(CARGO_BUILD_TARGET)-install_name_tool")
                +        "$(CARGO_BUILD_TARGET)-install_name_tool"
                +      else
                +        return
                +      end
                @@ -288 +300 @@
                -      '$(Q) install_name_tool -id "" $(DLLIB)'
                +      %($(Q) #{tool} -id "" $(DLLIB))
                @@ -329 +341 @@
                -        "#{"\t" * indent}#{export ? "export " : ""}#{a} ?= #{b}"
                +        "#{"\t" * indent}#{"export " if export}#{a} ?= #{b}"
        lib/rb_sys/mkmf/config.rb
                --- /tmp/d20260107-763-udh9ja/rb_sys-0.9.105/lib/rb_sys/mkmf/config.rb	2026-01-07 03:02:55.169835573 +0000
                +++ /tmp/d20260107-763-udh9ja/rb_sys-0.9.124/lib/rb_sys/mkmf/config.rb	2026-01-07 03:02:55.172835571 +0000
                @@ -58,4 +58,8 @@
                -      # Seems to be the only way to reliably know if we were invoked by Rubygems.
                -      # We want to know this so we can cleanup the target directory after an
                -      # install, to remove bloat.
                -      # @api private
                +      # Unfortunate, but this seems to be the only way to reliably know if we
                +      # were invoked by Rubygems. We want to know this so we can cleanup the
                +      # target directory after an install, to remove bloat.
                +      #
                +      # Note: we avoid nix environments so we do not force recompilation in
                +      # development, and accept that the "clean" task will not automatically
                +      # run.
                +      #
                @@ -63 +67 @@
                -        ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1"
                +        ENV.key?("SOURCE_DATE_EPOCH") && ENV["RB_SYS_TEST"] != "1" && !ENV.key?("NIX_STORE")
        lib/rb_sys/toolchain_info/data.rb
                --- /tmp/d20260107-763-udh9ja/rb_sys-0.9.105/lib/rb_sys/toolchain_info/data.rb	2026-01-07 03:02:55.169835573 +0000
                +++ /tmp/d20260107-763-udh9ja/rb_sys-0.9.124/lib/rb_sys/toolchain_info/data.rb	2026-01-07 03:02:55.173835571 +0000
                @@ -8 +8 @@
                -    DATA = {"arm-linux" => {"rust-target" => "arm-unknown-linux-gnueabihf", "rake-compiler-dock" => {"cc" => "arm-linux-gnueabihf-gcc"}, "docker-platform" => "linux/arm/v7", "supported" => true}, "aarch64-linux" => {"rust-target" => "aarch64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "aarch64-linux-gnu-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "aarch64-linux-musl" => {"rust-target" => "aarch64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "aarch64-linux-musl-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "arm64-darwin" => {"rust-target" => "aarch64-apple-darwin", "rake-compiler-dock" => {"cc" => "aarch64-apple-darwin-clang"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "x64-mingw-ucrt" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x64-mingw32" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86-linux" => {"rust-target" => "i686-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "i686-redhat-linux-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86-mingw32" => {"rust-target" => "i686-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "i686-w64-mingw32-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86_64-darwin" => {"rust-target" => "x86_64-apple-darwin", "rake-compiler-dock" => {"cc" => "x86_64-apple-darwin-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux" => {"rust-target" => "x86_64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "x86_64-redhat-linux-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux-musl" => {"rust-target" => "x86_64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "x86_64-unknown-linux-musl-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}}
                +    DATA = {"arm-linux" => {"rust-target" => "arm-unknown-linux-gnueabihf", "rake-compiler-dock" => {"cc" => "arm-linux-gnueabihf-gcc"}, "docker-platform" => "linux/arm/v7", "supported" => true}, "aarch64-linux" => {"aliases" => ["aarch64-linux-gnu", "aarch64-unknown-linux-gnu"], "rust-target" => "aarch64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "aarch64-linux-gnu-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "aarch64-linux-musl" => {"rust-target" => "aarch64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "aarch64-linux-musl-gcc"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "arm64-darwin" => {"rust-target" => "aarch64-apple-darwin", "rake-compiler-dock" => {"cc" => "aarch64-apple-darwin-clang"}, "docker-platform" => "linux/arm64/v8", "supported" => true}, "x64-mingw-ucrt" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "aarch64-mingw-ucrt" => {"rust-target" => "aarch64-pc-windows-gnullvm", "rake-compiler-dock" => {"cc" => "aarch64-w64-mingw32-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x64-mingw32" => {"rust-target" => "x86_64-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "x86_64-windows-gnu-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86-linux" => {"rust-target" => "i686-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "i686-redhat-linux-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86-mingw32" => {"rust-target" => "i686-pc-windows-gnu", "rake-compiler-dock" => {"cc" => "i686-w64-mingw32-gcc"}, "docker-platform" => "linux/i386", "supported" => false}, "x86_64-darwin" => {"rust-target" => "x86_64-apple-darwin", "rake-compiler-dock" => {"cc" => "x86_64-apple-darwin-clang"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux" => {"aliases" => ["x86_64-linux-gnu", "x86_64-unknown-linux-gnu"], "rust-target" => "x86_64-unknown-linux-gnu", "rake-compiler-dock" => {"cc" => "x86_64-redhat-linux-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}, "x86_64-linux-musl" => {"rust-target" => "x86_64-unknown-linux-musl", "rake-compiler-dock" => {"cc" => "x86_64-unknown-linux-musl-gcc"}, "docker-platform" => "linux/amd64", "supported" => true}}
        lib/rb_sys/version.rb
                --- /tmp/d20260107-763-udh9ja/rb_sys-0.9.105/lib/rb_sys/version.rb	2026-01-07 03:02:55.170835572 +0000
                +++ /tmp/d20260107-763-udh9ja/rb_sys-0.9.124/lib/rb_sys/version.rb	2026-01-07 03:02:55.173835571 +0000
                @@ -4 +4 @@
                -  VERSION = "0.9.105"
                +  VERSION = "0.9.124"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare selma 0.4.11 0.4.15

Compared versions: ["0.4.11", "0.4.15"]
  DIFFERENT date:
    0.4.11: 2024-12-29 00:00:00 UTC
    0.4.15: 2026-01-06 00:00:00 UTC
  DIFFERENT required_ruby_version:
    0.4.11: >= 3.2, < 3.5.dev
    0.4.15: >= 3.2, < 4.1.dev
  DIFFERENT required_rubygems_version:
    0.4.11: ~> 3.4
    0.4.15: >= 3.4
  DIFFERENT version:
    0.4.11: 0.4.11
    0.4.15: 0.4.15
  DIFFERENT files:
    0.4.11->0.4.15:
      * Added:
            lib/selma/3.3/selma.so 
              (!) Unexpected permissions: 100755
              (!) File is executable
            lib/selma/4.0/selma.so 
              (!) Unexpected permissions: 100755
              (!) File is executable
      * Changed:
            README.md +3/-3
            lib/selma/version.rb +1/-1

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff selma 0.4.11 0.4.15

Compared versions: ["0.4.11", "0.4.15"]
  DIFFERENT files:
    0.4.11->0.4.15:
      * Added:
              (!) Unexpected permissions: 100755
              (!) File is executable
              (!) Unexpected permissions: 100755
              (!) File is executable
        lib/selma/3.3/selma.so
                Binary files /tmp/20260107-1000-o0b2rt and /tmp/d20260107-1000-949iyq/selma-0.4.15-x86_64-linux/lib/selma/3.3/selma.so differ
        lib/selma/4.0/selma.so
                Binary files /tmp/20260107-1000-meosry and /tmp/d20260107-1000-949iyq/selma-0.4.15-x86_64-linux/lib/selma/4.0/selma.so differ
      * Changed:
        README.md
                --- /tmp/d20260107-1000-949iyq/selma-0.4.11-x86_64-linux/README.md	2026-01-07 03:03:16.457055134 +0000
                +++ /tmp/d20260107-1000-949iyq/selma-0.4.15-x86_64-linux/README.md	2026-01-07 03:03:16.481055318 +0000
                @@ -98,2 +98,2 @@
                -- `selector`, a method which MUST return instance of `Selma::Selector` which defines the CSS classes to match
                -- `handle_element`, a method that's call on each matched element
                +- `selector`, a method which MUST return an instance of `Selma::Selector`, defining the CSS classes to match
                +- `handle_element`, a method that's called on each matched element
                @@ -145 +145 @@
                -    string.sub(/@.+/, "<a href=\"www.yetto.app/#{Regexp.last_match}\">")
                +    text.replace(text.to_s, text.sub(/@.+/, "<a href=\"www.yetto.app/#{Regexp.last_match}\">"))
        lib/selma/3.2/selma.so
                Binary files /tmp/d20260107-1000-949iyq/selma-0.4.11-x86_64-linux/lib/selma/3.2/selma.so and /tmp/d20260107-1000-949iyq/selma-0.4.15-x86_64-linux/lib/selma/3.2/selma.so differ
        lib/selma/3.4/selma.so
                Binary files /tmp/d20260107-1000-949iyq/selma-0.4.11-x86_64-linux/lib/selma/3.4/selma.so and /tmp/d20260107-1000-949iyq/selma-0.4.15-x86_64-linux/lib/selma/3.4/selma.so differ
        lib/selma/version.rb
                --- /tmp/d20260107-1000-949iyq/selma-0.4.11-x86_64-linux/lib/selma/version.rb	2026-01-07 03:03:16.480055311 +0000
                +++ /tmp/d20260107-1000-949iyq/selma-0.4.15-x86_64-linux/lib/selma/version.rb	2026-01-07 03:03:16.575056038 +0000
                @@ -4 +4 @@
                -  VERSION = "0.4.11"
                +  VERSION = "0.4.15"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff selma 0.4.11 0.4.15

Compared versions: ["0.4.11", "0.4.15"]
  DIFFERENT files:
    0.4.11->0.4.15:
      * Added:
              (!) Unexpected permissions: 100755
              (!) File is executable
              (!) Unexpected permissions: 100755
              (!) File is executable
        lib/selma/3.3/selma.so
                Binary files /tmp/20260107-995-p3u0kz and /tmp/d20260107-995-1f43j8/selma-0.4.15-x86_64-linux/lib/selma/3.3/selma.so differ
        lib/selma/4.0/selma.so
                Binary files /tmp/20260107-995-hj7rg0 and /tmp/d20260107-995-1f43j8/selma-0.4.15-x86_64-linux/lib/selma/4.0/selma.so differ
      * Changed:
        README.md
                --- /tmp/d20260107-995-1f43j8/selma-0.4.11-x86_64-linux/README.md	2026-01-07 03:03:18.936783833 +0000
                +++ /tmp/d20260107-995-1f43j8/selma-0.4.15-x86_64-linux/README.md	2026-01-07 03:03:18.959783934 +0000
                @@ -98,2 +98,2 @@
                -- `selector`, a method which MUST return instance of `Selma::Selector` which defines the CSS classes to match
                -- `handle_element`, a method that's call on each matched element
                +- `selector`, a method which MUST return an instance of `Selma::Selector`, defining the CSS classes to match
                +- `handle_element`, a method that's called on each matched element
                @@ -145 +145 @@
                -    string.sub(/@.+/, "<a href=\"www.yetto.app/#{Regexp.last_match}\">")
                +    text.replace(text.to_s, text.sub(/@.+/, "<a href=\"www.yetto.app/#{Regexp.last_match}\">"))
        lib/selma/3.2/selma.so
                Binary files /tmp/d20260107-995-1f43j8/selma-0.4.11-x86_64-linux/lib/selma/3.2/selma.so and /tmp/d20260107-995-1f43j8/selma-0.4.15-x86_64-linux/lib/selma/3.2/selma.so differ
        lib/selma/3.4/selma.so
                Binary files /tmp/d20260107-995-1f43j8/selma-0.4.11-x86_64-linux/lib/selma/3.4/selma.so and /tmp/d20260107-995-1f43j8/selma-0.4.15-x86_64-linux/lib/selma/3.4/selma.so differ
        lib/selma/version.rb
                --- /tmp/d20260107-995-1f43j8/selma-0.4.11-x86_64-linux/lib/selma/version.rb	2026-01-07 03:03:18.959783934 +0000
                +++ /tmp/d20260107-995-1f43j8/selma-0.4.15-x86_64-linux/lib/selma/version.rb	2026-01-07 03:03:19.061784382 +0000
                @@ -4 +4 @@
                -  VERSION = "0.4.11"
                +  VERSION = "0.4.15"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare selma 0.4.11 0.4.15

Compared versions: ["0.4.11", "0.4.15"]
  DIFFERENT date:
    0.4.11: 2024-12-29 00:00:00 UTC
    0.4.15: 2026-01-06 00:00:00 UTC
  DIFFERENT required_ruby_version:
    0.4.11: >= 3.2, < 3.5.dev
    0.4.15: >= 3.2, < 4.1.dev
  DIFFERENT required_rubygems_version:
    0.4.11: ~> 3.4
    0.4.15: >= 3.4
  DIFFERENT version:
    0.4.11: 0.4.11
    0.4.15: 0.4.15
  DIFFERENT files:
    0.4.11->0.4.15:
      * Added:
            lib/selma/3.3/selma.so 
              (!) Unexpected permissions: 100755
              (!) File is executable
            lib/selma/4.0/selma.so 
              (!) Unexpected permissions: 100755
              (!) File is executable
      * Changed:
            README.md +3/-3
            lib/selma/version.rb +1/-1

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff selma 0.4.11 0.4.15

Compared versions: ["0.4.11", "0.4.15"]
  DIFFERENT files:
    0.4.11->0.4.15:
      * Added:
              (!) Unexpected permissions: 100755
              (!) File is executable
              (!) Unexpected permissions: 100755
              (!) File is executable
        lib/selma/3.3/selma.so
                Binary files /tmp/20260107-1052-d3qm5q and /tmp/d20260107-1052-rbzw83/selma-0.4.15-x86_64-linux/lib/selma/3.3/selma.so differ
        lib/selma/4.0/selma.so
                Binary files /tmp/20260107-1052-phlv5g and /tmp/d20260107-1052-rbzw83/selma-0.4.15-x86_64-linux/lib/selma/4.0/selma.so differ
      * Changed:
        README.md
                --- /tmp/d20260107-1052-rbzw83/selma-0.4.11-x86_64-linux/README.md	2026-01-07 03:03:54.712640015 +0000
                +++ /tmp/d20260107-1052-rbzw83/selma-0.4.15-x86_64-linux/README.md	2026-01-07 03:03:54.736640070 +0000
                @@ -98,2 +98,2 @@
                -- `selector`, a method which MUST return instance of `Selma::Selector` which defines the CSS classes to match
                -- `handle_element`, a method that's call on each matched element
                +- `selector`, a method which MUST return an instance of `Selma::Selector`, defining the CSS classes to match
                +- `handle_element`, a method that's called on each matched element
                @@ -145 +145 @@
                -    string.sub(/@.+/, "<a href=\"www.yetto.app/#{Regexp.last_match}\">")
                +    text.replace(text.to_s, text.sub(/@.+/, "<a href=\"www.yetto.app/#{Regexp.last_match}\">"))
        lib/selma/3.2/selma.so
                Binary files /tmp/d20260107-1052-rbzw83/selma-0.4.11-x86_64-linux/lib/selma/3.2/selma.so and /tmp/d20260107-1052-rbzw83/selma-0.4.15-x86_64-linux/lib/selma/3.2/selma.so differ
        lib/selma/3.4/selma.so
                Binary files /tmp/d20260107-1052-rbzw83/selma-0.4.11-x86_64-linux/lib/selma/3.4/selma.so and /tmp/d20260107-1052-rbzw83/selma-0.4.15-x86_64-linux/lib/selma/3.4/selma.so differ
        lib/selma/version.rb
                --- /tmp/d20260107-1052-rbzw83/selma-0.4.11-x86_64-linux/lib/selma/version.rb	2026-01-07 03:03:54.736640070 +0000
                +++ /tmp/d20260107-1052-rbzw83/selma-0.4.15-x86_64-linux/lib/selma/version.rb	2026-01-07 03:03:54.835640298 +0000
                @@ -4 +4 @@
                -  VERSION = "0.4.11"
                +  VERSION = "0.4.15"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff selma 0.4.11 0.4.15

Compared versions: ["0.4.11", "0.4.15"]
  DIFFERENT files:
    0.4.11->0.4.15:
      * Added:
              (!) Unexpected permissions: 100755
              (!) File is executable
              (!) Unexpected permissions: 100755
              (!) File is executable
        lib/selma/3.3/selma.so
                Binary files /tmp/20260107-1014-p4vao5 and /tmp/d20260107-1014-78n558/selma-0.4.15-x86_64-linux/lib/selma/3.3/selma.so differ
        lib/selma/4.0/selma.so
                Binary files /tmp/20260107-1014-70egf7 and /tmp/d20260107-1014-78n558/selma-0.4.15-x86_64-linux/lib/selma/4.0/selma.so differ
      * Changed:
        README.md
                --- /tmp/d20260107-1014-78n558/selma-0.4.11-x86_64-linux/README.md	2026-01-07 03:04:04.990843924 +0000
                +++ /tmp/d20260107-1014-78n558/selma-0.4.15-x86_64-linux/README.md	2026-01-07 03:04:05.021843927 +0000
                @@ -98,2 +98,2 @@
                -- `selector`, a method which MUST return instance of `Selma::Selector` which defines the CSS classes to match
                -- `handle_element`, a method that's call on each matched element
                +- `selector`, a method which MUST return an instance of `Selma::Selector`, defining the CSS classes to match
                +- `handle_element`, a method that's called on each matched element
                @@ -145 +145 @@
                -    string.sub(/@.+/, "<a href=\"www.yetto.app/#{Regexp.last_match}\">")
                +    text.replace(text.to_s, text.sub(/@.+/, "<a href=\"www.yetto.app/#{Regexp.last_match}\">"))
        lib/selma/3.2/selma.so
                Binary files /tmp/d20260107-1014-78n558/selma-0.4.11-x86_64-linux/lib/selma/3.2/selma.so and /tmp/d20260107-1014-78n558/selma-0.4.15-x86_64-linux/lib/selma/3.2/selma.so differ
        lib/selma/3.4/selma.so
                Binary files /tmp/d20260107-1014-78n558/selma-0.4.11-x86_64-linux/lib/selma/3.4/selma.so and /tmp/d20260107-1014-78n558/selma-0.4.15-x86_64-linux/lib/selma/3.4/selma.so differ
        lib/selma/version.rb
                --- /tmp/d20260107-1014-78n558/selma-0.4.11-x86_64-linux/lib/selma/version.rb	2026-01-07 03:04:05.021843927 +0000
                +++ /tmp/d20260107-1014-78n558/selma-0.4.15-x86_64-linux/lib/selma/version.rb	2026-01-07 03:04:05.141843936 +0000
                @@ -4 +4 @@
                -  VERSION = "0.4.11"
                +  VERSION = "0.4.15"

@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2026

gem compare --diff selma 0.4.11 0.4.15

Compared versions: ["0.4.11", "0.4.15"]
  DIFFERENT files:
    0.4.11->0.4.15:
      * Added:
              (!) Unexpected permissions: 100755
              (!) File is executable
              (!) Unexpected permissions: 100755
              (!) File is executable
        lib/selma/3.3/selma.so
                Binary files /tmp/20260107-1060-lgxqow and /tmp/d20260107-1060-py47ol/selma-0.4.15-x86_64-linux/lib/selma/3.3/selma.so differ
        lib/selma/4.0/selma.so
                Binary files /tmp/20260107-1060-wk0uur and /tmp/d20260107-1060-py47ol/selma-0.4.15-x86_64-linux/lib/selma/4.0/selma.so differ
      * Changed:
        README.md
                --- /tmp/d20260107-1060-py47ol/selma-0.4.11-x86_64-linux/README.md	2026-01-07 03:04:23.428103659 +0000
                +++ /tmp/d20260107-1060-py47ol/selma-0.4.15-x86_64-linux/README.md	2026-01-07 03:04:23.457104164 +0000
                @@ -98,2 +98,2 @@
                -- `selector`, a method which MUST return instance of `Selma::Selector` which defines the CSS classes to match
                -- `handle_element`, a method that's call on each matched element
                +- `selector`, a method which MUST return an instance of `Selma::Selector`, defining the CSS classes to match
                +- `handle_element`, a method that's called on each matched element
                @@ -145 +145 @@
                -    string.sub(/@.+/, "<a href=\"www.yetto.app/#{Regexp.last_match}\">")
                +    text.replace(text.to_s, text.sub(/@.+/, "<a href=\"www.yetto.app/#{Regexp.last_match}\">"))
        lib/selma/3.2/selma.so
                Binary files /tmp/d20260107-1060-py47ol/selma-0.4.11-x86_64-linux/lib/selma/3.2/selma.so and /tmp/d20260107-1060-py47ol/selma-0.4.15-x86_64-linux/lib/selma/3.2/selma.so differ
        lib/selma/3.4/selma.so
                Binary files /tmp/d20260107-1060-py47ol/selma-0.4.11-x86_64-linux/lib/selma/3.4/selma.so and /tmp/d20260107-1060-py47ol/selma-0.4.15-x86_64-linux/lib/selma/3.4/selma.so differ
        lib/selma/version.rb
                --- /tmp/d20260107-1060-py47ol/selma-0.4.11-x86_64-linux/lib/selma/version.rb	2026-01-07 03:04:23.457104164 +0000
                +++ /tmp/d20260107-1060-py47ol/selma-0.4.15-x86_64-linux/lib/selma/version.rb	2026-01-07 03:04:23.575106217 +0000
                @@ -4 +4 @@
                -  VERSION = "0.4.11"
                +  VERSION = "0.4.15"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies ruby Pull requests that update Ruby code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant