bug: additionalFiles copies ../ matches outside the build on Windows

Offen
#5,074 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

  • #5075 von @SimoMay — ohne Merge geschlossen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
node.js, typescript
Bereich
build-system

Rechercherichtung

Start with packages/build/src/internal/copyFiles.ts and inspect findFilesByMatchers, focusing on how relative() paths are split and joined. Use the included path.win32 reproduction to confirm the Windows behavior, then verify the destination resolves to <build>/shared/a.md on both Windows and POSIX paths. A linked pull request, #5075, already addresses this issue.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Provide environment information

  • OS: Windows (fails); macOS and Linux are not affected
  • trigger.dev CLI and @trigger.dev/build: 4.5.16
  • The same code is in 4.8.1 and on main

Describe the bug

additionalFiles is meant to strip leading .. segments so that a pattern like ../shared/** copies files inside the build output. On Windows the segments are not stripped, and the files are copied outside the build directory. The deploy goes ahead without them.

The cause is findFilesByMatchers in packages/build/src/internal/copyFiles.ts:

const pathInsideDestinationDir = relative(cwd, file)
  .split(posix.sep)
  .filter((p) => p !== "..")
  .join(posix.sep);

On Windows, relative() returns a backslash path (..\shared\a.md). Splitting on / gives one segment, so no .. is removed, and join(destinationDir, "..\shared\a.md") resolves outside the build directory, one level up for each ...

Expected: the files land at <build>/shared/a.md on every OS, as they do on macOS and Linux.

Reproduction repo

No repo needed. The Node script below runs the same path logic with path.win32, on any OS.

To reproduce

const { win32, posix } = require("node:path");
const cwd = "C:\\repo\\app";
const file = "C:\\repo\\shared\\a.md";
const dest = "C:\\repo\\app\\.trigger\\tmp\\build-x";

const inside = win32.relative(cwd, file).split(posix.sep).filter((p) => p !== "..").join(posix.sep);
console.log(win32.join(dest, inside));
// C:\repo\app\.trigger\tmp\shared\a.md   <- outside build-x

End to end, on Windows:

  1. In a project one level below the repo root, add additionalFiles({ files: ["../shared/**"] }) to trigger.config.ts.
  2. Run npx trigger.dev deploy.
  3. The deployed image has no shared/ folder. The same deploy from macOS includes it.

A task that reads one of those files at runtime then fails with a missing file.

Suggested fix

Split on the platform separator, and keep joining with / (join accepts it on Windows):

const pathInsideDestinationDir = relative(cwd, file)
  .split(sep)
  .filter((p) => p !== "..")
  .join(posix.sep);

With path.win32 and path.posix, both resolve to <build>/shared/a.md. A PR with this change follows.

Vorherrschende Sprache
TypeScript
Sterne
16.5k
Forks
1.5k
Ø Merge
1 T. 15 Std.
Gemergte PRs (30 T.)
17

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus triggerdotdev/trigger.dev

Alle Issues in triggerdotdev/trigger.dev

Ähnliche Issues

Weitere Issues zu TypeScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.