Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simultaneous builds are unreliable #1089

Open
Clemens-E opened this issue Jan 24, 2025 · 1 comment
Open

Simultaneous builds are unreliable #1089

Clemens-E opened this issue Jan 24, 2025 · 1 comment

Comments

@Clemens-E
Copy link

Hi, foremost, thank you for this tool, it helped me quite a lot.

I use it in a CI pipeline, and it builds two versions of the same script (with some modules being replaced).
When I tried to optimize the duration it takes, I changed to building the two versions simultaneously, that actually does save time. But once every 15 runs I get this error:

Error: ENOENT: no such file or directory, rename './node_modules/.cache/.rts2_cache_umd/rpt2_4ac624c30e398d7abd448e108f7ef395666c7280/code/cache_' -> './node_modules/.cache/.rts2_cache_umd/rpt2_4ac624c30e398d7abd448e108f7ef395666c7280/code/cache'
Error: ENOENT: no such file or directory, rename './node_modules/.cache/.rts2_cache_umd/rpt2_4ac624c30e398d7abd448e108f7ef395666c7280/code/cache_' -> './node_modules/.cache/.rts2_cache_umd/rpt2_4ac624c30e398d7abd448e108f7ef395666c7280/code/cache'
    at Object.renameSync (node:fs:1026:3)
    at RollingCache.roll (/---/scripts/node_modules/rollup-plugin-typescript2/dist/rollup-plugin-typescript2.cjs.js:29229:26)

I tracked it down to this line
which explains what happens. When more than one microbundle script is running, it instructs typescript to use the same cache directory and most likely starts to mess up or rename files that the other version already deleted.

My probosals:

  • implement a flag to disable this type of caching, or use a random string for the cacheRoot
  • generate a simple hash of the arguments provided and use that in combination of cacheRoot, this will prevent two scripts doing different jobs of interfering with each other

Please let me know if you would accept a PR for either of those implementations

@ForsakenHarmony
Copy link
Collaborator

The cache internally already does hashing and I don't think it's desirable to get rid of a shared cache to support parallel builds?

But I suppose we could probably accept a PR that disables caching

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

No branches or pull requests

2 participants