Falha na reconstrução - possivelmente relacionada ao rolldown?

Olá a todos, acabei de tentar uma reconstrução usando discourse/base:2.0.20260617-0053. No entanto, estou recebendo alguns erros relacionados a pacotes ausentes

Got some warnings
╭ Warning ─────────────────────────────────────────────────────────────────────╮
│                                                                              │
│   Ignored build scripts: core-js@2.6.12, core-js@3.49.0, lefthook@2.1.9,     │
│   rete@2.0.6.                                                                │
│   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
│   to run scripts.                                                            │
│                                                                              │
╰──────────────────────────────────────────────────────────────────────────────╯
Done in 10.4s using pnpm v10.28.0
Lockfile is up to date, resolution step is skipped
Already up to date

╭ Warning ─────────────────────────────────────────────────────────────────────╮
│                                                                              │
│   Ignored build scripts: core-js@2.6.12, core-js@3.49.0, lefthook@2.1.9,     │
│   rete@2.0.6.                                                                │
│   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
│   to run scripts.                                                            │
│                                                                              │
╰──────────────────────────────────────────────────────────────────────────────╯
.....
Successfully installed aws-sdk-translate-1.35.0
1 gem installed
rake aborted!
Discourse::Utils::CommandError: pnpm -C=frontend/asset-processor node build.mjs (Discourse::Utils::CommandError)
file:///var/www/discourse/node_modules/.pnpm/rolldown@1.1.2/node_modules/rolldown/dist/shared/error-T-E9reEy.mjs:48
        const wrapper = new Error(summary);
                        ^

Error: Build failed with 9 errors:

[RESOLVE_ERROR] Could not resolve './shims' in transpiler.js
   ╭─[ transpiler.js:1:8 ]
   │
 1 │ import "./shims";
   │        ────┬────
   │            ╰────── Tsconfig not found
───╯

[RESOLVE_ERROR] Could not resolve './postcss' in transpiler.js
   ╭─[ transpiler.js:2:8 ]
   │
 2 │ import "./postcss";
   │        ─────┬─────
   │             ╰─────── Tsconfig not found
───╯

[RESOLVE_ERROR] Could not resolve './asset-processor-rollup' in transpiler.js
   ╭─[ transpiler.js:3:8 ]
   │
 3 │ import "./asset-processor-rollup";
   │        ─────────────┬────────────
   │                     ╰────────────── Tsconfig not found
───╯

[RESOLVE_ERROR] Could not resolve '@babel/standalone' in transpiler.js
   ╭─[ transpiler.js:4:45 ]
   │
 4 │ import { transform as babelTransform } from "@babel/standalone";
   │                                             ─────────┬─────────
   │                                                      ╰─────────── Tsconfig not found
───╯

[RESOLVE_ERROR] Could not resolve 'decorator-transforms' in transpiler.js
   ╭─[ transpiler.js:5:33 ]
   │
 5 │ import DecoratorTransforms from "decorator-transforms";
   │                                 ───────────┬──────────
   │                                            ╰──────────── Tsconfig not found
───╯
/var/www/discourse/lib/discourse.rb:180:in 'Discourse::Utils::CommandRunner#execute_command'
/var/www/discourse/lib/discourse.rb:146:in 'Discourse::Utils::CommandRunner#exec'
/var/www/discourse/lib/discourse.rb:33:in 'Discourse::Utils.execute_command'
/var/www/discourse/lib/asset_processor.rb:58:in 'AssetProcessor.build_asset_processor'
/var/www/discourse/lib/asset_processor.rb:107:in 'block in AssetProcessor.load_or_build_processor_source'
/var/www/discourse/lib/asset_processor.rb:86:in 'block in AssetProcessor.with_file_lock'
/var/www/discourse/lib/asset_processor.rb:84:in 'IO.open'
/var/www/discourse/lib/asset_processor.rb:84:in 'AssetProcessor.with_file_lock'
/var/www/discourse/lib/asset_processor.rb:103:in 'AssetProcessor.load_or_build_processor_source'
/var/www/discourse/lib/tasks/assets.rake:161:in 'block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/exe/rake:27:in '<top (required)>'
/usr/local/bin/bundle:25:in 'Kernel#load'
/usr/local/bin/bundle:25:in '<main>'
Tasks: TOP => db:migrate => assets:precompile:asset_processor
(See full trace by running task with --trace)
19:signal-handler (1782860705) Received SIGTERM scheduling shutdown...
I, [2026-06-30T23:05:05.686770 #1]  INFO -- : Terminating async processes
I, [2026-06-30T23:05:05.686855 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 19
19:M 30 Jun 2026 23:05:05.697 * User requested shutdown...
19:M 30 Jun 2026 23:05:05.697 * Saving the final RDB snapshot before exiting.
19:M 30 Jun 2026 23:05:05.743 * DB saved on disk
19:M 30 Jun 2026 23:05:05.743 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 3131 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.4.0/gems/pups-1.4.0/lib/pups/exec_command.rb:138:in 'Pups::ExecCommand#spawn'
exec failed with the params {"cd" => "$home", "tag" => "migrate", "hook" => "db_migrate", "cmd" => ["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** 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.

Tentei remover os módulos do Node e fazer um pnpm install manual, mas sem sucesso. Também tentei executar pnpm approve-builds no container, mas ele indicou que não havia pacotes para aprovar?

Alguém mais encontrou esse problema? Concluí uma reconstrução usando esta imagem para outro fórum e foi bem-sucedida. Tentei a reconstrução usando ./launcher rebuild app.

Alguma novidade sobre isso ou passos para permitir que a reconstrução prossiga? Obrigado!

Você tem algum plugin instalado?

Não, apenas os discursos oficiais de sempre

Oi @tanya_byrne, você está executando a versão “latest” do Discourse, em uma instalação padrão?

Você está ciente de alguma diferença significativa entre as duas máquinas/fóruns?

Parece que esse erro pode ser causado pela execução de rm -rf em um plugin principal. Isso é uma operação muito arriscada – todos os testes do Discourse são realizados com todos os plugins principais presentes. Portanto, recomendo remover essa linha do seu app.yml.

Dito isso, podemos melhorar a construção desse asset-processor para que ele não falhe de forma tão catastrófica:

David, então, como fazemos para sobrescrever modelos em plugins principais sem primeiro excluir um plugin principal e depois substituí-lo por uma versão bifurcada? Isso não é seguro? Os ativos podem permanecer refletindo o original?

Eu já segui essa abordagem com sucesso antes, quando não havia outra opção.

A substituição de modelos não é uma funcionalidade “suportada”.

Claro, você pode fazer isso por sua conta e risco, e “provavelmente” funcionará sem problemas. Mas não é algo que possamos garantir ou testar.

Agradeço que você tenha tornado isso menos problemático aqui!

Só gostaria que pudéssemos manter uma situação em que os plugins permanecessem completamente modulares, sempre que isso fosse possível.

De fato, esse era o problema. Você tem alguma recomendação para ocultar/remover esses plugins? Parece-me que remover plugins que não usamos não deveria quebrar a compilação, já que os plugins são supostamente modulares.

A maneira ‘suportada’ é desativar os plugins pela interface de administração.

Você está livre para excluí-los no sistema de arquivos, e isso ‘provavelmente’ funcionará (como você diz, idealmente os plugins devem ser modulares). Mas não é algo que testamos rigorosamente no momento, então não posso garantir 100% que funcione.

Obrigado, David, agradeço a orientação.

Concordo totalmente com você.

Faz todo o sentido para mim que você deva conseguir ocultar 100% os plugins da interface do Admin (por padrão) para reduzir a bagunça (não simplesmente desativá-los).

Os plugins devem definitivamente ser modulares.

Embora eu respeite que às vezes existam considerações técnicas, isso, na minha opinião, deve ser o objetivo final.

Mas vamos também celebrar o fato de que esse agrupamento facilitou builds muito, muito mais rápidos :rocket: