-
Notifications
You must be signed in to change notification settings - Fork 1
Bump html-pipeline from 3.0.3 to 3.2.4 #868
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
dependabot
wants to merge
1
commit into
main
Choose a base branch
from
dependabot/bundler/html-pipeline-3.2.4
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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>
Contributor
4 similar comments
Contributor
Contributor
Contributor
Contributor
Contributor
gem compare html-pipeline 3.0.3 3.2.4Compared 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
Contributor
gem compare html-pipeline 3.0.3 3.2.4Compared 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"] |
Contributor
gem compare html-pipeline 3.0.3 3.2.4Compared 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"] |
Contributor
gem compare html-pipeline 3.0.3 3.2.4Compared 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"] |
Contributor
gem compare --diff html-pipeline 3.0.3 3.2.4Compared 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" |
Contributor
gem compare --diff html-pipeline 3.0.3 3.2.4Compared 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" |
Contributor
gem compare --diff html-pipeline 3.0.3 3.2.4Compared 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" |
Contributor
gem compare --diff html-pipeline 3.0.3 3.2.4Compared 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" |
Contributor
gem compare html-pipeline 3.0.3 3.2.4Compared 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"] |
Contributor
gem compare rb_sys 0.9.105 0.9.124Compared 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
Contributor
gem compare rb_sys 0.9.105 0.9.124Compared 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) |
Contributor
gem compare rb_sys 0.9.105 0.9.124Compared 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) |
Contributor
gem compare --diff rb_sys 0.9.105 0.9.124Compared 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"
|
Contributor
gem compare --diff rb_sys 0.9.105 0.9.124Compared 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"
|
Contributor
gem compare --diff rb_sys 0.9.105 0.9.124Compared 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"
|
Contributor
gem compare rb_sys 0.9.105 0.9.124Compared 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) |
Contributor
gem compare selma 0.4.11 0.4.15Compared 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
Contributor
gem compare selma 0.4.11 0.4.15Compared 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 |
Contributor
gem compare --diff rb_sys 0.9.105 0.9.124Compared 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"
|
Contributor
gem compare --diff html-pipeline 3.0.3 3.2.4Compared 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" |
Contributor
gem compare selma 0.4.11 0.4.15Compared 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 |
Contributor
gem compare rb_sys 0.9.105 0.9.124Compared 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) |
Contributor
gem compare --diff rb_sys 0.9.105 0.9.124Compared 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"
|
Contributor
gem compare selma 0.4.11 0.4.15Compared 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 |
Contributor
gem compare --diff selma 0.4.11 0.4.15Compared 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" |
Contributor
gem compare --diff selma 0.4.11 0.4.15Compared 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" |
Contributor
gem compare selma 0.4.11 0.4.15Compared 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 |
Contributor
gem compare --diff selma 0.4.11 0.4.15Compared 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" |
Contributor
gem compare --diff selma 0.4.11 0.4.15Compared 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" |
Contributor
gem compare --diff selma 0.4.11 0.4.15Compared 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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Bumps html-pipeline from 3.0.3 to 3.2.4.
Release notes
Sourced from html-pipeline's releases.
... (truncated)
Changelog
Sourced from html-pipeline's changelog.
... (truncated)
Commits
c99d76dMerge pull request #429 from gjtorikian/release/v3.2.4f00ac92[skip test] update changelog4bd9392Merge pull request #428 from gjtorikian/allow-for-sanitization-nil7a75c3e💎 bump to 3.2.4973cbefadd minitest/mock for stubsf75cd21Merge branch 'main' into allow-for-sanitization-nil7a6e748Merge pull request #427 from gjtorikian/support-ruby-4251dde6loosen commonmarkera1b66f0no need for this1b5c5fb[auto-lint]: Lint filesDependabot 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 rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot mergewill merge this PR after your CI passes on it@dependabot squash and mergewill squash and merge this PR after your CI passes on it@dependabot cancel mergewill cancel a previously requested merge and block automerging@dependabot reopenwill reopen this PR if it is closed@dependabot closewill close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill 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 versionwill 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 dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)