App rebuild aborts due to custom wizard plugin

AI-generated summary

The discussion revolves around an app rebuild failure in Discourse due to a Sprockets::FileNotFound error related to the discourse/app/mixins/composer-upload file. GuidoD identified that the issue was caused by the custom wizard plugin, which was incompatible with a recent Discourse update. After disabling all plugins, the rebuild succeeded, confirming the plugin as the culprit. angus confirmed the issue was fixed in the plugin’s latest version (1.15.5), and GuidoD confirmed the rebuild worked after updating. Later, mcdanlj reported a similar error with a different mixin (upload), also resolved by updating the plugin. angus noted that an automated compatibility warning system, which detected the issue, will be released soon. mcdanlj praised the upcoming feature.

a rebuild with the latest version does abort with a FileNotFound error:

...
I, [2021-12-01T07:30:27.434946 #670]  INFO -- : Writing /var/www/discourse/public/assets/locales/es-ae86f17b3afa4050566e8f73dc225848cb65e80cad4c295b582952dc77c7eaa0.js
I, [2021-12-01T07:30:27.614232 #670]  INFO -- : Writing /var/www/discourse/public/assets/locales/lv-9f2031c47ff7c4c4148613ed46bcc80db9f17d84b72a0c08fb5dbaf288008aad.js
I, [2021-12-01T07:30:27.822346 #670]  INFO -- : Writing /var/www/discourse/public/assets/locales/el-3c850821550e0cc516515732b7cde8b35cc68c29296abbc39a1c2831ad6ba962.js
I, [2021-12-01T07:30:28.032559 #670]  INFO -- : Writing /var/www/discourse/public/assets/locales/pl_PL-a4a808930b95183b4acb3fec1e8e3e1591cade54f05d4f943585be78e8eb82e5.js
I, [2021-12-01T07:30:28.241255 #670]  INFO -- : Writing /var/www/discourse/public/assets/locales/nb_NO-194012fc110e9b92bd6f406ed2a9eebff3e6dda2ad0bd4b33dfa084b0efb6b67.js
I, [2021-12-01T07:30:28.440104 #670]  INFO -- : Writing /var/www/discourse/public/assets/locales/nl-0bdaabfc71e0a96fef67da00c68f177c508da66854fab7511225dfd11d754aab.js
I, [2021-12-01T07:30:28.448192 #670]  INFO -- : Writing /var/www/discourse/public/assets/wizard-custom-guest-16c07e21721b356a3cf622bc07b3dbee79d53c0624b57562959140418b62a454.js
I, [2021-12-01T07:30:28.455716 #670]  INFO -- : Writing /var/www/discourse/public/assets/wizard-custom-globals-ceb8c5478df3f5ede82d275c13b9badd66fdce63559117914170ea33ab0ee3ba.js
rake aborted!
Sprockets::FileNotFound: couldn't find file 'discourse/app/mixins/composer-upload' with type 'application/javascript'
Checked in these paths:
  /var/www/discourse/app/assets/images
  /var/www/discourse/app/assets/javascripts
  /var/www/discourse/app/assets/stylesheets
  /var/www/discourse/vendor/assets/javascripts
  /var/www/discourse/vendor/assets/svg-icons
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/logster-2.10.0/vendor/assets/javascripts
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/vendor/assets/javascripts
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionview-6.1.4.1/lib/assets/compiled
  /var/www/discourse/config/locales
  /var/www/discourse/public/javascripts
...
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 668 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
f094a27a808540af5c9dd844181fe50f8933cb184b8adf614dee1ecf669fd9cd
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
==================== END REBUILD LOG ====================
Failed to rebuild app.

Do you have the custom wizard plugin? Or other non standard plugins? I’m guessing it’s an issue with the A new era for file uploads in Discourse.

yes, and yes several, I am just checking them one by one.
When I disabled them all the rebuild did work.

I nailed it down, the problem is the custom wizard plugin.
I will move this thread to the plugin category.

@angus fyi, I also created a github issue.

This has been fixed. Please update to the plugin’s latest version (1.15.5).

https://github.com/paviliondev/discourse-custom-wizard/pull/163

thanks a lot for the quick fix.
I just sucessfully did the rebuild with the new version of the plugin.

I’m seeing what looks like a very similar error when trying to build 2.8.0.beta10 with latest discourse-custom-wizard, during bundle exec rake themes:update assets:precompile and I don’t know whether it’s really another manifestation of essentially the same problem.

Sprockets::FileNotFound: couldn't find file 'discourse/app/mixins/upload' with type 'application/javascript'

I can successfully build by removing discourse-custom-wizard from the list of plugins. The complete list I’m trying to build with (./launcher bootstrap app) is:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-canned-replies.git
          - git clone https://github.com/discourse/discourse-tooltips.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-data-explorer.git
          - git clone https://github.com/discourse/discourse-assign
          - git clone https://github.com/gdpelican/retort.git
          - git clone https://github.com/discourse/discourse-checklist
          - git clone https://github.com/discourse/discourse-sitemap
          - git clone https://github.com/discourse/discourse-bcc
          - git clone https://github.com/discourse/discourse-math
          - git clone https://github.com/Ebsy/discourse-nationalflags.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/cpradio/discourse-plugin-composer-help-button.git
          - git clone https://github.com/paviliondev/discourse-custom-wizard.git

It builds fine with that last line commented out, but repeatedly crashes when I try to build build with it in there.

The more complete error:

I, [2021-12-22T02:29:00.989134 #4965]  INFO -- : Writing /var/www/discourse/public/assets/wizard-custom-globals-ceb8c5478df3f5ede82d275c13b9badd66fdce63559117914170ea33ab0ee3ba.js
rake aborted!
Sprockets::FileNotFound: couldn't find file 'discourse/app/mixins/upload' with type 'application/javascript'
Checked in these paths: 
  /var/www/discourse/app/assets/images
  /var/www/discourse/app/assets/javascripts
  /var/www/discourse/app/assets/stylesheets
  /var/www/discourse/vendor/assets/javascripts
  /var/www/discourse/vendor/assets/svg-icons
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/logster-2.10.1/vendor/assets/javascripts
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.8/vendor/assets/javascripts
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionview-6.1.4.1/lib/assets/compiled
  /var/www/discourse/config/locales
  /var/www/discourse/public/javascripts
  /var/www/discourse/plugins/discourse-assign/auto_generated
  /var/www/discourse/plugins/discourse-assign/assets
  /var/www/discourse/plugins/discourse-assign/admin/assets
  /var/www/discourse/plugins/discourse-assign/test/javascripts
  /var/www/discourse/plugins/discourse-bcc/auto_generated
  /var/www/discourse/plugins/discourse-bcc/assets
  /var/www/discourse/plugins/discourse-bcc/admin/assets
  /var/www/discourse/plugins/discourse-bcc/test/javascripts
  /var/www/discourse/plugins/discourse-canned-replies/auto_generated
  /var/www/discourse/plugins/discourse-canned-replies/assets
  /var/www/discourse/plugins/discourse-canned-replies/admin/assets
  /var/www/discourse/plugins/discourse-canned-replies/test/javascripts
  /var/www/discourse/plugins/discourse-checklist/auto_generated
  /var/www/discourse/plugins/discourse-checklist/assets
  /var/www/discourse/plugins/discourse-checklist/admin/assets
  /var/www/discourse/plugins/discourse-checklist/test/javascripts
  /var/www/discourse/plugins/discourse-custom-wizard/assets/javascripts
  /var/www/discourse/plugins/discourse-custom-wizard/assets/stylesheets/wizard
  /var/www/discourse/plugins/discourse-custom-wizard/auto_generated
  /var/www/discourse/plugins/discourse-custom-wizard/assets
  /var/www/discourse/plugins/discourse-custom-wizard/admin/assets
  /var/www/discourse/plugins/discourse-custom-wizard/test/javascripts
  /var/www/discourse/plugins/discourse-data-explorer/auto_generated
  /var/www/discourse/plugins/discourse-data-explorer/assets
  /var/www/discourse/plugins/discourse-data-explorer/admin/assets
  /var/www/discourse/plugins/discourse-data-explorer/test/javascripts
  /var/www/discourse/plugins/discourse-details/auto_generated
  /var/www/discourse/plugins/discourse-details/assets
  /var/www/discourse/plugins/discourse-details/admin/assets
  /var/www/discourse/plugins/discourse-details/test/javascripts
  /var/www/discourse/plugins/discourse-local-dates/auto_generated
  /var/www/discourse/plugins/discourse-local-dates/assets
  /var/www/discourse/plugins/discourse-local-dates/admin/assets
  /var/www/discourse/plugins/discourse-local-dates/test/javascripts
  /var/www/discourse/plugins/discourse-math/auto_generated
  /var/www/discourse/plugins/discourse-math/assets
  /var/www/discourse/plugins/discourse-math/admin/assets
  /var/www/discourse/plugins/discourse-math/test/javascripts
  /var/www/discourse/plugins/discourse-narrative-bot/auto_generated
  /var/www/discourse/plugins/discourse-narrative-bot/assets
  /var/www/discourse/plugins/discourse-narrative-bot/admin/assets
  /var/www/discourse/plugins/discourse-narrative-bot/test/javascripts
  /var/www/discourse/plugins/discourse-nationalflags/auto_generated
  /var/www/discourse/plugins/discourse-nationalflags/assets
  /var/www/discourse/plugins/discourse-nationalflags/admin/assets
  /var/www/discourse/plugins/discourse-nationalflags/test/javascripts
  /var/www/discourse/plugins/discourse-plugin-composer-help-button/auto_generated
  /var/www/discourse/plugins/discourse-plugin-composer-help-button/assets
  /var/www/discourse/plugins/discourse-plugin-composer-help-button/admin/assets
  /var/www/discourse/plugins/discourse-plugin-composer-help-button/test/javascripts
  /var/www/discourse/plugins/discourse-presence/auto_generated
  /var/www/discourse/plugins/discourse-presence/assets
  /var/www/discourse/plugins/discourse-presence/admin/assets
  /var/www/discourse/plugins/discourse-presence/test/javascripts
  /var/www/discourse/plugins/discourse-sitemap/auto_generated
  /var/www/discourse/plugins/discourse-sitemap/assets
  /var/www/discourse/plugins/discourse-sitemap/admin/assets
  /var/www/discourse/plugins/discourse-sitemap/test/javascripts
  /var/www/discourse/plugins/discourse-solved/auto_generated
  /var/www/discourse/plugins/discourse-solved/assets
  /var/www/discourse/plugins/discourse-solved/admin/assets
  /var/www/discourse/plugins/discourse-solved/test/javascripts
  /var/www/discourse/plugins/discourse-tooltips/auto_generated
  /var/www/discourse/plugins/discourse-tooltips/assets
  /var/www/discourse/plugins/discourse-tooltips/admin/assets
  /var/www/discourse/plugins/discourse-tooltips/test/javascripts
  /var/www/discourse/plugins/discourse-voting/auto_generated
  /var/www/discourse/plugins/discourse-voting/assets
  /var/www/discourse/plugins/discourse-voting/admin/assets
  /var/www/discourse/plugins/discourse-voting/test/javascripts
  /var/www/discourse/plugins/docker_manager/auto_generated
  /var/www/discourse/plugins/docker_manager/assets
  /var/www/discourse/plugins/docker_manager/admin/assets
  /var/www/discourse/plugins/docker_manager/test/javascripts
  /var/www/discourse/plugins/lazy-yt/auto_generated
  /var/www/discourse/plugins/lazy-yt/assets
  /var/www/discourse/plugins/lazy-yt/admin/assets
  /var/www/discourse/plugins/lazy-yt/test/javascripts
  /var/www/discourse/plugins/poll/auto_generated
  /var/www/discourse/plugins/poll/assets
  /var/www/discourse/plugins/poll/admin/assets
  /var/www/discourse/plugins/poll/test/javascripts
  /var/www/discourse/plugins/retort/auto_generated
  /var/www/discourse/plugins/retort/assets
  /var/www/discourse/plugins/retort/admin/assets
  /var/www/discourse/plugins/retort/test/javascripts
  /var/www/discourse/plugins/styleguide/auto_generated
  /var/www/discourse/plugins/styleguide/assets
  /var/www/discourse/plugins/styleguide/admin/assets
  /var/www/discourse/plugins/styleguide/test/javascripts
  /var/www/discourse/tmp/ember-rails
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/discourse-ember-source-3.12.2.3/dist
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/ember-data-source-3.0.2/dist/globals
/var/www/discourse/plugins/discourse-custom-wizard/assets/javascripts/wizard-custom.js:6
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/resolve.rb:65:in `resolve!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/directive_processor.rb:399:in `resolve'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/directive_processor.rb:207:in `process_require_directive'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/directive_processor.rb:180:in `block in process_directives'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/directive_processor.rb:178:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/directive_processor.rb:178:in `process_directives'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/directive_processor.rb:83:in `_call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/directive_processor.rb:68:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:75:in `call_processor'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `reverse_each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `call_processors'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:134:in `load_from_unloaded'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:60:in `block in load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:44:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:20:in `block in initialize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:47:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/bundle.rb:23:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/utils.rb:200:in `dfs'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/bundle.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:75:in `call_processor'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `reverse_each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `call_processors'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:134:in `load_from_unloaded'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:60:in `block in load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:44:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:20:in `block in initialize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:47:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/base.rb:66:in `find_asset'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/base.rb:73:in `find_all_linked_assets'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:134:in `block in find'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:133:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:133:in `find'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:186:in `compile'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:67:in `block (3 levels) in define'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/rake/sprocketstask.rb:147:in `with_logger'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:66:in `block (2 levels) in define'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
I, [2021-12-22T02:29:01.062324 #1]  INFO -- : Updating 'discourse-groups-css-classes-in-body' for 'default'...
Updating 'discourse-units' for 'default'...
Updating 'discourse-image-annotator' for 'default'...



FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 4963 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
758338f1df1e2e950fd7228c757bfb7dfbcf1e7742d6cb175e3aec7c9f52addb

Thanks for the report. This is now addressed.

https://github.com/paviliondev/discourse-custom-wizard/commit/41b5ba4f3149545df7065eeeed5d90df23d0e440

Just a note that we’ve been working on an automated plugin compatibility notification system for a while now and we’ll be releasing it along with some big custom-wizard updates in the new year.

The system picked up this compatibility issue an hour after the relevant commit went into discourse/discourse, and pushed a warning to the plugin clients, which you would have seen in your admin dashboard before you upgraded (screenshot is from our test instance; this functionality is not yet released).

Thank you for that additional fix, which (no surprise) I confirm fixed my build, and wow that automated warning is a great idea! :tada: