From 21ee28f8434b1611c111e1d98f21ae1dbe7d8c86 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Sat, 29 Jun 2024 10:10:50 -0300 Subject: [PATCH] Initialize git during creation (#121) --- programs/create/module.ts | 2 + .../create/steps/initializeGitRepository.ts | 67 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 programs/create/steps/initializeGitRepository.ts diff --git a/programs/create/module.ts b/programs/create/module.ts index c0d7919a..0719ca71 100644 --- a/programs/create/module.ts +++ b/programs/create/module.ts @@ -18,6 +18,7 @@ import writeReadmeFile from './steps/writeReadmeFile' import writeManifestJson from './steps/writeManifestJson' import generateExtensionTypes from './steps/generateExtensionTypes' import isTypeScriptTemplate from './helpers/isTypeScriptTemplate' +import initializeGitRepository from './steps/initializeGitRepository' export interface CreateOptions { template?: string @@ -59,6 +60,7 @@ export default async function createExtension( await installDependencies(projectPath, projectName) await writeReadmeFile(projectPath, projectName, template) await writeManifestJson(projectPath, projectName, template) + await initializeGitRepository(projectPath, projectName) if (isTypeScriptTemplate(template)) { await generateExtensionTypes(projectPath, projectName) diff --git a/programs/create/steps/initializeGitRepository.ts b/programs/create/steps/initializeGitRepository.ts new file mode 100644 index 00000000..5374f001 --- /dev/null +++ b/programs/create/steps/initializeGitRepository.ts @@ -0,0 +1,67 @@ +// ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗ +// ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝ +// ██║ ██████╔╝█████╗ ███████║ ██║ █████╗ +// ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝ +// ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗ +// ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝ + +import {spawn} from 'cross-spawn' +import {bold, yellow, red} from '@colors/colors/safe' + +export default async function initializeGitRepository( + projectPath: string, + projectName: string +) { + const gitCommand = 'git' + const gitArgs = ['init'] + + console.log(`🌲 - Initializing git repository for ${bold(projectName)}...`) + + try { + const originalDirectory = process.cwd() + + // Change to the project directory + process.chdir(projectPath) + + const stdio = + process.env.EXTENSION_ENV === 'development' ? 'inherit' : 'ignore' + const child = spawn(gitCommand, gitArgs, {stdio}) + + await new Promise((resolve, reject) => { + child.on('close', (code) => { + // Change back to the original directory + process.chdir(originalDirectory) + + if (code !== 0) { + reject( + new Error( + `Command ${gitCommand} ${gitArgs.join(' ')} failed with exit code ${code}` + ) + ) + } else { + resolve() + } + }) + + child.on('error', (error) => { + // Change back to the original directory + process.chdir(originalDirectory) + + console.error( + `🧩 ${bold(`Extension.js`)} ${red( + `✖︎✖︎✖︎` + )} Child process error: Can't initialize ${yellow('git')} for ${bold(projectName)}. ${error.message}` + ) + reject(error) + }) + }) + } catch (error: any) { + console.error( + `🧩 ${bold(`Extension.js`)} ${red( + `✖︎✖︎✖︎` + )} Can't initialize ${yellow('git')} for ${bold(projectName)}. ${error.message || error.toString()}` + ) + + process.exit(1) + } +}