diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000000..1ede70b6f7 --- /dev/null +++ b/Rakefile @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +# Root Rakefile for monorepo development +# +# This file enables running rake tasks from the monorepo root directory. +# It loads: +# 1. Monorepo-level tasks from ./rakelib/ (e.g., release task for both gems) +# 2. The react_on_rails gem's Rakefile +# 3. The react_on_rails gem's rakelib tasks +# +# Usage: bundle exec rake -T (from monorepo root) +# +# Note: This is for development only. When the gem is installed in a Rails app, +# Rails::Engine handles rake task loading automatically from lib/tasks/. + +# Define gem_root helper for use by rake tasks +def gem_root + File.expand_path("react_on_rails", __dir__) +end + +# Load the open-source gem's Rakefile +load File.expand_path("Rakefile", gem_root) + +# Load all rake tasks from the gem's rakelib directory +# Rake only auto-loads from ./rakelib in the current working directory, +# so we must explicitly load from the subdirectory. +Dir[File.join(gem_root, "rakelib", "*.rake")].each { |rake_file| load rake_file } + +# NOTE: Monorepo-level rake tasks from ./rakelib/ are auto-loaded by Rake. +# Do NOT explicitly load them here, as that would cause tasks to be defined twice +# and their bodies would run twice (Rake appends duplicate task definitions). diff --git a/react_on_rails/rakelib/release.rake b/rakelib/release.rake similarity index 87% rename from react_on_rails/rakelib/release.rake rename to rakelib/release.rake index cf37b1a3f6..1ac245b1fd 100644 --- a/react_on_rails/rakelib/release.rake +++ b/rakelib/release.rake @@ -61,6 +61,9 @@ Version argument can be: - Explicit version: '16.2.0' - Pre-release version: '16.2.0.beta.1' (rubygem format with dots, converted to 16.2.0-beta.1 for NPM) +Note: Pre-release versions (containing .test., .beta., .alpha., .rc., or .pre.) automatically +skip git branch checks, allowing releases from non-master branches. + This will update and release: PUBLIC (npmjs.org + rubygems.org): - react-on-rails NPM package @@ -123,7 +126,9 @@ task :release, %i[version dry_run registry skip_push] do |_t, args| skip_push = skip_push_value == "skip_push" + # Detect if this is a test/pre-release version (contains test, beta, alpha, rc, etc.) version_input = args_hash.fetch(:version, "") + is_prerelease = version_input.match?(/\.(test|beta|alpha|rc|pre)\./i) if version_input.strip.empty? raise ArgumentError, @@ -168,7 +173,6 @@ task :release, %i[version dry_run registry skip_push] do |_t, args| # Update react_on_rails_pro gem version to match puts "\nUpdating react_on_rails_pro gem version to #{actual_gem_version}..." - pro_gem_root = File.join(monorepo_root, "react_on_rails_pro") pro_version_file = File.join(pro_gem_root, "lib", "react_on_rails_pro", "version.rb") pro_version_content = File.read(pro_version_file) # We use gsub instead of `gem bump` here because the git tree is already dirty @@ -181,12 +185,12 @@ task :release, %i[version dry_run registry skip_push] do |_t, args| puts "\nUpdating package.json files to version #{actual_npm_version}..." - # Update all package.json files + # Update all package.json files (only publishable packages) package_json_files = [ - File.join(gem_root, "package.json"), - File.join(gem_root, "packages", "react-on-rails", "package.json"), - File.join(gem_root, "packages", "react-on-rails-pro", "package.json"), - File.join(gem_root, "react_on_rails_pro", "package.json") + File.join(monorepo_root, "package.json"), + File.join(monorepo_root, "packages", "react-on-rails", "package.json"), + File.join(monorepo_root, "packages", "react-on-rails-pro", "package.json"), + File.join(monorepo_root, "packages", "react-on-rails-pro-node-renderer", "package.json") ] package_json_files.each do |file| @@ -209,7 +213,6 @@ task :release, %i[version dry_run registry skip_push] do |_t, args| # Update all Gemfile.lock files unbundled_sh_in_dir(gem_root, "bundle install#{bundle_quiet_flag}") unbundled_sh_in_dir(dummy_app_dir, "bundle install#{bundle_quiet_flag}") - pro_dummy_app_dir = File.join(gem_root, "react_on_rails_pro", "spec", "dummy") unbundled_sh_in_dir(pro_dummy_app_dir, "bundle install#{bundle_quiet_flag}") if Dir.exist?(pro_dummy_app_dir) unbundled_sh_in_dir(pro_gem_root, "bundle install#{bundle_quiet_flag}") @@ -232,10 +235,23 @@ task :release, %i[version dry_run registry skip_push] do |_t, args| unless is_dry_run # Commit all version changes (skip git hooks to save time) sh_in_dir(monorepo_root, "LEFTHOOK=0 git add -A") - sh_in_dir(monorepo_root, "LEFTHOOK=0 git commit -m 'Bump version to #{actual_gem_version}'") - # Create git tag - sh_in_dir(monorepo_root, "git tag v#{actual_gem_version}") + # Only commit if there are staged changes (version might already be set) + git_status = `cd #{monorepo_root} && git diff --cached --quiet; echo $?`.strip + if git_status == "0" + puts "No version changes to commit (version already set to #{actual_gem_version})" + else + sh_in_dir(monorepo_root, "LEFTHOOK=0 git commit -m 'Bump version to #{actual_gem_version}'") + end + + # Create git tag (skip if it already exists) + tag_name = "v#{actual_gem_version}" + tag_exists = system("cd #{monorepo_root} && git rev-parse #{tag_name} >/dev/null 2>&1") + if tag_exists + puts "Git tag #{tag_name} already exists, skipping tag creation" + else + sh_in_dir(monorepo_root, "git tag #{tag_name}") + end # Push commits and tags (skip git hooks) unless skip_push @@ -256,13 +272,19 @@ task :release, %i[version dry_run registry skip_push] do |_t, args| puts "TIP: Set NPM_OTP environment variable to avoid repeated prompts." end + # For pre-release versions, skip git branch checks (allows releasing from non-master branches) + if is_prerelease + npm_publish_args += " --no-git-checks" + puts "Pre-release version detected - skipping git branch checks for NPM publish" + end + # Publish react-on-rails NPM package puts "\nPublishing react-on-rails@#{actual_npm_version}..." - sh_in_dir(File.join(gem_root, "packages", "react-on-rails"), "pnpm publish #{npm_publish_args}") + sh_in_dir(File.join(monorepo_root, "packages", "react-on-rails"), "pnpm publish #{npm_publish_args}") # Publish react-on-rails-pro NPM package puts "\nPublishing react-on-rails-pro@#{actual_npm_version}..." - sh_in_dir(File.join(gem_root, "packages", "react-on-rails-pro"), "pnpm publish #{npm_publish_args}") + sh_in_dir(File.join(monorepo_root, "packages", "react-on-rails-pro"), "pnpm publish #{npm_publish_args}") # Publish node-renderer NPM package (PUBLIC on npmjs.org) puts "\n#{'=' * 80}" @@ -270,11 +292,10 @@ task :release, %i[version dry_run registry skip_push] do |_t, args| puts "=" * 80 # Publish react-on-rails-pro-node-renderer NPM package - # Note: Uses plain `pnpm publish` because the node-renderer - # package.json is in react_on_rails_pro/ which is not defined as a workspace node_renderer_name = "react-on-rails-pro-node-renderer" + node_renderer_dir = File.join(monorepo_root, "packages", "react-on-rails-pro-node-renderer") puts "\nPublishing #{node_renderer_name}@#{actual_npm_version}..." - sh_in_dir(pro_gem_root, "pnpm publish --no-git-checks #{npm_publish_args}") + sh_in_dir(node_renderer_dir, "pnpm publish #{npm_publish_args}") if use_verdaccio puts "\nSkipping Ruby gem publication (Verdaccio is NPM-only)" @@ -320,7 +341,7 @@ task :release, %i[version dry_run registry skip_push] do |_t, args| puts " - package.json (root)" puts " - packages/react-on-rails/package.json" puts " - packages/react-on-rails-pro/package.json (version + dependency)" - puts " - react_on_rails_pro/package.json (node-renderer)" + puts " - packages/react-on-rails-pro-node-renderer/package.json" puts " - Gemfile.lock files (root, dummy apps, pro)" puts "\nAuto-synced (no write needed):" puts " - react_on_rails_pro/react_on_rails_pro.gemspec (uses ReactOnRails::VERSION)" diff --git a/rakelib/task_helpers.rb b/rakelib/task_helpers.rb new file mode 100644 index 0000000000..e739bc2245 --- /dev/null +++ b/rakelib/task_helpers.rb @@ -0,0 +1,143 @@ +# frozen_string_literal: true + +require "English" + +module ReactOnRails + module TaskHelpers + # Returns the root folder of the monorepo + def monorepo_root + File.expand_path("..", __dir__) + end + + # Returns the root folder of the react_on_rails gem + def gem_root + File.join(monorepo_root, "react_on_rails") + end + + # Returns the root folder of the react_on_rails_pro gem + def pro_gem_root + File.join(monorepo_root, "react_on_rails_pro") + end + + # Returns the folder where examples are located + def examples_dir + File.join(monorepo_root, "gen-examples", "examples") + end + + def dummy_app_dir + File.join(gem_root, "spec/dummy") + end + + def pro_dummy_app_dir + File.join(pro_gem_root, "spec", "dummy") + end + + # Executes a string or an array of strings in a shell in the given directory in an unbundled environment + def sh_in_dir(dir, *shell_commands) + shell_commands.flatten.each { |shell_command| sh %(cd #{dir} && #{shell_command.strip}) } + end + + # Executes a string or an array of strings in a shell in the given directory + def unbundled_sh_in_dir(dir, *shell_commands) + Dir.chdir(dir) do + # Without `with_unbundled_env`, running bundle in the child directories won't correctly + # update the Gemfile.lock + Bundler.with_unbundled_env do + shell_commands.flatten.each do |shell_command| + sh(shell_command.strip) + end + end + end + end + + def bundle_install_in(dir) + required_version = detect_bundler_ruby_version(dir) + + if required_version && required_version != RUBY_VERSION + puts " Switching Ruby version: #{RUBY_VERSION} → #{required_version}" + # Run version switch and bundle install in the same shell context + bundle_install_with_ruby_version(dir, required_version) + else + unbundled_sh_in_dir(dir, "bundle install") + end + end + + private + + # Runs bundle install with the specified Ruby version in the same shell context + def bundle_install_with_ruby_version(dir, version) + version_manager = ENV.fetch("RUBY_VERSION_MANAGER", "rvm") + + command = case version_manager + when "rvm" + "rvm #{version} do bundle install" + when "rbenv" + "RBENV_VERSION=#{version} bundle install" + when "asdf" + "asdf shell ruby #{version} && bundle install" + else + # TODO: add support for chruby + puts " ⚠️ Unknown RUBY_VERSION_MANAGER: #{version_manager}" + puts " Supported values: rvm, rbenv, asdf" + raise "Ruby version #{version} required. Current: #{RUBY_VERSION}" + end + + unbundled_sh_in_dir(dir, command) + rescue StandardError => e + puts " ⚠️ Failed to switch Ruby version and run bundle install: #{e.message}" + puts " Please manually switch to Ruby #{version} and try again" + raise + end + + # Detects the required Ruby version using Bundler + def detect_bundler_ruby_version(dir) + output = nil + exit_status = nil + + # Run in unbundled environment to avoid conflicts with parent Bundler context + Bundler.with_unbundled_env do + Dir.chdir(dir) do + output = `bundle platform --ruby 2>&1` + exit_status = $CHILD_STATUS.exitstatus + end + end + + unless exit_status.zero? + puts " ⚠️ Failed to detect Ruby version in #{dir}" + puts " Error: #{output.strip}" unless output.strip.empty? + return nil + end + + # Parse "ruby 3.3.7" or "ruby 3.3.7-rc1" or "ruby 3.4.0-preview1" + # Regex matches: digits.dots followed by optional -prerelease + match = output.strip.match(/ruby\s+([\d.]+(?:-[a-zA-Z0-9.]+)?)/) + match ? match[1] : nil + rescue StandardError => e + puts " ⚠️ Error detecting Ruby version: #{e.message}" + nil + end + + public + + def bundle_install_in_no_turbolinks(dir) + sh_in_dir(dir, "DISABLE_TURBOLINKS=TRUE bundle install") + end + + # Runs bundle exec using that directory's Gemfile + def bundle_exec(dir: nil, args: nil, env_vars: "") + sh_in_dir(dir, "#{env_vars} bundle exec #{args}") + end + + def generators_source_dir + File.join(gem_root, "lib/generators/react_on_rails") + end + + def symbolize_keys(hash) + hash.each_with_object({}) do |(key, value), new_hash| + new_key = key.is_a?(String) ? key.to_sym : key + new_value = value.is_a?(Hash) ? symbolize_keys(value) : value + new_hash[new_key] = new_value + end + end + end +end diff --git a/react_on_rails/rakelib/example_type.rb b/react_on_rails/rakelib/example_type.rb index 800889884a..85e0fe3734 100644 --- a/react_on_rails/rakelib/example_type.rb +++ b/react_on_rails/rakelib/example_type.rb @@ -3,6 +3,7 @@ require "rake" require_relative "task_helpers" +require_relative File.join(__dir__, "..", "lib", "react_on_rails", "utils") # Defines the ExampleType class, where each object represents a unique type of example # app that we can generate. diff --git a/react_on_rails/rakelib/run_rspec.rake b/react_on_rails/rakelib/run_rspec.rake index 6522a11d22..a61db47c8c 100644 --- a/react_on_rails/rakelib/run_rspec.rake +++ b/react_on_rails/rakelib/run_rspec.rake @@ -3,6 +3,7 @@ require "coveralls/rake/task" if ENV["USE_COVERALLS"] == "TRUE" require "pathname" +require "yaml" require_relative "task_helpers" require_relative "example_type" @@ -115,7 +116,7 @@ task :js_tests do sh "pnpm run test" end -msg = <<-DESC.strip_heredoc +msg = <<~DESC Runs all tests, run `rake -D run_rspec` to see all available test options. "rake run_rspec:example_basic" is a good way to run only one generator test. DESC diff --git a/react_on_rails/spec/dummy/Gemfile.lock b/react_on_rails/spec/dummy/Gemfile.lock index eb919c4013..ce0a77dffb 100644 --- a/react_on_rails/spec/dummy/Gemfile.lock +++ b/react_on_rails/spec/dummy/Gemfile.lock @@ -345,7 +345,7 @@ GEM rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) semantic_range (3.1.0) - shakapacker (9.3.0) + shakapacker (9.4.0) activesupport (>= 5.2) package_json rack-proxy (>= 0.6.1) @@ -461,7 +461,7 @@ DEPENDENCIES sass-rails (~> 6.0) sdoc selenium-webdriver (= 4.9.0) - shakapacker (= 9.3.0) + shakapacker (= 9.4.0) spring (~> 4.0) sprockets (~> 4.0) sqlite3 (~> 1.6) diff --git a/react_on_rails_pro/Gemfile.lock b/react_on_rails_pro/Gemfile.lock index ae870831de..799c113bb6 100644 --- a/react_on_rails_pro/Gemfile.lock +++ b/react_on_rails_pro/Gemfile.lock @@ -34,66 +34,68 @@ PATH GEM remote: https://rubygems.org/ specs: - actioncable (7.2.2.1) - actionpack (= 7.2.2.1) - activesupport (= 7.2.2.1) + actioncable (7.2.3) + actionpack (= 7.2.3) + activesupport (= 7.2.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.2.2.1) - actionpack (= 7.2.2.1) - activejob (= 7.2.2.1) - activerecord (= 7.2.2.1) - activestorage (= 7.2.2.1) - activesupport (= 7.2.2.1) + actionmailbox (7.2.3) + actionpack (= 7.2.3) + activejob (= 7.2.3) + activerecord (= 7.2.3) + activestorage (= 7.2.3) + activesupport (= 7.2.3) mail (>= 2.8.0) - actionmailer (7.2.2.1) - actionpack (= 7.2.2.1) - actionview (= 7.2.2.1) - activejob (= 7.2.2.1) - activesupport (= 7.2.2.1) + actionmailer (7.2.3) + actionpack (= 7.2.3) + actionview (= 7.2.3) + activejob (= 7.2.3) + activesupport (= 7.2.3) mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (7.2.2.1) - actionview (= 7.2.2.1) - activesupport (= 7.2.2.1) + actionpack (7.2.3) + actionview (= 7.2.3) + activesupport (= 7.2.3) + cgi nokogiri (>= 1.8.5) racc - rack (>= 2.2.4, < 3.2) + rack (>= 2.2.4, < 3.3) rack-session (>= 1.0.1) rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) useragent (~> 0.16) - actiontext (7.2.2.1) - actionpack (= 7.2.2.1) - activerecord (= 7.2.2.1) - activestorage (= 7.2.2.1) - activesupport (= 7.2.2.1) + actiontext (7.2.3) + actionpack (= 7.2.3) + activerecord (= 7.2.3) + activestorage (= 7.2.3) + activesupport (= 7.2.3) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.2.2.1) - activesupport (= 7.2.2.1) + actionview (7.2.3) + activesupport (= 7.2.3) builder (~> 3.1) + cgi erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (7.2.2.1) - activesupport (= 7.2.2.1) + activejob (7.2.3) + activesupport (= 7.2.3) globalid (>= 0.3.6) - activemodel (7.2.2.1) - activesupport (= 7.2.2.1) - activerecord (7.2.2.1) - activemodel (= 7.2.2.1) - activesupport (= 7.2.2.1) + activemodel (7.2.3) + activesupport (= 7.2.3) + activerecord (7.2.3) + activemodel (= 7.2.3) + activesupport (= 7.2.3) timeout (>= 0.4.0) - activestorage (7.2.2.1) - actionpack (= 7.2.2.1) - activejob (= 7.2.2.1) - activerecord (= 7.2.2.1) - activesupport (= 7.2.2.1) + activestorage (7.2.3) + actionpack (= 7.2.3) + activejob (= 7.2.3) + activerecord (= 7.2.3) + activesupport (= 7.2.3) marcel (~> 1.0) - activesupport (7.2.2.1) + activesupport (7.2.3) base64 benchmark (>= 0.3) bigdecimal @@ -105,19 +107,19 @@ GEM minitest (>= 5.1) securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) + addressable (2.8.8) + public_suffix (>= 2.0.2, < 8.0) amazing_print (1.6.0) ast (2.4.2) - async (2.27.4) + async (2.35.0) console (~> 1.29) fiber-annotation io-event (~> 1.11) metrics (~> 0.12) - traces (~> 0.15) - base64 (0.2.0) - benchmark (0.4.0) - bigdecimal (3.1.9) + traces (~> 0.18) + base64 (0.3.0) + benchmark (0.5.0) + bigdecimal (3.3.1) bindex (0.8.1) bootsnap (1.18.3) msgpack (~> 1.2) @@ -135,14 +137,15 @@ GEM capybara-screenshot (1.0.26) capybara (>= 1.0, < 4) launchy + cgi (0.5.0) childprocess (5.0.0) coderay (1.1.3) commonmarker (1.1.4-arm64-darwin) commonmarker (1.1.4-x86_64-darwin) commonmarker (1.1.4-x86_64-linux) concurrent-ruby (1.3.5) - connection_pool (2.5.0) - console (1.33.0) + connection_pool (3.0.2) + console (1.34.2) fiber-annotation fiber-local (~> 1.1) json @@ -156,14 +159,15 @@ GEM bigdecimal rexml crass (1.0.6) - date (3.4.1) + date (3.5.0) diff-lcs (1.5.1) docile (1.4.0) - drb (2.2.1) + drb (2.2.3) equivalent-xml (0.6.0) nokogiri (>= 1.4.3) + erb (6.0.0) erubi (1.13.1) - execjs (2.9.1) + execjs (2.10.0) fakefs (2.8.0) faker (3.4.1) i18n (>= 1.8.11, < 2) @@ -178,19 +182,19 @@ GEM generator_spec (0.10.0) activesupport (>= 3.0.0) railties (>= 3.0.0) - globalid (1.2.1) + globalid (1.3.0) activesupport (>= 6.1) graphiql-rails (1.10.0) railties hashdiff (1.1.0) http-2 (1.1.1) - httpx (1.5.1) + httpx (1.6.3) http-2 (>= 1.0.0) i18n (1.14.7) concurrent-ruby (~> 1.0) - io-console (0.8.0) - io-event (1.12.1) - irb (1.15.1) + io-console (0.8.1) + io-event (1.14.2) + irb (1.15.3) pp (>= 0.6.0) rdoc (>= 4.0.0) reline (>= 0.4.2) @@ -201,8 +205,8 @@ GEM rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - json (2.7.2) - jwt (2.9.3) + json (2.17.1) + jwt (2.10.2) base64 launchy (3.0.1) addressable (~> 2.8) @@ -210,27 +214,28 @@ GEM listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - logger (1.6.6) - loofah (2.24.0) + logger (1.7.0) + loofah (2.24.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) - mail (2.8.1) + mail (2.9.0) + logger mini_mime (>= 0.1.1) net-imap net-pop net-smtp - marcel (1.0.4) + marcel (1.1.0) matrix (0.4.2) method_source (1.1.0) - metrics (0.14.0) + metrics (0.15.0) mini_mime (1.1.5) - minitest (5.25.4) + minitest (5.26.2) mize (0.4.1) protocol (~> 2.0) msgpack (1.7.2) net-http (0.4.1) uri - net-imap (0.5.8) + net-imap (0.5.12) date net-protocol net-pop (0.1.2) @@ -239,12 +244,12 @@ GEM timeout net-smtp (0.5.1) net-protocol - nio4r (2.7.4) - nokogiri (1.18.8-arm64-darwin) + nio4r (2.7.5) + nokogiri (1.18.10-arm64-darwin) racc (~> 1.4) - nokogiri (1.18.8-x86_64-darwin) + nokogiri (1.18.10-x86_64-darwin) racc (~> 1.4) - nokogiri (1.18.8-x86_64-linux-gnu) + nokogiri (1.18.10-x86_64-linux-gnu) racc (~> 1.4) package_json (0.2.0) parallel (1.25.1) @@ -252,7 +257,7 @@ GEM ast (~> 2.4.1) racc pg (1.5.6) - pp (0.6.2) + pp (0.6.3) prettyprint prettyprint (0.2.0) protocol (2.0.0) @@ -267,63 +272,67 @@ GEM pry (>= 0.13.0) pry-theme (1.3.1) coderay (~> 1.1) - psych (5.2.3) + psych (5.2.6) date stringio - public_suffix (6.0.0) + public_suffix (7.0.0) puma (6.5.0) nio4r (~> 2.0) racc (1.8.1) - rack (3.1.12) + rack (3.2.4) rack-proxy (0.7.7) rack - rack-session (2.1.0) + rack-session (2.1.1) 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 (7.2.2.1) - actioncable (= 7.2.2.1) - actionmailbox (= 7.2.2.1) - actionmailer (= 7.2.2.1) - actionpack (= 7.2.2.1) - actiontext (= 7.2.2.1) - actionview (= 7.2.2.1) - activejob (= 7.2.2.1) - activemodel (= 7.2.2.1) - activerecord (= 7.2.2.1) - activestorage (= 7.2.2.1) - activesupport (= 7.2.2.1) + rails (7.2.3) + actioncable (= 7.2.3) + actionmailbox (= 7.2.3) + actionmailer (= 7.2.3) + actionpack (= 7.2.3) + actiontext (= 7.2.3) + actionview (= 7.2.3) + activejob (= 7.2.3) + activemodel (= 7.2.3) + activerecord (= 7.2.3) + activestorage (= 7.2.3) + activesupport (= 7.2.3) bundler (>= 1.15.0) - railties (= 7.2.2.1) - rails-dom-testing (2.2.0) + railties (= 7.2.3) + rails-dom-testing (2.3.0) activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) rails-html-sanitizer (1.6.2) loofah (~> 2.21) 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 (7.2.2.1) - actionpack (= 7.2.2.1) - activesupport (= 7.2.2.1) + railties (7.2.3) + actionpack (= 7.2.3) + activesupport (= 7.2.3) + cgi irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) thor (~> 1.0, >= 1.2.2) + tsort (>= 0.2) zeitwerk (~> 2.6) rainbow (3.1.1) - rake (13.2.1) + rake (13.3.1) rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) rbs (3.9.5) logger - rdoc (6.12.0) + rdoc (6.16.1) + erb psych (>= 4.0.0) + tsort regexp_parser (2.9.2) - reline (0.6.0) + reline (0.6.3) io-console (~> 0.5) rexml (3.3.9) rspec-core (3.13.0) @@ -418,18 +427,19 @@ GEM sqlite3 (1.7.3-arm64-darwin) sqlite3 (1.7.3-x86_64-darwin) sqlite3 (1.7.3-x86_64-linux) - stringio (3.1.2) + stringio (3.1.9) sync (0.5.0) term-ansicolor (1.10.2) mize tins (~> 1.0) - thor (1.3.2) + thor (1.4.0) tilt (2.4.0) - timeout (0.4.3) + timeout (0.4.4) tins (1.33.0) bigdecimal sync - traces (0.18.1) + traces (0.18.2) + tsort (0.2.0) turbolinks (5.2.1) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) @@ -454,14 +464,14 @@ GEM crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) websocket (1.2.10) - websocket-driver (0.7.7) + websocket-driver (0.8.0) base64 websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) yard (0.9.36) - zeitwerk (2.7.1) + zeitwerk (2.7.3) PLATFORMS arm64-darwin-24 diff --git a/react_on_rails_pro/package.json b/react_on_rails_pro/package.json index ab67abde4e..66d95f0826 100644 --- a/react_on_rails_pro/package.json +++ b/react_on_rails_pro/package.json @@ -1,6 +1,6 @@ { "name": "react-on-rails-pro-dev", - "version": "0.0.0", + "version": "16.2.0-test.2", "private": true, "description": "Development workspace for react-on-rails-pro (not published)", "scripts": { diff --git a/react_on_rails_pro/rakelib/run_rspec.rake b/react_on_rails_pro/rakelib/run_rspec.rake index be3f0b7791..a5c287d290 100644 --- a/react_on_rails_pro/rakelib/run_rspec.rake +++ b/react_on_rails_pro/rakelib/run_rspec.rake @@ -41,7 +41,7 @@ task :js_tests do sh "yarn run test" end -msg = <<-DESC.strip_heredoc +msg = <<~DESC Runs all tests, run `rake -D run_rspec` to see all available test options. DESC desc msg