From 57907a5d68dd4873f81a5f37da9a71373eee6303 Mon Sep 17 00:00:00 2001 From: ordinarthur <@arthurbarre.js@gmail.com> Date: Thu, 7 May 2026 02:34:55 +0200 Subject: [PATCH] fix(deploy): contourner @poppinss/ts-exec via tsx pour le build API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le CI plantait avec ERR_UNKNOWN_FILE_EXTENSION sur bin/console.ts — le hook @poppinss/ts-exec (basé sur @swc/core) ne s'enregistre pas à temps avant l'import du premier .ts dans certains environnements de build (vu local M-series ET CI Gitea linux/amd64). Solution : appeler ace via tsx (esbuild-based, gère nativement .ts dès le démarrage). Plus fiable cross-platform. Co-Authored-By: Claude Opus 4.7 --- Dockerfile.app | 16 ++++++------ apps/api/package.json | 1 + pnpm-lock.yaml | 59 ++++++++++++++++++++++++++++--------------- 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/Dockerfile.app b/Dockerfile.app index 51a8b0a..d080c26 100644 --- a/Dockerfile.app +++ b/Dockerfile.app @@ -58,14 +58,14 @@ COPY apps/api ./apps/api # - Web : on appelle vite build directement (le `tsc -b` du script de prod # fait remonter des erreurs DOM dans @tanstack/router-core sans cache # .tsbuildinfo ; le typecheck est fait en CI séparément). -# - API : `node ace build` (canonique AdonisJS V7) — produit apps/api/build -# avec compiled JS, package.json runtime, et metaFiles configurés. -# -# Note : ce build peut planter en cross-compile ARM→amd64 (swc/core), donc -# en local sur Mac silicon, builder pour --platform linux/arm64. Le CI -# Gitea tourne nativement sur linux/amd64 et n'a pas le problème. -RUN pnpm --filter @rubis/web exec vite build && \ - pnpm --filter @rubis/api build +# - API : on appelle ace via `tsx` plutôt que `node`. Le hook +# @poppinss/ts-exec utilisé par défaut (qui s'appuie sur @swc/core) ne +# s'enregistre pas à temps avant l'import de bin/console.ts dans +# certains environnements de build, ce qui produit +# ERR_UNKNOWN_FILE_EXTENSION. tsx (esbuild-based) est fiable et gère +# nativement les .ts dès le démarrage. +RUN pnpm --filter @rubis/web exec vite build +RUN cd apps/api && pnpm exec tsx ace.js build # Le SPA static va dans apps/api/build/public/ pour être servi par le static # middleware AdonisJS. AdonisJS ne copie pas public/ par défaut dans build/ diff --git a/apps/api/package.json b/apps/api/package.json index 2496ab9..68efef0 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -54,6 +54,7 @@ "hot-hook": "^1.0.0", "pino-pretty": "^13.1.3", "prettier": "^3.8.2", + "tsx": "^4.21.0", "typescript": "~6.0.2", "youch": "^4.1.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4aa95ad..08c6eae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,6 +144,9 @@ importers: prettier: specifier: ^3.8.2 version: 3.8.3 + tsx: + specifier: ^4.21.0 + version: 4.21.0 typescript: specifier: ~6.0.2 version: 6.0.3 @@ -231,13 +234,13 @@ importers: version: 10.0.1(eslint@10.3.0(jiti@2.7.0)) '@tailwindcss/vite': specifier: ^4.1.0 - version: 4.2.4(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4)) + version: 4.2.4(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4)) '@tanstack/router-cli': specifier: ^1.114.3 version: 1.166.42 '@tanstack/router-plugin': specifier: ^1.114.3 - version: 1.167.34(@tanstack/react-router@1.169.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4)) + version: 1.167.34(@tanstack/react-router@1.169.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.9.1 @@ -255,7 +258,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4)) + version: 6.0.1(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4)) eslint: specifier: ^10.2.1 version: 10.3.0(jiti@2.7.0) @@ -285,10 +288,10 @@ importers: version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) vite: specifier: ^8.0.10 - version: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4) + version: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4) vitest: specifier: ^3.0.5 - version: 3.2.4(@types/node@24.12.2)(jiti@2.7.0)(jsdom@26.1.0)(lightningcss@1.32.0)(msw@2.14.3(@types/node@24.12.2)(typescript@6.0.3))(yaml@2.8.4) + version: 3.2.4(@types/node@24.12.2)(jiti@2.7.0)(jsdom@26.1.0)(lightningcss@1.32.0)(msw@2.14.3(@types/node@24.12.2)(typescript@6.0.3))(tsx@4.21.0)(yaml@2.8.4) packages/shared: dependencies: @@ -5357,6 +5360,11 @@ packages: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -8157,12 +8165,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4 '@tailwindcss/oxide-win32-x64-msvc': 4.2.4 - '@tailwindcss/vite@4.2.4(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4))': + '@tailwindcss/vite@4.2.4(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4))': dependencies: '@tailwindcss/node': 4.2.4 '@tailwindcss/oxide': 4.2.4 tailwindcss: 4.2.4 - vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4) + vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4) '@tanstack/devtools-event-client@0.4.3': {} @@ -8262,7 +8270,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.167.34(@tanstack/react-router@1.169.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4))': + '@tanstack/router-plugin@1.167.34(@tanstack/react-router@1.169.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -8279,7 +8287,7 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.169.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4) + vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4) transitivePeerDependencies: - supports-color @@ -8563,10 +8571,10 @@ snapshots: normalize-url: 8.1.1 validator: 13.15.35 - '@vitejs/plugin-react@6.0.1(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4))': + '@vitejs/plugin-react@6.0.1(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4) + vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4) '@vitest/expect@3.2.4': dependencies: @@ -8576,14 +8584,14 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(msw@2.14.3(@types/node@24.12.2)(typescript@6.0.3))(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.8.4))': + '@vitest/mocker@3.2.4(msw@2.14.3(@types/node@24.12.2)(typescript@6.0.3))(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.4))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.14.3(@types/node@24.12.2)(typescript@6.0.3) - vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.8.4) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.4) '@vitest/pretty-format@3.2.4': dependencies: @@ -10928,6 +10936,13 @@ snapshots: tsscmp@1.0.6: {} + tsx@4.21.0: + dependencies: + esbuild: 0.27.7 + get-tsconfig: 4.14.0 + optionalDependencies: + fsevents: 2.3.3 + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 @@ -11040,13 +11055,13 @@ snapshots: vary@1.1.2: {} - vite-node@3.2.4(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.8.4): + vite-node@3.2.4(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.4): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.8.4) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.4) transitivePeerDependencies: - '@types/node' - jiti @@ -11061,7 +11076,7 @@ snapshots: - tsx - yaml - vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.8.4): + vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.4): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) @@ -11074,9 +11089,10 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 lightningcss: 1.32.0 + tsx: 4.21.0 yaml: 2.8.4 - vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.8.4): + vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.8.4): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -11088,13 +11104,14 @@ snapshots: esbuild: 0.27.7 fsevents: 2.3.3 jiti: 2.7.0 + tsx: 4.21.0 yaml: 2.8.4 - vitest@3.2.4(@types/node@24.12.2)(jiti@2.7.0)(jsdom@26.1.0)(lightningcss@1.32.0)(msw@2.14.3(@types/node@24.12.2)(typescript@6.0.3))(yaml@2.8.4): + vitest@3.2.4(@types/node@24.12.2)(jiti@2.7.0)(jsdom@26.1.0)(lightningcss@1.32.0)(msw@2.14.3(@types/node@24.12.2)(typescript@6.0.3))(tsx@4.21.0)(yaml@2.8.4): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.14.3(@types/node@24.12.2)(typescript@6.0.3))(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.8.4)) + '@vitest/mocker': 3.2.4(msw@2.14.3(@types/node@24.12.2)(typescript@6.0.3))(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.4)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -11112,8 +11129,8 @@ snapshots: tinyglobby: 0.2.16 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.8.4) - vite-node: 3.2.4(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.8.4) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.4) + vite-node: 3.2.4(@types/node@24.12.2)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.4) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.12.2