fix(bundling): ensure vitest timestamp files are ignored (#29418)

## Current Behavior
Vitest TS config files produce timestamp temp files during project graph
creation which are cleaned up.
However, the creation and deletion of these files triggers the daemon to
recalculate graph.
It ends up in a loop.
The vite timestamp files were already added to the gitignore to prevent
this.

## Expected Behavior
Add vitest timestamp files to gitignore
This commit is contained in:
Colum Ferry 2024-12-19 16:04:04 +00:00 committed by GitHub
parent bb806b3ef3
commit ba1641d7fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 116 additions and 10 deletions

View File

@ -7,7 +7,8 @@ exports[`app generated files content - as-provided - my-app general application
.nuxt
.nitro
.cache
vite.config.*.timestamp*"
vite.config.*.timestamp*
vitest.config.*.timestamp*"
`;
exports[`app generated files content - as-provided - my-app general application should add the nuxt and vitest plugins 1`] = `
@ -366,7 +367,8 @@ exports[`app generated files content - as-provided - myApp general application s
.nuxt
.nitro
.cache
vite.config.*.timestamp*"
vite.config.*.timestamp*
vitest.config.*.timestamp*"
`;
exports[`app generated files content - as-provided - myApp general application should add the nuxt and vitest plugins 1`] = `

View File

@ -29,6 +29,11 @@
"version": "20.0.6-beta.0",
"description": "Add gitignore entry for temporary vite config files and remove previous incorrect glob.",
"implementation": "./src/migrations/update-20-0-4/add-vite-temp-files-to-git-ignore"
},
"update-20-3-0": {
"version": "20.3.0-beta.2",
"description": "Add gitignore entry for temporary vitest config files.",
"implementation": "./src/migrations/update-20-3-0/add-vitest-temp-files-to-git-ignore"
}
},
"packageJsonUpdates": {

View File

@ -137,8 +137,9 @@ describe('@nx/vite:init', () => {
await initGenerator(tree, {});
// ASSERT
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(
`"vite.config.*.timestamp*"`
);
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
"vite.config.*.timestamp*
vitest.config.*.timestamp*"
`);
});
});

View File

@ -13,7 +13,8 @@ describe('addViteTempFilesToGitIgnore', () => {
// ASSERT
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
".idea
vite.config.*.timestamp*"
vite.config.*.timestamp*
vitest.config.*.timestamp*"
`);
});
@ -33,7 +34,8 @@ describe('addViteTempFilesToGitIgnore', () => {
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
".idea
vite.config.*.timestamp*"
vite.config.*.timestamp*
vitest.config.*.timestamp*"
`);
});
@ -46,8 +48,9 @@ describe('addViteTempFilesToGitIgnore', () => {
addViteTempFilesToGitIgnore(tree);
// ASSERT
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(
`"vite.config.*.timestamp*"`
);
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
"vite.config.*.timestamp*
vitest.config.*.timestamp*"
`);
});
});

View File

@ -0,0 +1,56 @@
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
import addViteTempFilesToGitIgnore from './add-vitest-temp-files-to-git-ignore';
describe('addViteTempFilesToGitIgnore', () => {
it('should update an existing .gitignore file to add the glob correctly', () => {
// ARRANGE
const tree = createTreeWithEmptyWorkspace();
tree.write('.gitignore', '.idea');
// ACT
addViteTempFilesToGitIgnore(tree);
// ASSERT
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
".idea
vite.config.*.timestamp*
vitest.config.*.timestamp*"
`);
});
it('should update an existing .gitignore file and remove incorrect glob and add the glob correctly', () => {
// ARRANGE
const tree = createTreeWithEmptyWorkspace();
tree.write(
'.gitignore',
`.idea
**/vitest.config.{js,ts,mjs,mts,cjs,cts}.timestamp*`
);
// ACT
addViteTempFilesToGitIgnore(tree);
// ASSERT
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
".idea
vite.config.*.timestamp*
vitest.config.*.timestamp*"
`);
});
it('should write a new .gitignore file to add the glob correctly', () => {
// ARRANGE
const tree = createTreeWithEmptyWorkspace();
tree.delete('.gitignore');
// ACT
addViteTempFilesToGitIgnore(tree);
// ASSERT
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
"vite.config.*.timestamp*
vitest.config.*.timestamp*"
`);
});
});

View File

@ -0,0 +1,26 @@
import { Tree } from '@nx/devkit';
import { addViteTempFilesToGitIgnore as _addViteTempFilesToGitIgnore } from '../../utils/add-vite-temp-files-to-gitignore';
export default function addViteTempFilesToGitIgnore(tree: Tree) {
// need to check if .gitignore exists before adding to it
// then need to check if it contains the following pattern
// **/vite.config.{js,ts,mjs,mts,cjs,cts}.timestamp*
// if it does, remove just this pattern
if (tree.exists('.gitignore')) {
const gitIgnoreContents = tree.read('.gitignore', 'utf-8');
if (
gitIgnoreContents.includes(
'**/vitest.config.{js,ts,mjs,mts,cjs,cts}.timestamp*'
)
) {
tree.write(
'.gitignore',
gitIgnoreContents.replace(
'**/vitest.config.{js,ts,mjs,mts,cjs,cts}.timestamp*',
''
)
);
}
}
_addViteTempFilesToGitIgnore(tree);
}

View File

@ -13,4 +13,17 @@ export function addViteTempFilesToGitIgnore(tree: Tree) {
} else {
tree.write('.gitignore', newGitIgnoreContents);
}
newGitIgnoreContents = `vitest.config.*.timestamp*`;
if (tree.exists('.gitignore')) {
const gitIgnoreContents = tree.read('.gitignore', 'utf-8');
if (!gitIgnoreContents.includes(newGitIgnoreContents)) {
newGitIgnoreContents = stripIndents`${gitIgnoreContents}
${newGitIgnoreContents}`;
tree.write('.gitignore', newGitIgnoreContents);
}
} else {
tree.write('.gitignore', newGitIgnoreContents);
}
}