diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 006d608..8d8701f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,10 @@ jobs: tests: runs-on: ubuntu-latest name: Tests - Ruby ${{ matrix.ruby }} - strategy: { matrix: { ruby: [3.2, 3.3, 3.4, 4.0] } } + strategy: + fail-fast: false + matrix: + ruby: ["4.0"] steps: - uses: actions/checkout@v4 @@ -31,7 +34,7 @@ jobs: - name: Set up Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: 3.4 + ruby-version: "4.0" bundler-cache: true - name: bundle install run: bundle install @@ -48,7 +51,7 @@ jobs: - name: Set up Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: 3.4 + ruby-version: "4.0" bundler-cache: true - name: bundle install run: bundle install diff --git a/.standard.yml b/.standard.yml index 0ed8183..f9293dc 100644 --- a/.standard.yml +++ b/.standard.yml @@ -1,3 +1,3 @@ # For available configuration options, see: # https://github.com/standardrb/standard -ruby_version: 3.1 +ruby_version: 4.0 diff --git a/CLAUDE.md b/CLAUDE.md index 143672d..a850ba8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -131,7 +131,7 @@ Integration tests run against a minimal Rails app in `test/dummy/`: ## Requirements -- Ruby >= 3.2.0 +- Ruby >= 4.0 - Rails >= 8.0 - Bundler diff --git a/Gemfile.lock b/Gemfile.lock index fb4767f..97b6414 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,31 +7,31 @@ PATH GEM remote: https://rubygems.org/ specs: - action_text-trix (2.1.15) + action_text-trix (2.1.19) railties - actioncable (8.1.1) - actionpack (= 8.1.1) - activesupport (= 8.1.1) + actioncable (8.1.3) + actionpack (= 8.1.3) + activesupport (= 8.1.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (8.1.1) - actionpack (= 8.1.1) - activejob (= 8.1.1) - activerecord (= 8.1.1) - activestorage (= 8.1.1) - activesupport (= 8.1.1) + actionmailbox (8.1.3) + actionpack (= 8.1.3) + activejob (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) mail (>= 2.8.0) - actionmailer (8.1.1) - actionpack (= 8.1.1) - actionview (= 8.1.1) - activejob (= 8.1.1) - activesupport (= 8.1.1) + actionmailer (8.1.3) + actionpack (= 8.1.3) + actionview (= 8.1.3) + activejob (= 8.1.3) + activesupport (= 8.1.3) mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (8.1.1) - actionview (= 8.1.1) - activesupport (= 8.1.1) + actionpack (8.1.3) + actionview (= 8.1.3) + activesupport (= 8.1.3) nokogiri (>= 1.8.5) rack (>= 2.2.4) rack-session (>= 1.0.1) @@ -39,36 +39,36 @@ GEM rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) useragent (~> 0.16) - actiontext (8.1.1) + actiontext (8.1.3) action_text-trix (~> 2.1.15) - actionpack (= 8.1.1) - activerecord (= 8.1.1) - activestorage (= 8.1.1) - activesupport (= 8.1.1) + actionpack (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (8.1.1) - activesupport (= 8.1.1) + actionview (8.1.3) + activesupport (= 8.1.3) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (8.1.1) - activesupport (= 8.1.1) + activejob (8.1.3) + activesupport (= 8.1.3) globalid (>= 0.3.6) - activemodel (8.1.1) - activesupport (= 8.1.1) - activerecord (8.1.1) - activemodel (= 8.1.1) - activesupport (= 8.1.1) + activemodel (8.1.3) + activesupport (= 8.1.3) + activerecord (8.1.3) + activemodel (= 8.1.3) + activesupport (= 8.1.3) timeout (>= 0.4.0) - activestorage (8.1.1) - actionpack (= 8.1.1) - activejob (= 8.1.1) - activerecord (= 8.1.1) - activesupport (= 8.1.1) + activestorage (8.1.3) + actionpack (= 8.1.3) + activejob (= 8.1.3) + activerecord (= 8.1.3) + activesupport (= 8.1.3) marcel (~> 1.0) - activesupport (8.1.1) + activesupport (8.1.3) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.3.1) @@ -83,45 +83,45 @@ GEM uri (>= 0.13.1) ast (2.4.3) base64 (0.3.0) - bigdecimal (3.3.1) - brakeman (7.1.1) + bigdecimal (4.1.2) + brakeman (8.0.5) racc builder (3.3.0) - concurrent-ruby (1.3.5) - connection_pool (2.5.4) - crass (1.0.6) - date (3.5.0) - docile (1.4.1) + concurrent-ruby (1.3.8) + connection_pool (3.0.2) + crass (1.0.7) + date (3.5.1) drb (2.2.3) - erb (5.1.3) + erb (6.0.6) erubi (1.13.1) - globalid (1.3.0) + globalid (1.4.0) activesupport (>= 6.1) - i18n (1.14.7) + i18n (1.15.2) concurrent-ruby (~> 1.0) - io-console (0.8.1) - irb (1.15.3) + io-console (0.8.2) + irb (1.18.0) pp (>= 0.6.0) + prism (>= 1.3.0) rdoc (>= 4.0.0) reline (>= 0.4.2) - json (2.15.2) - language_server-protocol (3.17.0.5) + json (2.21.1) + language_server-protocol (3.17.0.6) lint_roller (1.1.0) logger (1.7.0) - loofah (2.24.1) + loofah (2.25.2) crass (~> 1.0.2) nokogiri (>= 1.12.0) - mail (2.9.0) + mail (2.9.1) logger mini_mime (>= 0.1.1) net-imap net-pop net-smtp - marcel (1.1.0) + marcel (1.2.1) mini_mime (1.1.5) mini_portile2 (2.8.9) minitest (5.27.0) - net-imap (0.5.12) + net-imap (0.6.4.1) date net-protocol net-pop (0.1.2) @@ -150,50 +150,47 @@ GEM racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-musl) racc (~> 1.4) - parallel (1.27.0) - parser (3.3.10.0) + parallel (2.1.0) + parser (3.3.12.0) ast (~> 2.4.1) racc - pp (0.6.3) + pp (0.6.4) prettyprint prettyprint (0.2.0) - prism (1.6.0) - psych (5.2.6) - date - stringio + prism (1.9.0) racc (1.8.1) - rack (3.2.4) - rack-session (2.1.1) + rack (3.2.6) + rack-session (2.1.2) base64 (>= 0.1.0) rack (>= 3.0.0) rack-test (2.2.0) rack (>= 1.3) - rackup (2.2.1) + rackup (2.3.1) rack (>= 3) - rails (8.1.1) - actioncable (= 8.1.1) - actionmailbox (= 8.1.1) - actionmailer (= 8.1.1) - actionpack (= 8.1.1) - actiontext (= 8.1.1) - actionview (= 8.1.1) - activejob (= 8.1.1) - activemodel (= 8.1.1) - activerecord (= 8.1.1) - activestorage (= 8.1.1) - activesupport (= 8.1.1) + rails (8.1.3) + actioncable (= 8.1.3) + actionmailbox (= 8.1.3) + actionmailer (= 8.1.3) + actionpack (= 8.1.3) + actiontext (= 8.1.3) + actionview (= 8.1.3) + activejob (= 8.1.3) + activemodel (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) bundler (>= 1.15.0) - railties (= 8.1.1) + railties (= 8.1.3) rails-dom-testing (2.3.0) activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.6.2) - loofah (~> 2.21) + rails-html-sanitizer (1.7.1) + loofah (~> 2.25, >= 2.25.2) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) - railties (8.1.1) - actionpack (= 8.1.1) - activesupport (= 8.1.1) + railties (8.1.3) + actionpack (= 8.1.3) + activesupport (= 8.1.3) irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) @@ -201,40 +198,40 @@ GEM tsort (>= 0.2) zeitwerk (~> 2.6) rainbow (3.1.1) - rake (13.3.1) - rdoc (6.15.1) + rake (13.4.2) + rbs (4.0.3) + logger + prism (>= 1.6.0) + tsort + rdoc (8.0.0) erb - psych (>= 4.0.0) + prism (>= 1.6.0) + rbs (>= 4.0.0) tsort - regexp_parser (2.11.3) - reline (0.6.2) + regexp_parser (2.12.0) + reline (0.6.3) io-console (~> 0.5) - rubocop (1.75.5) + rubocop (1.88.2) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) - parallel (~> 1.10) + parallel (>= 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.44.0, < 2.0) + rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.47.1) + rubocop-ast (1.50.0) parser (>= 3.3.7.2) - prism (~> 1.4) - rubocop-performance (1.25.0) + prism (~> 1.7) + rubocop-performance (1.26.1) lint_roller (~> 1.1) rubocop (>= 1.75.0, < 2.0) - rubocop-ast (>= 1.38.0, < 2.0) + rubocop-ast (>= 1.47.1, < 2.0) ruby-progressbar (1.13.0) securerandom (0.4.1) - simplecov (0.22.0) - docile (~> 1.1) - simplecov-html (~> 0.11) - simplecov_json_formatter (~> 0.1) - simplecov-html (0.13.2) - simplecov_json_formatter (0.1.4) + simplecov (1.0.2) sqlite3 (2.9.5) mini_portile2 (~> 2.8.0) sqlite3 (2.9.5-aarch64-linux-gnu) @@ -247,21 +244,20 @@ GEM sqlite3 (2.9.5-x86_64-darwin) sqlite3 (2.9.5-x86_64-linux-gnu) sqlite3 (2.9.5-x86_64-linux-musl) - standard (1.49.0) + standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) - rubocop (~> 1.75.2) + rubocop (~> 1.88.0) standard-custom (~> 1.0.0) standard-performance (~> 1.8) standard-custom (1.0.2) lint_roller (~> 1.0) rubocop (~> 1.50) - standard-performance (1.8.0) + standard-performance (1.9.0) lint_roller (~> 1.1) - rubocop-performance (~> 1.25.0) - stringio (3.1.7) - thor (1.4.0) - timeout (0.4.4) + rubocop-performance (~> 1.26.0) + thor (1.5.0) + timeout (0.6.1) tsort (0.2.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) @@ -270,11 +266,11 @@ GEM unicode-emoji (4.2.0) uri (1.1.1) useragent (0.16.11) - websocket-driver (0.8.0) + websocket-driver (0.8.2) base64 websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - zeitwerk (2.7.3) + zeitwerk (2.8.2) PLATFORMS aarch64-linux-gnu diff --git a/README.md b/README.md index 0ebf1f8..6f1e18f 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Bunko (文庫) in Japanese means a small personal library or book collection - a ## Requirements -- Ruby >= 3.2.0 +- Ruby >= 4.0 - Rails >= 8.0 ## Quick Start @@ -728,7 +728,7 @@ test/ ### CI Testing GitHub Actions runs the full test suite on every PR: -- Ruby versions: 3.2, 3.3, 3.4, 3.5 +- Ruby versions: 4.0 - All tests with fresh generated code - StandardRB linting - Brakeman security scans (Rails 8.0.x and 8.1.x) diff --git a/ROADMAP.md b/ROADMAP.md index 91affad..dc87ad7 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -462,7 +462,7 @@ New developer can: **Compatibility:** - Works with Rails 8.0+ and follows Rails EOL maintenance policy -- Works with Ruby 3.2, 3.3, 3.4 and follows Ruby EOL maintenance policy +- Works with Ruby 4.0+ and follows Ruby EOL maintenance policy - Works with PostgreSQL, SQLite, MySQL - Test coverage > 90% - All Standard linter checks pass diff --git a/bunko.gemspec b/bunko.gemspec index 36cbf86..7c3e06b 100644 --- a/bunko.gemspec +++ b/bunko.gemspec @@ -12,7 +12,7 @@ Gem::Specification.new do |spec| spec.description = "Bunko provides a lightweight CMS structure for Rails based on a 'one model, infinite collections' philosophy. Create multiple content collections (blog, docs, changelog) without duplicate code or migrations." spec.homepage = "https://github.com/kanejamison/bunko" spec.license = "MIT" - spec.required_ruby_version = ">= 3.2" + spec.required_ruby_version = ">= 4.0" spec.metadata["homepage_uri"] = spec.homepage spec.metadata["changelog_uri"] = "https://github.com/kanejamison/bunko/blob/main/CHANGELOG.md"