aboutsummaryrefslogtreecommitdiff
path: root/packages/create-astro/src/actions/git.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/create-astro/src/actions/git.ts')
-rw-r--r--packages/create-astro/src/actions/git.ts64
1 files changed, 64 insertions, 0 deletions
diff --git a/packages/create-astro/src/actions/git.ts b/packages/create-astro/src/actions/git.ts
new file mode 100644
index 000000000..ebedb8701
--- /dev/null
+++ b/packages/create-astro/src/actions/git.ts
@@ -0,0 +1,64 @@
+import fs from 'node:fs';
+import path from 'node:path';
+import type { Context } from './context.js';
+
+import { color } from '@astrojs/cli-kit';
+import { error, info, title } from '../messages.js';
+import { shell } from '../shell.js';
+
+export async function git(
+ ctx: Pick<Context, 'cwd' | 'git' | 'yes' | 'prompt' | 'dryRun' | 'tasks'>,
+) {
+ if (fs.existsSync(path.join(ctx.cwd, '.git'))) {
+ await info('Nice!', `Git has already been initialized`);
+ return;
+ }
+ let _git = ctx.git ?? ctx.yes;
+ if (_git === undefined) {
+ ({ git: _git } = await ctx.prompt({
+ name: 'git',
+ type: 'confirm',
+ label: title('git'),
+ message: `Initialize a new git repository?`,
+ hint: 'optional',
+ initial: true,
+ }));
+ }
+
+ if (ctx.dryRun) {
+ await info('--dry-run', `Skipping Git initialization`);
+ } else if (_git) {
+ ctx.tasks.push({
+ pending: 'Git',
+ start: 'Git initializing...',
+ end: 'Git initialized',
+ while: () =>
+ init({ cwd: ctx.cwd }).catch((e) => {
+ error('error', e);
+ process.exit(1);
+ }),
+ });
+ } else {
+ await info(
+ ctx.yes === false ? 'git [skip]' : 'Sounds good!',
+ `You can always run ${color.reset('git init')}${color.dim(' manually.')}`,
+ );
+ }
+}
+
+async function init({ cwd }: { cwd: string }) {
+ try {
+ await shell('git', ['init'], { cwd, stdio: 'ignore' });
+ await shell('git', ['add', '-A'], { cwd, stdio: 'ignore' });
+ await shell(
+ 'git',
+ [
+ 'commit',
+ '-m',
+ '"Initial commit from Astro"',
+ '--author="houston[bot] <astrobot-houston@users.noreply.github.com>"',
+ ],
+ { cwd, stdio: 'ignore' },
+ );
+ } catch {}
+}