-
-
Notifications
You must be signed in to change notification settings - Fork 72
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CableReady 5.0 installer #233
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 tasks
leastbad
force-pushed
the
new_installer
branch
from
December 28, 2022 19:12
ed07a2e
to
d615494
Compare
Closed
julianrubisch
force-pushed
the
new_installer
branch
from
February 13, 2023 09:16
226c3bc
to
419e527
Compare
… into new_installer
… into new_installer
At least for now
marcoroth
force-pushed
the
new_installer
branch
from
February 13, 2023 12:01
6521d21
to
ab5b096
Compare
marcoroth
approved these changes
Feb 13, 2023
marcoroth
added a commit
to stimulusreflex/stimulus_reflex
that referenced
this pull request
Feb 19, 2023
With sincere and genuine apologies for how long this has been in the oven, here is my best attempt at providing a luxe, single-command install task for SR. It builds directly on the techniques and outputs of preceding foundational efforts by both [Julian](stimulusreflex/cable_ready#179) and [Marco](https://github.com/stimulusreflex/stimulus_reflex/tree/v3.5-installer). It supports all major bundlers in their default configuration: Rails 6.1: webpacker 5.4.3, shakapacker, vite Rails 7: importmap, esbuild, shakapacker, vite The installer is divided into steps which are designed to be either generic or highly specific to one of the bundlers. The installer uses temporary files to maintain state; one of the major wins is that it means the setup process can fail, they can fix an issue, and task is smart enough to resume where they left off. It will also survive a reboot, which is something you cannot say about environment variables. One of the things I'm most excited about is the new `example` the install task offers to generate. Instead of just a Reflex class and Stimulus controller, I realized that there's huge value in creating something that people can just run out of the box. This creates a controller, fully self-contained view and root. Right now, it's super minimalist, but I talk more in the Why section below about my vision for this. I stash an MD5 hash of `Gemfile` so that we only need to run `bundle` if something changes. Likewise, I actually dynamically rebuild `package.json` based on added dependencies, development dependencies and removed dependencies. This allows us to run the dreaded, slow AF `yarn` build process 0 or 1 times, instead of 3 times since there is no way to combine these three operations on the command line. I make efforts to create or modify most files in-place, but for files like the `{entrypoint}/controllers/index.js` where it's likely they made changes, it copies the existing file to `.bak`, generates a "perfect" new file, and then gives them a list of such replacements at the end. ```bash rails stimulus_reflex:install # fully automatic detections, with prompts rails stimulus_reflex:install esbuild # specify a bundler rails stimulus_reflex:install entrypoint=app/frontend webpacker # install with webpacker 5.4.3 in app/frontend rails stimulus_reflex:install:step action_cable yarn bundle # re-run one or more steps rails stimulus_reflex:install:restart # wipe state and restart install rails stimulus_reflex:install uncomment=true # uncomment any necessary includes that have been commented rails stimulus_reflex:install spring=false # do not remove spring (equivalent to answering `n`) rails stimulus_reflex:install example=true # create an example page and route rails stimulus_reflex:install trace=true # debug install process with full stack trace rails stimulus_reflex:install:step mrujs # force install mrujs rails stimulus_reflex:install:step compression # monkey patch Action Cable to compress WS traffic with deflate # full fat install with zero interactive prompts, suitable for scripting rails stimulus_reflex:install esbuild entrypoint=app/javascript uncomment=true example=true ``` ## Why should this be added First, we really need to up our installation and integration game to overcome the emotional barrier people often feel when comparing us against a built-in solution. The more we can make installing SR/CR feel like ordering a Big Mac combo, the less water "golden path" arguments hold. Second, I am convinced that one of the most powerful things we can do to advance the adoption of this stack is to put as much energy into the onboarding experience as we can, and to that end, I want to develop the built-in `example` to showcase as many core concepts and *differentiating* features as we can on one page. I'm picturing an engaging "long scroll" that alternates between live demos with code examples, short lists of compelling features and maybe even a few testimonials, like a microsite. --- The CableReady version now lives at stimulusreflex/cable_ready#233. Co-authored-by: Marco Roth <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Type of PR
Feature
Description
This PR is the CableReady counterpart to stimulusreflex/stimulus_reflex#610.
I'm not going to rehash everything discussed in the SR installer; it is a modified subset of the same system. There are some small differences but great pains have been taken to keep everything consistent. It is possible to install CableReady, and then add StimulusReflex to the project and install StimulusReflex at a later date. Note that if you try to run the CableReady installer when StimulusReflex is in your project, it will exit and tell you to run the SR installer;
It supports all major bundlers in their default configuration:
Rails 6.1: webpacker 5.4.3, shakapacker, vite
Rails 7: importmap, esbuild, shakapacker, vite
I've adapted the
cable_ready:channel
generator to work with the new installer. Thecable_ready:initializer
generator has been removed in favor of the installer.Open questions and stuff still to be done
Why should this be added
We really need to up our installation and integration game to overcome the emotional barrier people often feel when comparing us against a built-in solution. The more we can make installing CR feel like ordering a Big Mac combo, the less water "golden path" arguments hold.
Closes #179 with massive kudos to @julianrubisch for showing me how to structure an installer.
Closes #180 with apologies to @Matt-Yorkley for the delay
Fixes #130 with a hat-tip to @julianrubisch
Fixes #131
Checklist