Visitar URL original
bug: additionalFiles copies ../ matches outside the build on Windows · Issue #5074 · triggerdotdev/trigger.dev · GitHub
Skip to content

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

Open

Description

@SimoMay

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions