Skip to content

Commit

Permalink
DEV: Check Zeitwerk eager loading in GitHub CI (#20699)
Browse files Browse the repository at this point in the history
In production, `eager_load=true`. This sometimes leads to boot errors which are not present in dev/test environments. Running `zeitwerk:check` in CI will help us to pick up on any errors early.

This commit also introduces a `DISCOURSE_ZEITWERK_EAGER_LOAD` environment variable to make it easier to toggle the behaviour when developing locally.
  • Loading branch information
davidtaylorhq committed Mar 16, 2023
1 parent 9d1423b commit 150a660
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
16 changes: 16 additions & 0 deletions .github/workflows/tests.yml
Expand Up @@ -159,6 +159,22 @@ jobs:
path: tmp/turbo_rspec_runtime.log
key: rspec-runtime-backend-core

- name: Run Zeitwerk check
if: matrix.build_type == 'backend'
env:
LOAD_PLUGINS: ${{ (matrix.target == 'plugins') && '1' || '0' }}
run: |
if ! bin/rails zeitwerk:check --trace; then
echo
echo "---------------------------------------------"
echo
echo "::error::'bin/rails zeitwerk:check' failed - the app will fail to boot with 'eager_load=true' (e.g. in production)."
echo "To reproduce locally, run 'bin/rails zeitwerk:check'."
echo "Alternatively, you can run your local server/tests with the 'DISCOURSE_ZEITWERK_EAGER_LOAD=1' environment variable."
echo
exit 1
fi
- name: Core RSpec
if: matrix.build_type == 'backend' && matrix.target == 'core'
run: bin/turbo_rspec --verbose
Expand Down
2 changes: 1 addition & 1 deletion config/environments/development.rb
Expand Up @@ -9,7 +9,7 @@
config.cache_classes = false
config.file_watcher = ActiveSupport::EventedFileUpdateChecker

config.eager_load = false
config.eager_load = ENV["DISCOURSE_ZEITWERK_EAGER_LOAD"] == "1"

# Use the schema_cache.yml file generated during db:migrate (via db:schema:cache:dump)
config.active_record.use_schema_cache_dump = true
Expand Down
2 changes: 1 addition & 1 deletion config/environments/test.rb
Expand Up @@ -44,7 +44,7 @@
config.assets.compile = true
config.assets.digest = false

config.eager_load = false
config.eager_load = ENV["DISCOURSE_ZEITWERK_EAGER_LOAD"] == "1"

if ENV["RAILS_ENABLE_TEST_LOG"]
config.logger = Logger.new(STDOUT)
Expand Down

0 comments on commit 150a660

Please sign in to comment.