Skip to content

Commit

Permalink
fix(bundling): ensure vitest timestamp files are ignored (#29418)
Browse files Browse the repository at this point in the history
## 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
  • Loading branch information
Coly010 authored Dec 19, 2024
1 parent bb806b3 commit ba1641d
Show file tree
Hide file tree
Showing 7 changed files with 116 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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`] = `
Expand Down Expand Up @@ -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`] = `
Expand Down
5 changes: 5 additions & 0 deletions packages/vite/migrations.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
7 changes: 4 additions & 3 deletions packages/vite/src/generators/init/init.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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*"
`);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ describe('addViteTempFilesToGitIgnore', () => {
// ASSERT
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
".idea
vite.config.*.timestamp*"
vite.config.*.timestamp*
vitest.config.*.timestamp*"
`);
});

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

Expand All @@ -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*"
`);
});
});
Original file line number Diff line number Diff line change
@@ -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*"
`);
});
});
Original file line number Diff line number Diff line change
@@ -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);
}
13 changes: 13 additions & 0 deletions packages/vite/src/utils/add-vite-temp-files-to-gitignore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

0 comments on commit ba1641d

Please sign in to comment.