Skip to content
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

Use webpacker for bundling and transpiling javascript #484

Merged
merged 15 commits into from Jun 14, 2018

Conversation

stardust66
Copy link
Contributor

@stardust66 stardust66 commented Jun 12, 2018

Context


Use rails/webpacker instead of sprockets for all javascript files for the following reasons:

  • Enables use of ES6 javascript without the need for .es6 extensions. For some reason that was the requirement for sprockets-es6. (See Decaffeinate #474). ES6 is what the web is moving towards. It also allows for cleaner syntax when converting from Coffeescript.
  • Webpacker uses yarn for javascript package management, instead of using gems to wrap javascript libraries (such as jquery-rails). This will be more familiar to javascript developers. From here on, adding more javascript libraries is trivial.

Webpacker effectively decouples the javascript side of things with the ruby on rails side. It brings standard javascript ecosystems to ruby projects. This makes finding contributors for just the javascript side easier.

Caveats:

  • It might seem weird to have two asset management systems, sprockets and webpacker. Though, Webpacker's README does say that the two systems are meant to coexist and that the primary purpose of webpacker is to deal with javascript.
  • I couldn't delete the coffee-rails gem because I think active-admin still needs it.

I recommend looking at the diffs for individual commits than all of them together. Please ask me questions if you have any.

Checklist

  • CI Passes
  • Deploys to Heroku on test Correctly (Maintainers will handle)
  • Added Documentation (Service and Code when required)

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.
- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.
All changes cherry-picked and squashed from decaffeinate branch
Remove jquery-rails gem because it's now managed with yarn
Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`
@DeeDeeG
Copy link
Contributor

DeeDeeG commented Jun 12, 2018

Do we need to take bin/yarn out of the .gitignore file now that we're using yarn?

https://github.com/RefugeRestrooms/refugerestrooms/pull/484/files#diff-a084b794bc0759e7a6b77810e01874f2R36

@stardust66
Copy link
Contributor Author

stardust66 commented Jun 12, 2018

We don't really need it. It's just a ruby wrapper around the system command yarn. During setup and deployment I've configured Docker to just use the command.

https://github.com/stardust66/refugerestrooms/blob/c446173c6ca4e906ec4597bb4e4aae2db78be645/bin/yarn

Copy link
Contributor

@DeeDeeG DeeDeeG left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, thanks @stardust66.

Once again, this presents us with a way to get rid of CoffeeScript files in favor of es6-era JavaScript.

And apparently we would still be serving transpiled, non-es6 JavaScript to our end-users (site visitors). So there's no worry about compatibility with older or peculiar browsers.

My take: Small upside but no downside. (Again, assuming we prefer es6 JavaScript to CoffeeScript). I don't know if I should be the one to merge this, since I rarely touch JavaScript files directly, but I have nothing personally against merging this should that be the direction folks decide they want to go.

@tkwidmer
Copy link
Contributor

I'm in favor of this. Looks like we need to resolve conflicts, and we have a few code climate issues, but I think this has a big upside. Makes it much easier for people who are not me to contribute. =)

@DeeDeeG
Copy link
Contributor

DeeDeeG commented Jun 14, 2018

Whoops, I think I deleted your merge of develop into this branch, @tkwidmer. Sorry for the mistake.

(The Code Climate site had been tracking our code-climate branch temporarily... So this PR against develop wasn't tracked when your commit was pushed. So the codeclimate analysis for this PR went away.

I just went and set the website to track our develop branch again, which is done. But then when I re-pushed this branch to update it, I forgot to pull your commit to my local repo. When I force-pushed, my copy of the branch without your commit was pushed to @stardust66's repo.)

I succeeded in bringing the codeclimate analysis back, but as mentioned I did also delete your commit.

Would you want to re-merge develop into this PR's branch?

Edit: I just re-did the merge myself, hope that's okay. I'll try to be more careful with force pushes, generally speaking.

@DeeDeeG
Copy link
Contributor

DeeDeeG commented Jun 14, 2018

  • By the way, would it still make sense to eventually switch to Sprockets 4 (once that's out of beta)?

  • Also we can in fact get rid of coffee-rails from the Gemfile if we want. When we use active-admin, bundler will automatically include the appropriate version of coffee-rails that active-admin depends on. So, deleting the coffee-rails line in our Gemfile won't stop us from using the Gem in our project (unless/until active-admin doesn't require it anymore), but it'll be handled more automatically.

Updates the 'webpacker' branch to use Ruby 2.3.7
Copy link
Contributor

@DeeDeeG DeeDeeG left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking into the Code Climate issues...

3 of the 5 are these similar functions that it wants these refactored in a more DRY way:

  $('#ada_filter').click(function() {
    if ($(this).hasClass("active")) {
      $('.listItem.not_accessible').show();
    } else {
      $('.listItem.not_accessible').hide();

We have this same function in restrooms.js for powering the ADA accessible filter button, as well as the, unisex, and diaper changing table filter buttons.

The we have these two "similar functions":

$(() => {
  $.fn.initializeNewRestroomForm = function() { return new NewRestroomForm($(this)); };
  $('.submit-new-bathroom-form').initializeNewRestroomForm();
});

(from new.js) and:

$(() => {
  $.fn.initializeSearch = function() { return new Search($(this)); };
  $('.search-restrooms-form').initializeSearch();
});

(from search.js)

I suspect these two "similar functions" don't need to be any more optimized, and we can dismiss these as "invalid" code warnings on the code climate site. or simply ignore them.

code-climate-marking-a-code-issue-as-invalid

All that said, since I'm not such a big JS writer/reader, I don't know how big/little a deal either of these things is, so I leave it to the JS readers/writers to figure out.)

@tkwidmer
Copy link
Contributor

I think we can ignore those issues, This seems fine to merge as long as its functional. Thanks to both @stardust66 and @DeeDeeG for picking this up.

@tkwidmer tkwidmer had a problem deploying to refuge-staging-14-pr-484 June 14, 2018 20:29 Failure
@tkwidmer
Copy link
Contributor

Looks like this isn't building correctly to Heroku.
Assets are not getting pre-compiled correctly

       The latest bundler is 1.16.2, but you are currently running 1.15.2.
       To update, run `gem install bundler`
-----> Installing node-v8.10.0-linux-x64
-----> Installing yarn-v1.5.1
-----> Detecting rake tasks
-----> Preparing app for Rails asset pipeline
       Running: rake assets:precompile
       W, [2018-06-14T20:30:36.862350 #4064]  WARN -- : No valid API key has been set, notifications will not be sent
       I, [2018-06-14T20:30:40.617063 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/active_admin-8f4a05166e4e3f3733b924879539581f823c7895202c31a69559fb0bd8ead8ff.css
       I, [2018-06-14T20:30:40.617450 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/active_admin-8f4a05166e4e3f3733b924879539581f823c7895202c31a69559fb0bd8ead8ff.css.gz
       I, [2018-06-14T20:30:40.617895 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif
       I, [2018-06-14T20:30:40.619001 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif
       I, [2018-06-14T20:30:40.619737 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/active_admin/datepicker/datepicker-input-icon-d9c2bb73769af777c8a71720d29741f3a499aebd5a043e9a119bd0d9597aed47.png
       I, [2018-06-14T20:30:40.620859 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png
       I, [2018-06-14T20:30:40.831618 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/active_admin/print-87c5ffc1d869a919123bcc1dc5ec51b20bc79fd9aeab9eed77e3438c6acd4f68.css
       I, [2018-06-14T20:30:40.831790 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/active_admin/print-87c5ffc1d869a919123bcc1dc5ec51b20bc79fd9aeab9eed77e3438c6acd4f68.css.gz
       I, [2018-06-14T20:30:47.470066 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/active_admin-ab8a8f0821ac4fc52d26d313e31ed0ca9633ecdffa061669fe981c1d6550938f.js
       I, [2018-06-14T20:30:47.470261 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/active_admin-ab8a8f0821ac4fc52d26d313e31ed0ca9633ecdffa061669fe981c1d6550938f.js.gz
       I, [2018-06-14T20:30:47.473864 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/glyphicons-halflings-regular-f495f34e4f177cf0115af995bbbfeb3fcabc88502876e76fc51a4ab439bc8431.eot
       I, [2018-06-14T20:30:47.474032 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/glyphicons-halflings-regular-f495f34e4f177cf0115af995bbbfeb3fcabc88502876e76fc51a4ab439bc8431.eot.gz
       I, [2018-06-14T20:30:47.478896 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/glyphicons-halflings-regular-d168d50a88c730b4e6830dc0da2a2b51dae4658a77d9619943c27b8ecfc19d1a.svg
       I, [2018-06-14T20:30:47.479453 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/glyphicons-halflings-regular-d168d50a88c730b4e6830dc0da2a2b51dae4658a77d9619943c27b8ecfc19d1a.svg.gz
       I, [2018-06-14T20:30:47.488607 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/glyphicons-halflings-regular-bd18efd3efd70fec8ad09611a20cdbf99440b2c1d40085c29be036f891d65358.ttf
       I, [2018-06-14T20:30:47.488811 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/glyphicons-halflings-regular-bd18efd3efd70fec8ad09611a20cdbf99440b2c1d40085c29be036f891d65358.ttf.gz
       I, [2018-06-14T20:30:47.496658 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/glyphicons-halflings-regular-fc969dc1c6ff531abcf368089dcbaf5775133b0626ff56b52301a059fc0f9e1e.woff
       I, [2018-06-14T20:30:47.499644 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/Logo-Small-4e2341333f1fcfcdba84888b68e3034ead6e4c8614ca42a24e9fe5daa068db1d.png
       I, [2018-06-14T20:30:47.502104 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/Logo-lg-e5b791c0ce817c37505a05b951acbc94828e47f84257d6e85a9b7363fbe5ebbd.png
       I, [2018-06-14T20:30:47.504550 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/ToiletLogo-large-880101276e39678f000b1718d52afd4c816d6e631701c098673b622a6d001153.png
       I, [2018-06-14T20:30:47.506986 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/ToiletLogo-b532a307a5b9b4f4aaba3d120daae5c94ce81fc327b67d294e04e2d4a827c7a3.png
       I, [2018-06-14T20:30:47.509493 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/UnisexRestroom-f3945678e99de461f672c19816eb306efd44763c48ae8bfa77d398926e9cbf57.png
       I, [2018-06-14T20:30:47.512065 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/app-store-25178aeef6eb6b83b96f5f2d004eda3bffbb37122de64afbaef7107b384a4132.svg
       I, [2018-06-14T20:30:47.512377 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/app-store-25178aeef6eb6b83b96f5f2d004eda3bffbb37122de64afbaef7107b384a4132.svg.gz
       I, [2018-06-14T20:30:47.519043 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/city-photo-2x-a2d173c76b8f842b3d281d0a31934e3e6f718c2b5122038d321be505a8cf6b8c.jpg
       I, [2018-06-14T20:30:47.528133 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/city-photo-3x-cbdc111ca48a19a6b2ab85f6bb8f72684a7052adbafc1f2aa878f1ef13b05752.jpg
       I, [2018-06-14T20:30:47.551808 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/city-photo-original-fullsize-503300bc00be0b3db803c77c6fdd9fdee38cad84314d5ecebdc1d0518fe1a4eb.jpg
       I, [2018-06-14T20:30:47.560633 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/city-photo-8c8389588753ad2109c7c664365868a9d01db532355217e6bb65e6abb9c879de.jpg
       I, [2018-06-14T20:30:47.563586 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/currentLocation-601b684ef28fa75ea8807572b54d246717d04c247b461afd36e94434966916cc.png
       I, [2018-06-14T20:30:47.565958 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/facebook-50cd38293a2223cf033ff6fe2897573219ad9eae3d12cdc7ea1e586af6bd9aea.png
       I, [2018-06-14T20:30:47.568466 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/favicon-3e623bb395429260d5c921e3f5466ef64121eee866faa1d9eb5465215d7f73cc.ico
       I, [2018-06-14T20:30:47.568636 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/favicon-3e623bb395429260d5c921e3f5466ef64121eee866faa1d9eb5465215d7f73cc.ico.gz
       I, [2018-06-14T20:30:47.571457 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/github-260bc5a0239b10c661cc3983b2e2c8775db6186b673b4983f888f5caa5f2160c.png
       I, [2018-06-14T20:30:47.573811 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/layers-2x-0c02a2388f637d21f86e6d4b314ec9a968e7b05ad4c3a005280a3f76c0fd3cb8.png
       I, [2018-06-14T20:30:47.576092 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/layers-0908aa2a72a082fb2563a2427a5e4fb247571862b448b80fb6f720af1109923e.png
       I, [2018-06-14T20:30:47.578411 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/loading-5726a00302e33b871362163c4e303c207fc81351bd652950a2e0adb37f076160.gif
       I, [2018-06-14T20:30:47.580968 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/logo-100x100-86f97aa57df88c23fc970a8860578fc8d5b45b6c74ea1b437774e2bedb2a771f.png
       I, [2018-06-14T20:30:47.583464 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/logo-dark-ff47f87543eb1af7e7200fa978b89dd60bbb53e78d8df2f395362165b19478ad.svg
       I, [2018-06-14T20:30:47.583624 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/logo-dark-ff47f87543eb1af7e7200fa978b89dd60bbb53e78d8df2f395362165b19478ad.svg.gz
       I, [2018-06-14T20:30:47.586320 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/mail-fa2cbeeb5b236add0eb8243aaff7fc072eb22ac9ecd2a46e7137314b75bb415e.png
       I, [2018-06-14T20:30:47.588943 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/marker-circle-b16f72e98b224f255e9473cc86a0cb72d62942396b3f5a34294748cf6465cd46.png
       I, [2018-06-14T20:30:47.591265 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/marker-circle2x-05fabb3d83b3e05be63efa61bdb7bbded189398dc058203b369f23b56febf171.png
       I, [2018-06-14T20:30:47.593693 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/marker-icon-2x-454dc479e82b487529b6b93d6a9b29ac69ca7b4f5a9d5fdf8e01871f6d216113.png
       I, [2018-06-14T20:30:47.595978 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/marker-icon-915e83a6fc798c599e5c9e3f759d6bc065d65151019acd0410d1f4731bcaaf72.png
       I, [2018-06-14T20:30:47.598072 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/marker-shadow-4f340d2d61746333dffe056e074ce1704ae4e47fec5a7de98322fbdbcfcb2b6d.png
       I, [2018-06-14T20:30:47.600228 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/patreon-beab093b0b260068591db255b0e7797923bc926e5c476384ac22d43f29e568f4.png
       I, [2018-06-14T20:30:47.602489 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/play-store-230fd37af69d9b9ffe687ebda6a7385d939b16ec23df7ab1da76b20c067385ba.png
       I, [2018-06-14T20:30:47.604661 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/qrcode-sign-no-handi-baf4916377a3937d3cb47be1e8b1ce9afca03915a62299787ed46e886b7100ce.png
       I, [2018-06-14T20:30:47.606924 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/qrcode-sign-with-handi-130dbfcb039cd8374e68fc3834cae54624b2a291a3a096021aef0850beec58f1.png
       I, [2018-06-14T20:30:47.609138 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/rr-sign-no-handi-7baab0d0bc0489fdd3f5dcf4f7c9280864923e25f6961e980bfe288def198f9c.png
       I, [2018-06-14T20:30:47.611382 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/rr-sign-with-handi-b298097714038c3281a55a08c901a8d93b17ff5a4416ae6d934117daaf18aa77.png
       I, [2018-06-14T20:30:47.613719 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/show-icon-d307773a181c22fc7adb4e30e9c4d961f0517cdc2bac2be06fdb2a6766f5db92.png
       I, [2018-06-14T20:30:47.616092 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/splashlanding-4b33beac3bdb04ac55467be930bf8510904fcf59a4d7b609e339e5558f15649b.png
       I, [2018-06-14T20:30:47.618532 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/submit-316395468963aaa1cdec5d5664fd734499596c630f0ae471b441eadd2f96e535.png
       I, [2018-06-14T20:30:47.620912 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/submit-6a6048c7b83c76c88873b3f3fe187f619554a9ff89de9f8ea444350380131008.svg
       I, [2018-06-14T20:30:47.621084 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/submit-6a6048c7b83c76c88873b3f3fe187f619554a9ff89de9f8ea444350380131008.svg.gz
       I, [2018-06-14T20:30:47.623864 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/text-msg-demo-58bd11c0b2c28a6b3ed7689ec616b10279587ff98c970eba370ce8d4afba97c9.png
       I, [2018-06-14T20:30:47.626334 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/tumblr-11ff14ac38af1daf582f88f511cac0864f1264eb76bcdaeae3ab3f80a995f478.png
       I, [2018-06-14T20:30:47.628590 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/twitter-0b3e680083932f5e0c0805c73714bb8639d4089f514f25e178e597e1b61324cf.png
       I, [2018-06-14T20:30:47.631037 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/unisex-slider-7cd9759f15af3157b40bfe30b935912e4b88e8263e81c6a27c56728b6cb261f4.png
       I, [2018-06-14T20:30:47.633427 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/unisex-slider-ca1e937be14abb54866832368842d2883b705c7ab9923aaa8573b10849899154.svg
       I, [2018-06-14T20:30:47.633706 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/unisex-slider-ca1e937be14abb54866832368842d2883b705c7ab9923aaa8573b10849899154.svg.gz
       I, [2018-06-14T20:30:54.694246 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/application-68e9a1f432c831f73190ccbe96f61c99232aa09e2fb5770d817e31f07332aa48.css
       I, [2018-06-14T20:30:54.694451 #4064]  INFO -- : Writing /tmp/build_1c05d87e32952f921a9383e8c2caedcc/public/assets/application-68e9a1f432c831f73190ccbe96f61c99232aa09e2fb5770d817e31f07332aa48.css.gz
       Webpacker is installed 🎉 🍰
       Using /tmp/build_1c05d87e32952f921a9383e8c2caedcc/config/webpacker.yml file for setting up webpack paths
       Compiling…
       Compilation failed:
       /tmp/build_1c05d87e32952f921a9383e8c2caedcc/vendor/bundle/ruby/2.3.0/gems/webpacker-3.5.3/lib/webpacker/webpack_runner.rb:11:in `exec': No such file or directory - /tmp/build_1c05d87e32952f921a9383e8c2caedcc/node_modules/.bin/webpack (Errno::ENOENT)
       	from /tmp/build_1c05d87e32952f921a9383e8c2caedcc/vendor/bundle/ruby/2.3.0/gems/webpacker-3.5.3/lib/webpacker/webpack_runner.rb:11:in `block in run'
       	from /tmp/build_1c05d87e32952f921a9383e8c2caedcc/vendor/bundle/ruby/2.3.0/gems/webpacker-3.5.3/lib/webpacker/webpack_runner.rb:10:in `chdir'
       	from /tmp/build_1c05d87e32952f921a9383e8c2caedcc/vendor/bundle/ruby/2.3.0/gems/webpacker-3.5.3/lib/webpacker/webpack_runner.rb:10:in `run'
       	from /tmp/build_1c05d87e32952f921a9383e8c2caedcc/vendor/bundle/ruby/2.3.0/gems/webpacker-3.5.3/lib/webpacker/runner.rb:6:in `run'
       	from ./bin/webpack:15:in `<main>'
       
       
 !
 !     Precompiling assets failed.
 !
 !     Push rejected, failed to compile Ruby app.
 !     Push failed

@tkwidmer
Copy link
Contributor

Looks like Node Modules are not getting compiled and built to the tmp file.

@DeeDeeG
Copy link
Contributor

DeeDeeG commented Jun 14, 2018

(Off-topic a bit) This PR just reminded me: I'm pretty sure our JS code isn't directly covered by a testing scheme yet.

So CI isn't really helping us out there. Well, I mean, lots of the Ruby tests need the JS to be working to pass, but some JS code probably isn't tested? Maybe?

Not sure now.

@tkwidmer
Copy link
Contributor

rails/webpacker#739 This could be related.

And you're correct, none of the JS code itself is strictly tested.

@tkwidmer tkwidmer had a problem deploying to refuge-staging-14-pr-484 June 14, 2018 20:48 Failure
@DeeDeeG
Copy link
Contributor

DeeDeeG commented Jun 14, 2018

Lots of people over at that issue are saying they needed to run some commands on the Heroku side of things:

rails/webpacker#739 (comment)

Optionally?:

heroku buildpacks:clear

Then:

heroku buildpacks:add heroku/nodejs
heroku buildpacks:add heroku/ruby

@tkwidmer
Copy link
Contributor

I've updated the buildpacks on heroku. And am attempting to redeploy

@tkwidmer
Copy link
Contributor

I did it via the CLI and the web app for heroku

@tkwidmer tkwidmer had a problem deploying to refuge-staging-14-pr-484 June 14, 2018 20:50 Failure
@tkwidmer
Copy link
Contributor

Still failing with the same error.

@tkwidmer tkwidmer had a problem deploying to refuge-staging-14-pr-484 June 14, 2018 20:54 Failure
@stardust66
Copy link
Contributor Author

stardust66 commented Jun 14, 2018

You need to run

heroku run rake db:migrate

I set up a similar instance on heroku to test this.

@tkwidmer
Copy link
Contributor

Looks like it's working now.

@tkwidmer
Copy link
Contributor

Seems to be working perfectly now. I'm happy to merge this.

},
"HEROKU_POSTGRESQL_CYAN_URL": {
"required": true
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably doesn't make a difference, but this looks duplicated.

    "HEROKU_POSTGRESQL_CYAN_URL": {
      "required": true
    },

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch, we were missing a couple of these, and so they were not inheriting correctly.

tkwidmer
tkwidmer previously approved these changes Jun 14, 2018
Copy link
Contributor

@tkwidmer tkwidmer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@DeeDeeG
Copy link
Contributor

DeeDeeG commented Jun 14, 2018

BTW if this is squashed, I think @stardust66 will lose credit as a commit author.

@tkwidmer
Copy link
Contributor

squashed commits show both authors; bd5ded8

@DeeDeeG
Copy link
Contributor

DeeDeeG commented Jun 14, 2018

I think it only shows: The author of the last commit in the series ("commit author")

and whoever squashed and merged ("committer")

not 100% sure of their algorithm for who is the commit author, but I've usually only see GitHub produce one commit author. Edit: I think.

@tkwidmer
Copy link
Contributor

Alright, I can just do a regular merge commit.

@DeeDeeG
Copy link
Contributor

DeeDeeG commented Jun 14, 2018

I'm not even sure if the underlying Git program can do multiple authors? Researching real quick.

@DeeDeeG
Copy link
Contributor

DeeDeeG commented Jun 14, 2018

https://help.github.com/articles/creating-a-commit-with-multiple-authors/

We can go in and add this manually if needed, while doing a git commit --amend. Then force push to update develop with proper authorship info.

Edit: or normal merge, whatever works.

@tkwidmer tkwidmer merged commit ee25f6a into RefugeRestrooms:develop Jun 14, 2018
@DeeDeeG
Copy link
Contributor

DeeDeeG commented Jun 14, 2018

Re-posting:

I totally missed the later part of that article. It can all be done with the GitHub website's GUI

https://help.github.com/articles/creating-a-commit-with-multiple-authors/#creating-co-authored-commits-on-github

In the text box below your commit message, add Co-authored-by: name <name@example.com> with specific information for each co-author. If you're adding multiple co-authors, give each co-author their own line and Co-authored-by: commit trailer.

so Co-authored-by: Firstname Lastname <myemail@mailprovider.com> in the commit message?

@stardust66 stardust66 deleted the webpacker branch June 14, 2018 22:36
DeeDeeG pushed a commit to DeeDeeG/refugerestrooms that referenced this pull request Jun 16, 2018
…s#484)

Co-authored-by: Jason Chen <kbtpodifo@gmail.com>

* Add webpacker

* Add all configurations for webpacker

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.

* Install what webpacker needs inside Docker

- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.

* Convert all coffeescript files to es6 javascript

All changes cherry-picked and squashed from decaffeinate branch

* Add javascript dependencies with yarn

Remove jquery-rails gem because it's now managed with yarn

* Replace old javascript tag with webpacker's

* Bundle and transpile all javascript with webpacker

Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`

* commit yarn

* add engine

* review apps

* Update Yarn Lock

* Update App.json

* remove trailing comma

* remove duplicate entry
DeeDeeG pushed a commit to DeeDeeG/refugerestrooms that referenced this pull request Jun 16, 2018
…s#484)

Co-authored-by: Jason Chen <kbtpodifo@gmail.com>

Co-authored-by: Teagan <tkwidmer@gmail.com>

* Add webpacker

* Add all configurations for webpacker

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.

* Install what webpacker needs inside Docker

- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.

* Convert all coffeescript files to es6 javascript

All changes cherry-picked and squashed from decaffeinate branch

* Add javascript dependencies with yarn

Remove jquery-rails gem because it's now managed with yarn

* Replace old javascript tag with webpacker's

* Bundle and transpile all javascript with webpacker

Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`

* commit yarn

* add engine

* review apps

* Update Yarn Lock

* Update App.json

* remove trailing comma

* remove duplicate entry
DeeDeeG pushed a commit to DeeDeeG/refugerestrooms that referenced this pull request Jun 16, 2018
…s#484)

Co-authored-by: Jason Chen <kbtpodifo@gmail.com>
Co-authored-by: Teagan <tkwidmer@gmail.com>

* Add webpacker

* Add all configurations for webpacker

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.

* Install what webpacker needs inside Docker

- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.

* Convert all coffeescript files to es6 javascript

All changes cherry-picked and squashed from decaffeinate branch

* Add javascript dependencies with yarn

Remove jquery-rails gem because it's now managed with yarn

* Replace old javascript tag with webpacker's

* Bundle and transpile all javascript with webpacker

Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`

* commit yarn

* add engine

* review apps

* Update Yarn Lock

* Update App.json

* remove trailing comma

* remove duplicate entry
DeeDeeG pushed a commit to DeeDeeG/refugerestrooms that referenced this pull request Jun 16, 2018
…s#484)

* Add webpacker

* Add all configurations for webpacker

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.

* Install what webpacker needs inside Docker

- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.

* Convert all coffeescript files to es6 javascript

All changes cherry-picked and squashed from decaffeinate branch

* Add javascript dependencies with yarn

Remove jquery-rails gem because it's now managed with yarn

* Replace old javascript tag with webpacker's

* Bundle and transpile all javascript with webpacker

Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`

* commit yarn

* add engine

* review apps

* Update Yarn Lock

* Update App.json

* remove trailing comma

* remove duplicate entry

Co-authored-by: Jason Chen <kbtpodifo@gmail.com>
Co-authored-by: Teagan <tkwidmer@gmail.com>
DeeDeeG pushed a commit to DeeDeeG/refugerestrooms that referenced this pull request Jun 16, 2018
…s#484)

* Add webpacker

* Add all configurations for webpacker

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.

* Install what webpacker needs inside Docker

- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.

* Convert all coffeescript files to es6 javascript

All changes cherry-picked and squashed from decaffeinate branch

* Add javascript dependencies with yarn

Remove jquery-rails gem because it's now managed with yarn

* Replace old javascript tag with webpacker's

* Bundle and transpile all javascript with webpacker

Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`

* commit yarn

* add engine

* review apps

* Update Yarn Lock

* Update App.json

* remove trailing comma

* remove duplicate entry

Co-authored-by: Jason Chen <kbtpodifo@gmail.com>
Co-authored-by: Teagan <tkwidmer@gmail.com>
DeeDeeG pushed a commit to DeeDeeG/refugerestrooms that referenced this pull request Jun 16, 2018
…s#484)

* Add webpacker

* Add all configurations for webpacker

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.

* Install what webpacker needs inside Docker

- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.

* Convert all coffeescript files to es6 javascript

All changes cherry-picked and squashed from decaffeinate branch

* Add javascript dependencies with yarn

Remove jquery-rails gem because it's now managed with yarn

* Replace old javascript tag with webpacker's

* Bundle and transpile all javascript with webpacker

Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`

* commit yarn

* add engine

* review apps

* Update Yarn Lock

* Update App.json

* remove trailing comma

* remove duplicate entry

Co-authored-by: Teagan <tkwidmer@gmail.com>
DeeDeeG pushed a commit to DeeDeeG/refugerestrooms that referenced this pull request Aug 8, 2018
…s#484)

Co-authored-by: Jason Chen <kbtpodifo@gmail.com>

* Add webpacker

* Add all configurations for webpacker

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.

* Install what webpacker needs inside Docker

- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.

* Convert all coffeescript files to es6 javascript

All changes cherry-picked and squashed from decaffeinate branch

* Add javascript dependencies with yarn

Remove jquery-rails gem because it's now managed with yarn

* Replace old javascript tag with webpacker's

* Bundle and transpile all javascript with webpacker

Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`

* commit yarn

* add engine

* review apps

* Update Yarn Lock

* Update App.json

* remove trailing comma

* remove duplicate entry
DeeDeeG pushed a commit to DeeDeeG/refugerestrooms that referenced this pull request Aug 8, 2018
…s#484)

Co-authored-by: Jason Chen <kbtpodifo@gmail.com>

* Add webpacker

* Add all configurations for webpacker

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.

* Install what webpacker needs inside Docker

- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.

* Convert all coffeescript files to es6 javascript

All changes cherry-picked and squashed from decaffeinate branch

* Add javascript dependencies with yarn

Remove jquery-rails gem because it's now managed with yarn

* Replace old javascript tag with webpacker's

* Bundle and transpile all javascript with webpacker

Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`

* commit yarn

* add engine

* review apps

* Update Yarn Lock

* Update App.json

* remove trailing comma

* remove duplicate entry
DeeDeeG pushed a commit to DeeDeeG/refugerestrooms that referenced this pull request Oct 15, 2018
…s#484)

Co-authored-by: Jason Chen <kbtpodifo@gmail.com>

* Add webpacker

* Add all configurations for webpacker

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.

* Install what webpacker needs inside Docker

- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.

* Convert all coffeescript files to es6 javascript

All changes cherry-picked and squashed from decaffeinate branch

* Add javascript dependencies with yarn

Remove jquery-rails gem because it's now managed with yarn

* Replace old javascript tag with webpacker's

* Bundle and transpile all javascript with webpacker

Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`

* commit yarn

* add engine

* review apps

* Update Yarn Lock

* Update App.json

* remove trailing comma

* remove duplicate entry
DeeDeeG pushed a commit to DeeDeeG/refugerestrooms that referenced this pull request Nov 3, 2018
…s#484)

Co-authored-by: Jason Chen <kbtpodifo@gmail.com>

* Add webpacker

* Add all configurations for webpacker

Webpacker is the ruby gem that wraps webpack, a javascript utility
for transforming and bundling.

Add:
- Yarn, which webpacker uses to manage javascript dependencies.
- .babelrc, configuration file for Babel, the standard javascript
transpiler. We're using it to transpile es6 javascript so that it's
compatible with more browsers.
- Config files for webpacker.
- Config files to allow webpacker to process .erb files.

* Install what webpacker needs inside Docker

- Get the latest node.js from NodeSource, officially recommended
linux binaries.
link: https://github.com/nodesource/distributions
- Install yarn, javascript package manager required by webpacker.
- Create separate volume for /refugerestrooms/node_modules in
Docker to prevent mounting /refugerestrooms from overriding what
was installed by yarn.

* Convert all coffeescript files to es6 javascript

All changes cherry-picked and squashed from decaffeinate branch

* Add javascript dependencies with yarn

Remove jquery-rails gem because it's now managed with yarn

* Replace old javascript tag with webpacker's

* Bundle and transpile all javascript with webpacker

Now we can write es6 code in any .js file! All the coffeescript
has been converted into js.

Changes:
- Use es6 modules instead of globals. This is better encapsulation.
This results in the removal of `window.Refuge`. Instead, to use a
module, like Geocoder, just import it like this:
`import { Geocoder } from 'path/to/geocoder';`

* commit yarn

* add engine

* review apps

* Update Yarn Lock

* Update App.json

* remove trailing comma

* remove duplicate entry
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants