Skip to content

fix(workflows): esbuild binary path in packaged app (ENOENT) - #69

Merged
obogoni merged 1 commit into
mainfrom
fix/esbuild-asar-binary-path
Jul 6, 2026
Merged

fix(workflows): esbuild binary path in packaged app (ENOENT)#69
obogoni merged 1 commit into
mainfrom
fix/esbuild-asar-binary-path

Conversation

@obogoni

@obogoni obogoni commented Jul 6, 2026

Copy link
Copy Markdown
Owner

Problema

No app empacotado (playground-nightly), toda definition de workflow aparece como broken:

The service was stopped: spawn ...\app.asar\node_modules\@esbuild\win32-x64\esbuild.exe ENOENT

O workflow-loader bundleia workflow.ts com esbuild.build(), que dá spawn no binário nativo do esbuild. O esbuild resolve esse caminho relativo ao próprio pacote, que o electron-builder empacota dentro do app.asar — e um .exe dentro do asar não é arquivo real no filesystem → ENOENT. Só reproduz empacotado; em npm run dev o binário está solto em node_modules.

Correção

O electron-builder já faz smart-unpack de @esbuild/* para app.asar.unpacked. Basta apontar a env oficial ESBUILD_BINARY_PATH para essa cópia real antes do primeiro build(), guardado por app.isPackaged (no-op em dev). O cálculo do caminho fica numa função pura esbuildBinaryPath(), testável sem Electron.

Verificação

  • npm test → 488 testes passando (2 novos cobrindo esbuildBinaryPath win32/unix).
  • npm run typecheck e npm run lint limpos.
  • npm run build:win → o caminho calculado bate com o binário real em dist/win-unpacked/resources/app.asar.unpacked/node_modules/@esbuild/win32-x64/esbuild.exe.

⚠️ Validação final de runtime exige reinstalar o nightly a partir do instalador gerado e confirmar o revisar-pr saindo de "broken" — não reproduzível em dev.

Closes #68

🤖 Generated with Claude Code

Packaged workflow definitions failed to load with "spawn
...app.asar/.../esbuild.exe ENOENT": the workflow-loader bundles
workflow.ts with esbuild, whose native binary esbuild resolves to a
path inside app.asar. A .exe there is not a real file, so spawn gets
ENOENT — every definition shows as "broken".

Set ESBUILD_BINARY_PATH to the electron-builder smart-unpacked copy
under app.asar.unpacked before the first build(), guarded by
app.isPackaged (no-op in dev). Path computed by a pure
esbuildBinaryPath() helper so it is unit-tested without Electron.

Verified via build:win: the computed path matches the real unpacked
esbuild.exe in dist/win-unpacked/resources/app.asar.unpacked.

Closes #68

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@obogoni
obogoni merged commit 7b498a9 into main Jul 6, 2026
2 checks passed
@obogoni
obogoni deleted the fix/esbuild-asar-binary-path branch July 6, 2026 23:52
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.

Workflows: esbuild ENOENT no app empacotado (revisar-pr fica "broken")

1 participant