From 0b5b617da2043cbe96a03e0b34e8f11a680ec256 Mon Sep 17 00:00:00 2001 From: Justin Gordon Date: Mon, 20 Jul 2026 04:25:09 -1000 Subject: [PATCH] Maintenance: advance tutorial to React on Rails 17.0.0 --- .github/dependabot.yml | 54 ++++++++++++++++++++++++++ .github/workflows/demo-fleet-smoke.yml | 35 +++++++++++++++++ Gemfile | 2 +- Gemfile.lock | 20 +++++----- package.json | 4 +- yarn.lock | 26 ++++++------- 6 files changed, 116 insertions(+), 25 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/demo-fleet-smoke.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..83b5e5f9 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,54 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: weekly + - package-ecosystem: bundler + directory: "/" + schedule: + interval: weekly + groups: + react-on-rails-family: + patterns: + - react_on_rails + - react_on_rails_pro + all-dependencies: + patterns: + - "*" + - package-ecosystem: npm + directory: "/" + schedule: + interval: weekly + groups: + react-on-rails-family: + patterns: + - react-on-rails-pro + - react-on-rails-pro-node-renderer + - react-on-rails-rsc + - rescript-react-on-rails + all-dependencies: + patterns: + - "*" + ignore: + - dependency-name: "@babel/cli" + versions: + - ">= 8.0.0" + - dependency-name: "@babel/core" + versions: + - ">= 8.0.0" + - dependency-name: "@babel/plugin-transform-runtime" + versions: + - ">= 8.0.0" + - dependency-name: "@babel/preset-env" + versions: + - ">= 8.0.0" + - dependency-name: "@babel/runtime" + versions: + - ">= 8.0.0" + - dependency-name: "@babel/eslint-parser" + versions: + - ">= 8.0.0" + - dependency-name: "@babel/preset-react" + versions: + - ">= 8.0.0" diff --git a/.github/workflows/demo-fleet-smoke.yml b/.github/workflows/demo-fleet-smoke.yml new file mode 100644 index 00000000..8174ec7f --- /dev/null +++ b/.github/workflows/demo-fleet-smoke.yml @@ -0,0 +1,35 @@ +name: Demo fleet smoke + +on: + pull_request: + push: + branches: + - master + schedule: + - cron: "17 4 * * 1" + workflow_dispatch: + +jobs: + smoke: + uses: shakacode/react_on_rails/.github/workflows/demo-fleet-smoke.yml@613c6c2a251a782328b26d68e7f23daa9b677497 + with: + ruby-version: "3.4.6" + node-version: "22" + install-command: >- + bundle config set path vendor/bundle && bundle install --jobs 4 --retry 3 && yarn install --frozen-lockfile && + docker run --name tutorial-fleet-postgres -e POSTGRES_DB=rails_test -e POSTGRES_USER=rails -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:11-alpine@sha256:ea50b9fd617b66c9135816a4536cf6e0697d4eea7014a7194479c95f6edd5ef9 && + for attempt in {1..30}; do docker inspect --format '{{.State.Running}}' tutorial-fleet-postgres | grep -qx true || exit 1; docker exec tutorial-fleet-postgres pg_isready -U rails -d rails_test && break; sleep 1; done; + docker exec tutorial-fleet-postgres pg_isready -U rails -d rails_test + test-command: >- + RAILS_ENV=test NODE_ENV=test bundle exec rake react_on_rails:locale && + RAILS_ENV=test NODE_ENV=test bundle exec rails react_on_rails:generate_packs && + RAILS_ENV=test NODE_ENV=test bundle exec rake ci:js + build-command: yarn build:dev + smoke-command: >- + RENDERER_SERVER_BUNDLE_CACHE_PATH=renderer/.node-renderer-bundles MODE=symlink RAILS_ENV=development bundle exec rake react_on_rails_pro:pre_seed_renderer_cache || exit 1; + RENDERER_SERVER_BUNDLE_CACHE_PATH=renderer/.node-renderer-bundles node renderer/node-renderer.js & renderer_pid=$!; + trap 'test -n "${rails_pid:-}" && kill "$rails_pid" 2>/dev/null || true; kill "$renderer_pid" 2>/dev/null || true; docker rm -f tutorial-fleet-postgres >/dev/null 2>&1 || true' EXIT; + for attempt in {1..30}; do nc -z localhost 3800 && break; sleep 1; done; nc -z localhost 3800 || exit 1; + DATABASE_URL=postgres://rails:password@127.0.0.1:5432/rails_test RAILS_ENV=development bundle exec rails db:prepare || exit 1; + DATABASE_URL=postgres://rails:password@127.0.0.1:5432/rails_test RAILS_ENV=development NODE_ENV=development bundle exec rails server -b 127.0.0.1 -p 3000 & rails_pid=$!; + for attempt in {1..30}; do kill -0 "$rails_pid" 2>/dev/null || exit 1; curl --fail --silent --show-error http://127.0.0.1:3000/ && exit 0; sleep 1; done; exit 1 diff --git a/Gemfile b/Gemfile index e30a90d0..48166fea 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby "3.4.6" gem "cpflow", "5.2.0", require: false -gem "react_on_rails_pro", "17.0.0.rc.12" +gem "react_on_rails_pro", "17.0.0" gem "shakapacker", "10.2.0" # Bundle edge Rails instead: gem "rails", github: "rails/rails" diff --git a/Gemfile.lock b/Gemfile.lock index 353bb982..8e3d128c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -134,7 +134,7 @@ GEM coffee-script-source (1.12.2) concurrent-ruby (1.3.7) connection_pool (3.0.2) - console (1.36.0) + console (1.37.0) fiber-annotation fiber-local (~> 1.1) json @@ -191,8 +191,9 @@ GEM interception (0.5) io-console (0.8.2) io-endpoint (0.17.2) - io-event (1.19.1) - io-stream (0.13.1) + io-event (1.19.2) + io-stream (0.13.2) + openssl (>= 3.3) irb (1.18.0) pp (>= 0.6.0) prism (>= 1.3.0) @@ -245,6 +246,7 @@ GEM racc (~> 1.4) nokogiri (1.19.3-x86_64-linux-gnu) racc (~> 1.4) + openssl (4.0.2) package_json (0.2.0) parallel (1.27.0) parser (3.3.9.0) @@ -258,10 +260,10 @@ GEM protocol (2.0.0) ruby_parser (~> 3.0) protocol-hpack (1.5.1) - protocol-http (0.62.2) + protocol-http (0.63.0) protocol-http1 (0.39.0) protocol-http (~> 0.62) - protocol-http2 (0.26.0) + protocol-http2 (0.26.1) protocol-hpack (~> 1.4) protocol-http (~> 0.62) protocol-url (0.4.0) @@ -346,21 +348,21 @@ GEM erb psych (>= 4.0.0) tsort - react_on_rails (17.0.0.rc.12) + react_on_rails (17.0.0) addressable connection_pool execjs (~> 2.5) rails (>= 5.2) rainbow (~> 3.0) shakapacker (>= 6.0) - react_on_rails_pro (17.0.0.rc.12) + react_on_rails_pro (17.0.0) async (>= 2.29) async-http (~> 0.95) execjs (~> 2.9) io-endpoint (~> 0.17.0) jwt (>= 2.5, < 4) nokogiri (>= 1.12, < 2) - react_on_rails (= 17.0.0.rc.12) + react_on_rails (= 17.0.0) redcarpet (3.6.0) redis (5.3.0) redis-client (>= 0.22.0) @@ -548,7 +550,7 @@ DEPENDENCIES rails-html-sanitizer rails_best_practices rainbow - react_on_rails_pro (= 17.0.0.rc.12) + react_on_rails_pro (= 17.0.0) redcarpet redis (~> 5.0) rspec-rails (~> 6.0.0) diff --git a/package.json b/package.json index 63cb120a..4c93b0ec 100644 --- a/package.json +++ b/package.json @@ -82,8 +82,8 @@ "react-dom": "~19.2.7", "react-error-boundary": "^4.1.2", "react-intl": "^6.4.4", - "react-on-rails-pro": "17.0.0-rc.12", - "react-on-rails-pro-node-renderer": "17.0.0-rc.12", + "react-on-rails-pro": "17.0.0", + "react-on-rails-pro-node-renderer": "17.0.0", "react-on-rails-rsc": "19.2.1", "react-redux": "^8.1.0", "react-router": "^6.13.0", diff --git a/yarn.lock b/yarn.lock index 3724c373..24b7d7f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8767,10 +8767,10 @@ react-is@^18.0.0, react-is@^18.3.1: resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== -react-on-rails-pro-node-renderer@17.0.0-rc.12: - version "17.0.0-rc.12" - resolved "https://registry.npmjs.org/react-on-rails-pro-node-renderer/-/react-on-rails-pro-node-renderer-17.0.0-rc.12.tgz#e867fa5f61cc8b94dcdc9d40762fee615041ec57" - integrity sha512-Dx+jJpvHo4o3TY4PXQXrlU6QfHjBFYPfF7XaEzQJ3i/WMSx1NXshtMFhzHGh5qAPFhdZwFIEoOObh7Ikf2EYmA== +react-on-rails-pro-node-renderer@17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/react-on-rails-pro-node-renderer/-/react-on-rails-pro-node-renderer-17.0.0.tgz#5aec3ffb90b70e2465df1b8495a3f6b4bc432789" + integrity sha512-82yuZubo1iaoVpnH8adznf0rVLoZvsSWxYbLYdbKhrdwPjt9MxtyJG6//sqd77hSRX3EVnXQONvkiiur8qLQtw== dependencies: "@fastify/formbody" "^7.4.0 || ^8.0.2" "@fastify/multipart" "^8.3.1 || ^9.0.3" @@ -8780,12 +8780,12 @@ react-on-rails-pro-node-renderer@17.0.0-rc.12: lockfile "^1.0.4" pino "^9.14.0 || ^10.1.0" -react-on-rails-pro@17.0.0-rc.12: - version "17.0.0-rc.12" - resolved "https://registry.npmjs.org/react-on-rails-pro/-/react-on-rails-pro-17.0.0-rc.12.tgz#34671885af972cba410cd9496728c5d3188b63f5" - integrity sha512-2BahIzm71nLHp0x7A8Q+zS5Wdh5uIdvUUR/rzZNcJOe9GvcSQ4AWxBtpQkqu5ucQ0omdc4LvQAODo83+4bHZPg== +react-on-rails-pro@17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/react-on-rails-pro/-/react-on-rails-pro-17.0.0.tgz#831e4cbe48d7b4d60185fecbae7e7fb6ea1d2a6f" + integrity sha512-4eEOnr0K5d5POR9iwaaJGZWrNZUUL1gehhlQDfx83T8Nk3PIb4xVQkOVGkQBko4Wj/fCs9TSUFpMm741+9bNwg== dependencies: - react-on-rails "17.0.0-rc.12" + react-on-rails "17.0.0" react-on-rails-rsc@19.2.1: version "19.2.1" @@ -8797,10 +8797,10 @@ react-on-rails-rsc@19.2.1: react-server-dom-webpack "~19.2.7" webpack-sources "^3.2.0" -react-on-rails@17.0.0-rc.12: - version "17.0.0-rc.12" - resolved "https://registry.npmjs.org/react-on-rails/-/react-on-rails-17.0.0-rc.12.tgz#080f580d81cac5c070c0b50dec009b88af7df5d0" - integrity sha512-/Y4+ohGT+bnlkLx5txd6EjnjOa5rssNPgPAqWITjR9ruCMAHA1Pf0QmYabAzihIsswB2SOdDp71CVbseirE/kw== +react-on-rails@17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/react-on-rails/-/react-on-rails-17.0.0.tgz#5bc518fb73c6c250fb8cbf1aa4d3bc36b0093c1f" + integrity sha512-jVJmaXJaVsCVoZCWMQ3ePACWaGkq3hOlmbeR0LniQKLr8+kDDgL0RbZ/6D1J2tMAsd1CxS+sOu0PCyO0ZfAQ+g== react-proxy@^1.1.7: version "1.1.8"