CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0 - #19

Open
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix
Open

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0#19
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix

Conversation

@andriytyurnikov

Copy link
Copy Markdown

Summary

  • Adds a Ruby version matrix (3.2, 3.3, 3.4, 4.0) to the existing test workflow so unit tests and the Datastar SDK conformance suite run end-to-end against every supported Ruby.
  • Enables the workflow on pull_request events (previously only push).
  • fail-fast: false so one Ruby's failure doesn't mask issues on the others.

Effective Ruby floor: 3.2

The gemspec advertises required_ruby_version >= 3.0.0, but two factors raise the actual floor:

  1. Source uses Ruby 3.1+ shorthand hash literals — e.g. Datastar.new(request:, response:, view_context:) in lib/datastar.rb:23 and many specs.
  2. Transitive runtime dep console 1.34.2 (pulled in by async) requires ruby >= 3.2. Confirmed on CI: bundle install on Ruby 3.1 fails with:
    console-1.34.2 requires ruby version >= 3.2,
    which is incompatible with the current version, 3.1.7
    

So 3.2 is the lowest Ruby the project can actually be installed on. Matrix starts there. Aligning the gemspec floor to >= 3.2.0 is intentionally left as a follow-up (out of scope for this PR).

Commits

  • 2fc739b — initial matrix including 3.1
  • 7a55c5f — drop 3.1 after CI revealed the console floor

These can be squashed on merge if preferred.

CI verification

Verified on a fork before opening this PR. All 4 Ruby versions pass unit specs + the Datastar SDK conformance suite.

Test plan

  • Workflow runs successfully on this PR for every matrix entry
  • Unit tests pass on every Ruby version
  • Datastar SDK conformance suite passes on every Ruby version

Previously CI only exercised Ruby 4.0. Adds a build matrix so unit
tests and the Datastar SDK conformance suite run on every supported
Ruby. Also enables the workflow on pull_request events.
bundle install fails on Ruby 3.1 because console 1.34.2 (transitive
dep via async) requires ruby >= 3.2. The dependency tree's effective
floor is 3.2.
@andriytyurnikov

Copy link
Copy Markdown
Author

Note: upstream CI hasn't fired on this PR (workflow is on: push only — the pull_request: trigger is in this very PR). For evidence, fork CI runs on the same commits:

8/8 jobs pass.

@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:28
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 11:51
@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:54
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 12:46
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@andriytyurnikov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0 - #19

Open
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix
Open

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0#19
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix

Conversation

@andriytyurnikov

Copy link
Copy Markdown

Summary

  • Adds a Ruby version matrix (3.2, 3.3, 3.4, 4.0) to the existing test workflow so unit tests and the Datastar SDK conformance suite run end-to-end against every supported Ruby.
  • Enables the workflow on pull_request events (previously only push).
  • fail-fast: false so one Ruby's failure doesn't mask issues on the others.

Effective Ruby floor: 3.2

The gemspec advertises required_ruby_version >= 3.0.0, but two factors raise the actual floor:

  1. Source uses Ruby 3.1+ shorthand hash literals — e.g. Datastar.new(request:, response:, view_context:) in lib/datastar.rb:23 and many specs.
  2. Transitive runtime dep console 1.34.2 (pulled in by async) requires ruby >= 3.2. Confirmed on CI: bundle install on Ruby 3.1 fails with:
    console-1.34.2 requires ruby version >= 3.2,
    which is incompatible with the current version, 3.1.7
    

So 3.2 is the lowest Ruby the project can actually be installed on. Matrix starts there. Aligning the gemspec floor to >= 3.2.0 is intentionally left as a follow-up (out of scope for this PR).

Commits

  • 2fc739b — initial matrix including 3.1
  • 7a55c5f — drop 3.1 after CI revealed the console floor

These can be squashed on merge if preferred.

CI verification

Verified on a fork before opening this PR. All 4 Ruby versions pass unit specs + the Datastar SDK conformance suite.

Test plan

  • Workflow runs successfully on this PR for every matrix entry
  • Unit tests pass on every Ruby version
  • Datastar SDK conformance suite passes on every Ruby version

Previously CI only exercised Ruby 4.0. Adds a build matrix so unit
tests and the Datastar SDK conformance suite run on every supported
Ruby. Also enables the workflow on pull_request events.
bundle install fails on Ruby 3.1 because console 1.34.2 (transitive
dep via async) requires ruby >= 3.2. The dependency tree's effective
floor is 3.2.
@andriytyurnikov

Copy link
Copy Markdown
Author

Note: upstream CI hasn't fired on this PR (workflow is on: push only — the pull_request: trigger is in this very PR). For evidence, fork CI runs on the same commits:

8/8 jobs pass.

@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:28
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 11:51
@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:54
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 12:46
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@andriytyurnikov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0 - #19

Open
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix
Open

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0#19
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix

Conversation

@andriytyurnikov

Copy link
Copy Markdown

Summary

  • Adds a Ruby version matrix (3.2, 3.3, 3.4, 4.0) to the existing test workflow so unit tests and the Datastar SDK conformance suite run end-to-end against every supported Ruby.
  • Enables the workflow on pull_request events (previously only push).
  • fail-fast: false so one Ruby's failure doesn't mask issues on the others.

Effective Ruby floor: 3.2

The gemspec advertises required_ruby_version >= 3.0.0, but two factors raise the actual floor:

  1. Source uses Ruby 3.1+ shorthand hash literals — e.g. Datastar.new(request:, response:, view_context:) in lib/datastar.rb:23 and many specs.
  2. Transitive runtime dep console 1.34.2 (pulled in by async) requires ruby >= 3.2. Confirmed on CI: bundle install on Ruby 3.1 fails with:
    console-1.34.2 requires ruby version >= 3.2,
    which is incompatible with the current version, 3.1.7
    

So 3.2 is the lowest Ruby the project can actually be installed on. Matrix starts there. Aligning the gemspec floor to >= 3.2.0 is intentionally left as a follow-up (out of scope for this PR).

Commits

  • 2fc739b — initial matrix including 3.1
  • 7a55c5f — drop 3.1 after CI revealed the console floor

These can be squashed on merge if preferred.

CI verification

Verified on a fork before opening this PR. All 4 Ruby versions pass unit specs + the Datastar SDK conformance suite.

Test plan

  • Workflow runs successfully on this PR for every matrix entry
  • Unit tests pass on every Ruby version
  • Datastar SDK conformance suite passes on every Ruby version

Previously CI only exercised Ruby 4.0. Adds a build matrix so unit
tests and the Datastar SDK conformance suite run on every supported
Ruby. Also enables the workflow on pull_request events.
bundle install fails on Ruby 3.1 because console 1.34.2 (transitive
dep via async) requires ruby >= 3.2. The dependency tree's effective
floor is 3.2.
@andriytyurnikov

Copy link
Copy Markdown
Author

Note: upstream CI hasn't fired on this PR (workflow is on: push only — the pull_request: trigger is in this very PR). For evidence, fork CI runs on the same commits:

8/8 jobs pass.

@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:28
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 11:51
@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:54
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 12:46
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@andriytyurnikov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0 - #19

Open
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix
Open

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0#19
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix

Conversation

@andriytyurnikov

Copy link
Copy Markdown

Summary

  • Adds a Ruby version matrix (3.2, 3.3, 3.4, 4.0) to the existing test workflow so unit tests and the Datastar SDK conformance suite run end-to-end against every supported Ruby.
  • Enables the workflow on pull_request events (previously only push).
  • fail-fast: false so one Ruby's failure doesn't mask issues on the others.

Effective Ruby floor: 3.2

The gemspec advertises required_ruby_version >= 3.0.0, but two factors raise the actual floor:

  1. Source uses Ruby 3.1+ shorthand hash literals — e.g. Datastar.new(request:, response:, view_context:) in lib/datastar.rb:23 and many specs.
  2. Transitive runtime dep console 1.34.2 (pulled in by async) requires ruby >= 3.2. Confirmed on CI: bundle install on Ruby 3.1 fails with:
    console-1.34.2 requires ruby version >= 3.2,
    which is incompatible with the current version, 3.1.7
    

So 3.2 is the lowest Ruby the project can actually be installed on. Matrix starts there. Aligning the gemspec floor to >= 3.2.0 is intentionally left as a follow-up (out of scope for this PR).

Commits

  • 2fc739b — initial matrix including 3.1
  • 7a55c5f — drop 3.1 after CI revealed the console floor

These can be squashed on merge if preferred.

CI verification

Verified on a fork before opening this PR. All 4 Ruby versions pass unit specs + the Datastar SDK conformance suite.

Test plan

  • Workflow runs successfully on this PR for every matrix entry
  • Unit tests pass on every Ruby version
  • Datastar SDK conformance suite passes on every Ruby version

Previously CI only exercised Ruby 4.0. Adds a build matrix so unit
tests and the Datastar SDK conformance suite run on every supported
Ruby. Also enables the workflow on pull_request events.
bundle install fails on Ruby 3.1 because console 1.34.2 (transitive
dep via async) requires ruby >= 3.2. The dependency tree's effective
floor is 3.2.
@andriytyurnikov

Copy link
Copy Markdown
Author

Note: upstream CI hasn't fired on this PR (workflow is on: push only — the pull_request: trigger is in this very PR). For evidence, fork CI runs on the same commits:

8/8 jobs pass.

@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:28
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 11:51
@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:54
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 12:46
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@andriytyurnikov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0 - #19

Open
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix
Open

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0#19
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix

Conversation

@andriytyurnikov

Copy link
Copy Markdown

Summary

  • Adds a Ruby version matrix (3.2, 3.3, 3.4, 4.0) to the existing test workflow so unit tests and the Datastar SDK conformance suite run end-to-end against every supported Ruby.
  • Enables the workflow on pull_request events (previously only push).
  • fail-fast: false so one Ruby's failure doesn't mask issues on the others.

Effective Ruby floor: 3.2

The gemspec advertises required_ruby_version >= 3.0.0, but two factors raise the actual floor:

  1. Source uses Ruby 3.1+ shorthand hash literals — e.g. Datastar.new(request:, response:, view_context:) in lib/datastar.rb:23 and many specs.
  2. Transitive runtime dep console 1.34.2 (pulled in by async) requires ruby >= 3.2. Confirmed on CI: bundle install on Ruby 3.1 fails with:
    console-1.34.2 requires ruby version >= 3.2,
    which is incompatible with the current version, 3.1.7
    

So 3.2 is the lowest Ruby the project can actually be installed on. Matrix starts there. Aligning the gemspec floor to >= 3.2.0 is intentionally left as a follow-up (out of scope for this PR).

Commits

  • 2fc739b — initial matrix including 3.1
  • 7a55c5f — drop 3.1 after CI revealed the console floor

These can be squashed on merge if preferred.

CI verification

Verified on a fork before opening this PR. All 4 Ruby versions pass unit specs + the Datastar SDK conformance suite.

Test plan

  • Workflow runs successfully on this PR for every matrix entry
  • Unit tests pass on every Ruby version
  • Datastar SDK conformance suite passes on every Ruby version

Previously CI only exercised Ruby 4.0. Adds a build matrix so unit
tests and the Datastar SDK conformance suite run on every supported
Ruby. Also enables the workflow on pull_request events.
bundle install fails on Ruby 3.1 because console 1.34.2 (transitive
dep via async) requires ruby >= 3.2. The dependency tree's effective
floor is 3.2.
@andriytyurnikov

Copy link
Copy Markdown
Author

Note: upstream CI hasn't fired on this PR (workflow is on: push only — the pull_request: trigger is in this very PR). For evidence, fork CI runs on the same commits:

8/8 jobs pass.

@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:28
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 11:51
@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:54
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 12:46
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@andriytyurnikov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0 - #19

Open
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix
Open

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0#19
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix

Conversation

@andriytyurnikov

Copy link
Copy Markdown

Summary

  • Adds a Ruby version matrix (3.2, 3.3, 3.4, 4.0) to the existing test workflow so unit tests and the Datastar SDK conformance suite run end-to-end against every supported Ruby.
  • Enables the workflow on pull_request events (previously only push).
  • fail-fast: false so one Ruby's failure doesn't mask issues on the others.

Effective Ruby floor: 3.2

The gemspec advertises required_ruby_version >= 3.0.0, but two factors raise the actual floor:

  1. Source uses Ruby 3.1+ shorthand hash literals — e.g. Datastar.new(request:, response:, view_context:) in lib/datastar.rb:23 and many specs.
  2. Transitive runtime dep console 1.34.2 (pulled in by async) requires ruby >= 3.2. Confirmed on CI: bundle install on Ruby 3.1 fails with:
    console-1.34.2 requires ruby version >= 3.2,
    which is incompatible with the current version, 3.1.7
    

So 3.2 is the lowest Ruby the project can actually be installed on. Matrix starts there. Aligning the gemspec floor to >= 3.2.0 is intentionally left as a follow-up (out of scope for this PR).

Commits

  • 2fc739b — initial matrix including 3.1
  • 7a55c5f — drop 3.1 after CI revealed the console floor

These can be squashed on merge if preferred.

CI verification

Verified on a fork before opening this PR. All 4 Ruby versions pass unit specs + the Datastar SDK conformance suite.

Test plan

  • Workflow runs successfully on this PR for every matrix entry
  • Unit tests pass on every Ruby version
  • Datastar SDK conformance suite passes on every Ruby version

Previously CI only exercised Ruby 4.0. Adds a build matrix so unit
tests and the Datastar SDK conformance suite run on every supported
Ruby. Also enables the workflow on pull_request events.
bundle install fails on Ruby 3.1 because console 1.34.2 (transitive
dep via async) requires ruby >= 3.2. The dependency tree's effective
floor is 3.2.
@andriytyurnikov

Copy link
Copy Markdown
Author

Note: upstream CI hasn't fired on this PR (workflow is on: push only — the pull_request: trigger is in this very PR). For evidence, fork CI runs on the same commits:

8/8 jobs pass.

@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:28
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 11:51
@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:54
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 12:46
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@andriytyurnikov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0 - #19

Open
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix
Open

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0#19
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix

Conversation

@andriytyurnikov

Copy link
Copy Markdown

Summary

  • Adds a Ruby version matrix (3.2, 3.3, 3.4, 4.0) to the existing test workflow so unit tests and the Datastar SDK conformance suite run end-to-end against every supported Ruby.
  • Enables the workflow on pull_request events (previously only push).
  • fail-fast: false so one Ruby's failure doesn't mask issues on the others.

Effective Ruby floor: 3.2

The gemspec advertises required_ruby_version >= 3.0.0, but two factors raise the actual floor:

  1. Source uses Ruby 3.1+ shorthand hash literals — e.g. Datastar.new(request:, response:, view_context:) in lib/datastar.rb:23 and many specs.
  2. Transitive runtime dep console 1.34.2 (pulled in by async) requires ruby >= 3.2. Confirmed on CI: bundle install on Ruby 3.1 fails with:
    console-1.34.2 requires ruby version >= 3.2,
    which is incompatible with the current version, 3.1.7
    

So 3.2 is the lowest Ruby the project can actually be installed on. Matrix starts there. Aligning the gemspec floor to >= 3.2.0 is intentionally left as a follow-up (out of scope for this PR).

Commits

  • 2fc739b — initial matrix including 3.1
  • 7a55c5f — drop 3.1 after CI revealed the console floor

These can be squashed on merge if preferred.

CI verification

Verified on a fork before opening this PR. All 4 Ruby versions pass unit specs + the Datastar SDK conformance suite.

Test plan

  • Workflow runs successfully on this PR for every matrix entry
  • Unit tests pass on every Ruby version
  • Datastar SDK conformance suite passes on every Ruby version

Previously CI only exercised Ruby 4.0. Adds a build matrix so unit
tests and the Datastar SDK conformance suite run on every supported
Ruby. Also enables the workflow on pull_request events.
bundle install fails on Ruby 3.1 because console 1.34.2 (transitive
dep via async) requires ruby >= 3.2. The dependency tree's effective
floor is 3.2.
@andriytyurnikov

Copy link
Copy Markdown
Author

Note: upstream CI hasn't fired on this PR (workflow is on: push only — the pull_request: trigger is in this very PR). For evidence, fork CI runs on the same commits:

8/8 jobs pass.

@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:28
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 11:51
@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:54
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 12:46
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@andriytyurnikov
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0 - #19

Open
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix
Open

CI: run matrix against Ruby 3.2, 3.3, 3.4, 4.0#19
andriytyurnikov wants to merge 2 commits into
starfederation:mainfrom
rubakas:feature/CI-matrix

Conversation

@andriytyurnikov

Copy link
Copy Markdown

Summary

  • Adds a Ruby version matrix (3.2, 3.3, 3.4, 4.0) to the existing test workflow so unit tests and the Datastar SDK conformance suite run end-to-end against every supported Ruby.
  • Enables the workflow on pull_request events (previously only push).
  • fail-fast: false so one Ruby's failure doesn't mask issues on the others.

Effective Ruby floor: 3.2

The gemspec advertises required_ruby_version >= 3.0.0, but two factors raise the actual floor:

  1. Source uses Ruby 3.1+ shorthand hash literals — e.g. Datastar.new(request:, response:, view_context:) in lib/datastar.rb:23 and many specs.
  2. Transitive runtime dep console 1.34.2 (pulled in by async) requires ruby >= 3.2. Confirmed on CI: bundle install on Ruby 3.1 fails with:
    console-1.34.2 requires ruby version >= 3.2,
    which is incompatible with the current version, 3.1.7
    

So 3.2 is the lowest Ruby the project can actually be installed on. Matrix starts there. Aligning the gemspec floor to >= 3.2.0 is intentionally left as a follow-up (out of scope for this PR).

Commits

  • 2fc739b — initial matrix including 3.1
  • 7a55c5f — drop 3.1 after CI revealed the console floor

These can be squashed on merge if preferred.

CI verification

Verified on a fork before opening this PR. All 4 Ruby versions pass unit specs + the Datastar SDK conformance suite.

Test plan

  • Workflow runs successfully on this PR for every matrix entry
  • Unit tests pass on every Ruby version
  • Datastar SDK conformance suite passes on every Ruby version

Previously CI only exercised Ruby 4.0. Adds a build matrix so unit
tests and the Datastar SDK conformance suite run on every supported
Ruby. Also enables the workflow on pull_request events.
bundle install fails on Ruby 3.1 because console 1.34.2 (transitive
dep via async) requires ruby >= 3.2. The dependency tree's effective
floor is 3.2.
@andriytyurnikov

Copy link
Copy Markdown
Author

Note: upstream CI hasn't fired on this PR (workflow is on: push only — the pull_request: trigger is in this very PR). For evidence, fork CI runs on the same commits:

8/8 jobs pass.

@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:28
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 11:51
@andriytyurnikov
andriytyurnikov deleted the feature/CI-matrix branch April 27, 2026 11:54
@andriytyurnikov
andriytyurnikov restored the feature/CI-matrix branch April 27, 2026 12:46
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@andriytyurnikov