diff --git a/packages/cli/package.json b/packages/cli/package.json index eac13966..a970fec5 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "pergel", "type": "module", - "version": "0.0.5", + "version": "0.0.12-beta.4", "packageManager": "pnpm@8.10.0", "description": "Full Stack Nuxt Application. It contains the necessary toolkits for a software developer and a fast, clean, tested toolkit.", "author": "Mehmet @productdevbook", @@ -63,7 +63,8 @@ "test": "vitest", "test:watch": "vitest --watch", "test:coverage": "vitest --coverage", - "prepack": "tsup" + "prepack": "tsup", + "release": "pnpm build && pnpm bumpp --commit='version(cli): release %s' --no-tag && pnpm publish" }, "dependencies": { "@antfu/ni": "^0.21.12", diff --git a/packages/cli/playground/pergel/README.yaml b/packages/cli/playground/pergel/README.yaml index 80d8f8f0..a8b72583 100644 --- a/packages/cli/playground/pergel/README.yaml +++ b/packages/cli/playground/pergel/README.yaml @@ -2,6 +2,25 @@ main: # Env variables are not supported in this version graphql: project2: + # Script Commands + scripts: + migrate: 'drizzle-kit generate:pg --config=pergel/main/project2/drizzle/drizzle.config.js' + push: 'drizzle-kit push:pg --config=pergel/main/project2/drizzle/drizzle.config.js' + # Please install the following dependencies: + packageJson: + dependencies: '@pergel/graphql@0.0.0' + devDependencies: + project1: + # Please install the following dependencies: + packageJson: + dependencies: '@pergel/graphql@0.0.0' + devDependencies: + drizzle: + project2: + # Script Commands + scripts: + migrate: drizzle-kit generate:pg --config=pergel/main/project2/drizzle/drizzle.config.js + push: drizzle-kit push:pg --config=pergel/main/project2/drizzle/drizzle.config.js # Please install the following dependencies: packageJson: dependencies: '@pergel/graphql@0.0.0' diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index 403b76e0..a866941f 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -1,10 +1,11 @@ import { writeFileSync } from 'node:fs' import { defineCommand } from 'citty' -const template = ` +const template = `import { definePergel } from 'pergel/core' export default definePergel({ - srcDir: 'pergel', + src: 'pergel', + activeBranch: 'main', }) ` diff --git a/packages/cli/src/commands/orm.ts b/packages/cli/src/commands/orm.ts new file mode 100644 index 00000000..e1945f0c --- /dev/null +++ b/packages/cli/src/commands/orm.ts @@ -0,0 +1,105 @@ +import { readFileSync } from 'node:fs' +import { resolve } from 'node:path' +import { defineCommand } from 'citty' +import { loadConfig } from 'c12' +import { consola } from 'consola' +import { parse } from 'yaml' +import { parseNa, run } from '@antfu/ni' +import type { PergelConfig, PergelYaml } from '../types' + +export default defineCommand({ + meta: { + name: 'Orm Command', + description: 'Orm Command', + version: '0.0.0', + }, + args: { + driver: { + type: 'string', + description: 'Name of the orm', + alias: 'd', + }, + branch: { + type: 'string', + description: 'Name of the branch', + alias: 'b', + }, + project: { + type: 'string', + description: 'Name of the project', + alias: 'p', + }, + script: { + type: 'string', + description: 'Name of the script', + alias: 's', + }, + }, + async run({ args }) { + try { + const file = await loadConfig>({ + cwd: process.cwd(), + configFile: 'pergel.config.ts', + defaultConfig: { + src: 'pergel', + activeBranch: 'main', + cli: { + database: { + driver: (args.driver as any) ?? 'drizzle', + branch: args.branch, + project: args.project, + selectedScript: args.script, + }, + }, + }, + }) + + consola.info(file.config?.cli.database) + + if (!file.config) { + consola.error('No config file found') + return + } + + if (!file.config.cli || !file.config.cli.database) { + consola.error('Pergel config file is not configured') + return + } + + const readmeString = readFileSync(resolve(file.config.src, 'README.yaml')).toString() + const json = parse(readmeString) as PergelYaml + + const project = json[file.config.activeBranch ?? 'main'][file.config.cli.database.driver ?? 'drizzle'][file.config.cli.database.project] + + const script = project?.scripts ?? {} + + if (Object.keys(script).length === 0) + consola.error('No script found') + + const selectedScript = script[file.config.cli.database.selectedScript ?? 'undefined'] + + if (!selectedScript) + consola.error('No script found') + + // if (file.config.cli.database.driver === 'drizzle') { + // consola.info('Dont forget to install drizzle-kit and drizzle-orm') + // consola.info('pnpm -g i drizzle-kit drizzle-orm') + // } + + try { + await run(async (agent, args, ctx) => { + const command = await parseNa(agent, args, ctx) + return command ? command.replace(/"/g, '') : undefined + }, [selectedScript], { programmatic: true }).then(() => { + consola.success('Script executed successfully') + }) + } + catch (error) { + consola.error(error) + } + } + catch (error) { + consola.log(error) + } + }, +}) diff --git a/packages/cli/src/core.ts b/packages/cli/src/core.ts index 068bade0..4248e80d 100644 --- a/packages/cli/src/core.ts +++ b/packages/cli/src/core.ts @@ -1,16 +1,4 @@ -interface PergelConfig { - /** - * The name of the project. - * @default 'Pergel' - */ - src?: string - - /** - * The branch to use for the active version of the project. - * @default 'main' - */ - activeBranch?: string -} +import type { PergelConfig } from './types' export function definePergel(config: PergelConfig) { return config diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 7bea68be..65471c61 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -18,6 +18,7 @@ const main = defineCommand({ upgrade: () => import('./commands/upgrade').then(m => m.default), init: () => import('./commands/init').then(m => m.default), install: () => import('./commands/install').then(m => m.default), + orm: () => import('./commands/orm').then(m => m.default), }, run({ args }) { console.warn('Pergel CLI') diff --git a/packages/cli/src/types.ts b/packages/cli/src/types.ts new file mode 100644 index 00000000..dd8924c9 --- /dev/null +++ b/packages/cli/src/types.ts @@ -0,0 +1,41 @@ +export interface PergelConfig { + /** + * The name of the project. + * @default 'Pergel' + */ + src?: string + + /** + * The branch to use for the active version of the project. + * @default 'main' + */ + activeBranch?: string + + cli?: { + database?: { + driver: 'drizzle' + project: string + branch: string + selectedScript?: string + } + } +} + +export interface PergelYaml { + [branchName: string]: { + [moduleName: string]: { + [projectName: string]: { + packageJson?: { + dependencies?: string + devDependencies?: string + } + scripts?: { + [scriptName: string]: string + } + env?: { + [envName: string]: string + } + } + } + } +} diff --git a/packages/nuxt/bumpp.config.ts b/packages/nuxt/bumpp.config.ts new file mode 100644 index 00000000..340d97b0 --- /dev/null +++ b/packages/nuxt/bumpp.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'bumpp' + +export default defineConfig({ + noVerify: true, + commit: 'version(nuxt): release %s', + push: false, + tag: false, +})