Reorganized repository into a monorepo structure to support multiple React on Rails demo applications with shared tooling, comprehensive version management, and robust automation scripts.
packages/shakacode-demo-common/- Shared configuration and utilities (renamed fromreact_on_rails_shakacode-demo-common)demos/- Directory for demo applications (to be populated)bin/- Ruby executables for demo management (new-demo,scaffold-demo,update-all-demos)scripts/- Legacy bash scripts (kept for compatibility)lib/demo_scripts/- Ruby modules for demo creation with full RSpec test coveragedocs/- Comprehensive documentation for contributors and version management
- ✅ Added input validation to prevent path traversal attacks in demo creation scripts
- ✅ Fixed variable expansion syntax error in
scaffold-demo.sh - ✅ Fixed subshell issue in
test-all.shthat prevented failure tracking
- Module:
ReactOnRailsDemoCommon→DemoCommon - Files:
lib/react_on_rails_shakacode-demo-common/→lib/shakacode-demo-common/ - Generator:
react_on_rails_shakacode-demo-common:install→shakacode-demo-common:install - Updated all references throughout codebase
- Updated README with correct monorepo installation examples
Ruby Scripts (Recommended):
bin/new-demo- Create basic demo with version controlbin/scaffold-demo- Create advanced demo with optionsbin/update-all-demos- Bulk update gem versions across demos
Shared Dependencies:
- Created
Gemfile.development_dependenciesfor inherited dev gems - Demos use
eval_gemfilepattern for consistency
Code Quality:
- ✅ RuboCop configured and passing (0 offenses)
- ✅ Prettier installed for code formatting
- ✅ Lefthook pre-commit hooks for quality checks
- ✅ Full RSpec test suite for Ruby scripts
- ✅
VERSION_MANAGEMENT.md- Comprehensive guide for managing gem versions - ✅
CONTRIBUTING_SETUP.md- Development setup and hooks - ✅ Updated all bash script references to Ruby programs
- ✅ Added cypress-playwright-on-rails reference
- ✅ Documented
Gemfile.development_dependenciespattern
- Added Prettier at monorepo root with configuration
- Formatted all markdown, YAML, JSON, and JavaScript files
- Added npm scripts:
npm run formatandnpm run format:check
- ✅ JavaScript dependencies now install after Rails generators
- ✅ Scripts support both npm and pnpm
- ✅ Dry-run mode for safe testing
- ✅ Pre-flight checks (git status, directory existence)
- ✅ Proper error handling and reporting
- Updated GitHub Actions workflow for monorepo structure
- Fixed shallow clone issues for PR diffs
- Proper shell quoting for robustness
- Tests run selectively for changed demos (max 5)
SHAKAPACKER_VERSION="~> 8.0"
REACT_ON_RAILS_VERSION="~> 16.0"Basic demo:
bin/new-demo my-demoWith custom versions:
bin/new-demo my-demo \
--shakapacker-version '~> 8.1' \
--react-on-rails-version '~> 16.1'Advanced scaffolding:
bin/scaffold-demo my-advanced-demo \
--react-on-rails-version '16.0.0.beta.1'With custom Rails/generator arguments:
bin/new-demo my-demo \
--rails-args="--skip-test,--api" \
--react-on-rails-args="--redux,--node"bin/update-all-demos \
--react-on-rails-version '~> 16.1' \
--shakapacker-version '~> 8.1'Before:
require 'react_on_rails_shakacode-demo-common'
ReactOnRailsDemoCommon.root
rails generate react_on_rails_shakacode-demo-common:installAfter:
require 'shakacode-demo-common'
DemoCommon.root
rails generate shakacode-demo-common:installBefore:
gem 'react_on_rails_shakacode-demo-common', github: 'shakacode/react_on_rails_shakacode-demo-common'After (within monorepo):
# In demo's Gemfile
eval_gemfile File.expand_path("../../Gemfile.development_dependencies", __dir__)
gem 'shakacode-demo-common', path: '../../packages/shakacode-demo-common'After (from GitHub):
gem 'shakacode-demo-common', github: 'shakacode/react_on_rails-demos', glob: 'packages/shakacode-demo-common/*.gemspec'- ✅ All RSpec tests pass
- ✅ RuboCop linting passes (0 offenses)
- ✅ Prettier formatting applied
- ✅ Demo creation scripts validated
- ✅ Security vulnerabilities addressed
- ✅ CI workflow updated and tested
- ✅ Module renaming completed throughout codebase
For existing consumers:
-
Update Gemfile:
# Old gem 'react_on_rails_shakacode-demo-common', github: '...' # New gem 'shakacode-demo-common', github: 'shakacode/react_on_rails-demos', glob: 'packages/shakacode-demo-common/*.gemspec'
-
Update require statements:
# Old require 'react_on_rails_shakacode-demo-common' # New require 'shakacode-demo-common'
-
Update module references:
# Old ReactOnRailsDemoCommon.root # New DemoCommon.root
-
Update generator commands:
# Old rails generate react_on_rails_shakacode-demo-common:install # New rails generate shakacode-demo-common:install
- Git branch support in
bin/new-demo(planned) - Additional demo templates
- Automated demo deployment workflows
- Integration with cypress-playwright-on-rails
- VERSION_MANAGEMENT.md - Version management workflows
- CONTRIBUTING_SETUP.md - Development setup guide
- cypress-playwright-on-rails - Testing tools
🤖 Generated with Claude Code
Co-Authored-By: Claude noreply@anthropic.com