diff --git a/packages/cli/snap-tests-global/create-from-monorepo-subdir/snap.txt b/packages/cli/snap-tests-global/create-from-monorepo-subdir/snap.txt index 187bec6010..435b338fe9 100644 --- a/packages/cli/snap-tests-global/create-from-monorepo-subdir/snap.txt +++ b/packages/cli/snap-tests-global/create-from-monorepo-subdir/snap.txt @@ -2,6 +2,22 @@ > test -f tools/vite-plus-generator/package.json && echo 'Created at tools/vite-plus-generator' || echo 'NOT at tools/' Created at tools/vite-plus-generator +> cd apps/website && vp create --no-interactive --git vite:generator 2>&1 || true # --git is unavailable for monorepo package create +The --git/--no-git options are not available when adding a package to an existing monorepo + + +> cd apps/website && vp create --no-interactive --no-git vite:generator 2>&1 || true # --no-git is unavailable for monorepo package create +The --git/--no-git options are not available when adding a package to an existing monorepo + + +> cd apps/website && vp create --no-interactive --git vite:application 2>&1 || true # --git is unavailable for monorepo package create +The --git/--no-git options are not available when adding a package to an existing monorepo + + +> cd apps/website && vp create --no-interactive --no-git vite:library 2>&1 || true # --no-git is unavailable for monorepo package create +The --git/--no-git options are not available when adding a package to an existing monorepo + + > test ! -f apps/website/tools/vite-plus-generator/package.json && echo 'Not in apps/website/' || echo 'BUG: in apps/website/' Not in apps/website/ diff --git a/packages/cli/snap-tests-global/create-from-monorepo-subdir/steps.json b/packages/cli/snap-tests-global/create-from-monorepo-subdir/steps.json index 72df0f7725..3b6cb0625d 100644 --- a/packages/cli/snap-tests-global/create-from-monorepo-subdir/steps.json +++ b/packages/cli/snap-tests-global/create-from-monorepo-subdir/steps.json @@ -6,6 +6,10 @@ "ignoreOutput": true }, "test -f tools/vite-plus-generator/package.json && echo 'Created at tools/vite-plus-generator' || echo 'NOT at tools/'", + "cd apps/website && vp create --no-interactive --git vite:generator 2>&1 || true # --git is unavailable for monorepo package create", + "cd apps/website && vp create --no-interactive --no-git vite:generator 2>&1 || true # --no-git is unavailable for monorepo package create", + "cd apps/website && vp create --no-interactive --git vite:application 2>&1 || true # --git is unavailable for monorepo package create", + "cd apps/website && vp create --no-interactive --no-git vite:library 2>&1 || true # --no-git is unavailable for monorepo package create", "test ! -f apps/website/tools/vite-plus-generator/package.json && echo 'Not in apps/website/' || echo 'BUG: in apps/website/'", { diff --git a/packages/cli/snap-tests-global/new-vite-monorepo/snap.txt b/packages/cli/snap-tests-global/new-vite-monorepo/snap.txt index 5ff645a6e2..e192b25f9c 100644 --- a/packages/cli/snap-tests-global/new-vite-monorepo/snap.txt +++ b/packages/cli/snap-tests-global/new-vite-monorepo/snap.txt @@ -87,6 +87,10 @@ No .yarnrc.yml > test -d vite-plus-monorepo/.git && echo 'Git initialized' # check git init Git initialized +> vp create vite:monorepo --interactive --verbose --no-git --no-hooks --no-agent --no-editor --package-manager pnpm --directory verbose-no-git-monorepo # explicit --no-git should skip verbose monorepo git prompt +> test ! -d verbose-no-git-monorepo/.git && echo 'No git initialized for explicit --no-git' || (echo 'ERROR: git initialized' && exit 1) # check verbose --no-git is respected +No git initialized for explicit --no-git + > test -f vite-plus-monorepo/.vscode/settings.json && echo '.vscode/settings.json exists' # check VS Code settings created .vscode/settings.json exists diff --git a/packages/cli/snap-tests-global/new-vite-monorepo/steps.json b/packages/cli/snap-tests-global/new-vite-monorepo/steps.json index d21c95879b..94070e802d 100644 --- a/packages/cli/snap-tests-global/new-vite-monorepo/steps.json +++ b/packages/cli/snap-tests-global/new-vite-monorepo/steps.json @@ -12,6 +12,11 @@ "test -f vite-plus-monorepo/.gitignore && echo '.gitignore exists' || echo 'ERROR: .gitignore missing' # verify gitignore renamed from _gitignore", "test ! -f vite-plus-monorepo/.yarnrc.yml && echo 'No .yarnrc.yml' || echo 'ERROR: .yarnrc.yml exists' # verify no yarn config for pnpm", "test -d vite-plus-monorepo/.git && echo 'Git initialized' # check git init", + { + "command": "vp create vite:monorepo --interactive --verbose --no-git --no-hooks --no-agent --no-editor --package-manager pnpm --directory verbose-no-git-monorepo # explicit --no-git should skip verbose monorepo git prompt", + "ignoreOutput": true + }, + "test ! -d verbose-no-git-monorepo/.git && echo 'No git initialized for explicit --no-git' || (echo 'ERROR: git initialized' && exit 1) # check verbose --no-git is respected", "test -f vite-plus-monorepo/.vscode/settings.json && echo '.vscode/settings.json exists' # check VS Code settings created", "test -f vite-plus-monorepo/.vscode/extensions.json && echo '.vscode/extensions.json exists' # check VS Code extensions created", "node -e \"const { spawnSync } = require('node:child_process'); const file = '.vscode/settings.json'; const result = spawnSync('git', ['-C', 'vite-plus-monorepo', 'check-ignore', '--no-index', file], { stdio: 'ignore' }); const status = result.status; if (status === 1) { console.log(file + ' trackable'); } else { console.log(status === 0 ? 'ERROR: ' + file + ' ignored' : 'ERROR: git check-ignore failed with status ' + status); process.exit(status || 1); }\" # check VS Code settings are trackable", diff --git a/packages/cli/src/create/bin.ts b/packages/cli/src/create/bin.ts index b0c328e8c4..2d3645f9d7 100644 --- a/packages/cli/src/create/bin.ts +++ b/packages/cli/src/create/bin.ts @@ -227,6 +227,7 @@ export interface Options { verbose: boolean; agent?: string | string[] | false; editor?: string | false; + git?: boolean; hooks?: boolean; packageManager?: string; } @@ -586,6 +587,12 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h ); cancelAndExit('Cannot create a generator outside a monorepo', 1); } + if (isMonorepo && options.git !== undefined) { + cancelAndExit( + 'The --git/--no-git options are not available when adding a package to an existing monorepo', + 1, + ); + } if (isInSubdirectory && !compactOutput) { prompts.log.info(`Detected monorepo root at ${accent(workspaceInfoOptional.rootDir)}`); @@ -809,7 +816,9 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h })); } - const shouldSetupGit = await promptGitInit(options); + // vite:generator adds a package to an existing monorepo, not a new repository. + const shouldSetupGit = + selectedTemplateName === BuiltinTemplate.generator ? false : await promptGitInit(options); if (!isMonorepo) { shouldSetupHooks = await promptGitHooks(options); } @@ -891,7 +900,7 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h if (templateInfo.command === BuiltinTemplate.monorepo || isBundledMonorepo) { // Ask up-front so the prompt isn't buried under scaffold output. let shouldInitGit = shouldSetupGit; - if (options.interactive && !compactOutput) { + if (options.interactive && !compactOutput && options.git === undefined) { pauseCreateProgress(); const selected = await prompts.confirm({ message: 'Initialize git repository:',