Skip to content

Commit 82ec343

Browse files
authored
Merge pull request #97 from launchql/feat/cleanup-deploy-fast
remove deploy:fast
2 parents 8e5b641 + 39195a2 commit 82ec343

File tree

22 files changed

+408
-489
lines changed

22 files changed

+408
-489
lines changed

.claude/settings.local.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(rm:*)",
5+
"Bash(mv:*)"
6+
],
7+
"deny": []
8+
}
9+
}
Lines changed: 18 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
import { CLIOptions, Inquirerer, Question } from 'inquirerer';
22
import { ParsedArgs } from 'minimist';
33

4-
import {
5-
errors,
6-
getEnvOptions,
7-
LaunchQLOptions
8-
} from '@launchql/types';
94
import {
105
getPgEnvOptions,
116
getSpawnEnvWithPg,
127
} from 'pg-env';
138

14-
import { deploy, deployFast } from '@launchql/core';
9+
import { deployModules } from '@launchql/core';
1510
import { Logger } from '@launchql/logger';
1611
import { execSync } from 'child_process';
17-
import { LaunchQLProject } from '@launchql/core';
18-
import { deployCommand } from '@launchql/migrate';
1912
import { getTargetDatabase } from '../utils';
13+
import { selectModule } from '../utils/module-utils';
2014

2115
export default async (
2216
argv: Partial<ParsedArgs>,
@@ -71,77 +65,32 @@ export default async (
7165

7266
log.debug(`Using current directory: ${cwd}`);
7367

74-
const project = new LaunchQLProject(cwd);
75-
7668
if (createdb) {
7769
log.info(`Creating database ${database}...`);
7870
execSync(`createdb ${database}`, {
7971
env: getSpawnEnvWithPg(pgEnv)
8072
});
8173
}
8274

83-
const options: LaunchQLOptions = getEnvOptions({
84-
pg: {
85-
database
86-
}
87-
});
88-
75+
let projectName: string | undefined;
8976
if (recursive) {
90-
const modules = await project.getModules();
91-
const moduleNames = modules.map(mod => mod.getModuleName());
92-
93-
if (!moduleNames.length) {
94-
log.error('No modules found in the specified directory.');
95-
prompter.close();
96-
throw errors.NOT_FOUND({}, 'No modules found in the specified directory.');
97-
}
98-
99-
const { project: selectedProject } = await prompter.prompt(argv, [
100-
{
101-
type: 'autocomplete',
102-
name: 'project',
103-
message: 'Choose a project to deploy',
104-
options: moduleNames,
105-
required: true
106-
}
107-
]);
108-
109-
const selected = modules.find(mod => mod.getModuleName() === selectedProject);
110-
if (!selected) {
111-
throw new Error(`Module ${selectedProject} not found`);
112-
}
113-
114-
const dir = selected.getModulePath()!;
115-
log.success(`Deploying project ${selectedProject} from ${dir} to database ${database}...`);
77+
projectName = await selectModule(argv, prompter, 'Choose a project to deploy', cwd);
78+
log.info(`Selected project: ${projectName}`);
79+
}
11680

117-
if (argv.fast) {
118-
await deployFast({
119-
opts: options,
120-
database,
121-
dir,
122-
name: selectedProject,
123-
usePlan: true,
124-
cache: false
125-
});
126-
} else {
127-
await deploy(options, selectedProject, database, dir, { useSqitch, useTransaction: tx });
128-
}
81+
await deployModules({
82+
database,
83+
cwd,
84+
recursive,
85+
projectName,
86+
useSqitch,
87+
useTransaction: tx,
88+
fast: argv.fast,
89+
usePlan: argv.usePlan ?? true,
90+
cache: argv.cache ?? false
91+
});
12992

130-
log.success('Deployment complete.');
131-
} else {
132-
if (useSqitch) {
133-
log.info(`Running: sqitch deploy db:pg:${database} (using legacy Sqitch)`);
134-
execSync(`sqitch deploy db:pg:${database}`, {
135-
cwd,
136-
env: getSpawnEnvWithPg(pgEnv),
137-
stdio: 'inherit'
138-
});
139-
} else {
140-
log.info(`Running: launchql migrate deploy db:pg:${database}`);
141-
await deployCommand(pgEnv, database, cwd, { useTransaction: tx });
142-
}
143-
log.success('Deployment complete.');
144-
}
93+
log.success('Deployment complete.');
14594

14695
return argv;
14796
};
Lines changed: 15 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import { CLIOptions, Inquirerer, Question } from 'inquirerer';
2-
import { LaunchQLProject, revert } from '@launchql/core';
3-
import { errors, getEnvOptions, LaunchQLOptions } from '@launchql/types';
4-
import { getPgEnvOptions, getSpawnEnvWithPg } from 'pg-env';
52
import { Logger } from '@launchql/logger';
6-
import { revertCommand } from '@launchql/migrate';
7-
import { execSync } from 'child_process';
3+
import { revertModules } from '@launchql/core';
84
import { getTargetDatabase } from '../utils';
5+
import { selectModule } from '../utils/module-utils';
96

107
const log = new Logger('revert');
118

@@ -45,52 +42,22 @@ export default async (
4542

4643
log.debug(`Using current directory: ${cwd}`);
4744

48-
const project = new LaunchQLProject(cwd);
49-
45+
let projectName: string | undefined;
5046
if (recursive) {
51-
const modules = await project.getModules();
52-
const moduleNames = modules.map(mod => mod.getModuleName());
53-
54-
if (!moduleNames.length) {
55-
log.error('No modules found in the specified directory.');
56-
prompter.close();
57-
throw errors.NOT_FOUND({}, 'No modules found in the specified directory.');
58-
}
59-
60-
const { project: selectedProject } = await prompter.prompt(argv, [
61-
{
62-
type: 'autocomplete',
63-
name: 'project',
64-
message: 'Choose a project to revert',
65-
options: moduleNames,
66-
required: true
67-
}
68-
]);
47+
projectName = await selectModule(argv, prompter, 'Choose a project to revert', cwd);
48+
log.info(`Selected project: ${projectName}`);
49+
}
6950

70-
log.success(`Reverting project ${selectedProject} on database ${database}...`);
71-
const options: LaunchQLOptions = getEnvOptions({
72-
pg: {
73-
database
74-
}
75-
});
51+
await revertModules({
52+
database,
53+
cwd,
54+
recursive,
55+
projectName,
56+
useSqitch,
57+
useTransaction: tx
58+
});
7659

77-
await revert(options, selectedProject, database, cwd, { useSqitch, useTransaction: tx });
78-
log.success('Revert complete.');
79-
} else {
80-
const pgEnv = getPgEnvOptions();
81-
if (useSqitch) {
82-
log.info(`Running: sqitch revert db:pg:${database} (using legacy Sqitch)`);
83-
execSync(`sqitch revert db:pg:${database}`, {
84-
cwd,
85-
env: getSpawnEnvWithPg(pgEnv),
86-
stdio: 'inherit'
87-
});
88-
} else {
89-
log.info(`Running: launchql migrate revert db:pg:${database}`);
90-
await revertCommand(pgEnv, database, cwd, { useTransaction: tx });
91-
}
92-
log.success('Revert complete.');
93-
}
60+
log.success('Revert complete.');
9461

9562
return argv;
9663
};
Lines changed: 14 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import { CLIOptions, Inquirerer, Question } from 'inquirerer';
2-
import { LaunchQLProject, verify } from '@launchql/core';
3-
import { errors, getEnvOptions, LaunchQLOptions } from '@launchql/types';
4-
import { getPgEnvOptions, getSpawnEnvWithPg } from 'pg-env';
52
import { Logger } from '@launchql/logger';
6-
import { verifyCommand } from '@launchql/migrate';
7-
import { execSync } from 'child_process';
3+
import { verifyModules } from '@launchql/core';
84
import { getTargetDatabase } from '../utils';
5+
import { selectModule } from '../utils/module-utils';
96

107
const log = new Logger('verify');
118

@@ -24,52 +21,21 @@ export default async (
2421

2522
log.debug(`Using current directory: ${cwd}`);
2623

27-
const project = new LaunchQLProject(cwd);
28-
24+
let projectName: string | undefined;
2925
if (recursive) {
30-
const modules = await project.getModules();
31-
const moduleNames = modules.map(mod => mod.getModuleName());
32-
33-
if (!moduleNames.length) {
34-
log.error('No modules found in the specified directory.');
35-
prompter.close();
36-
throw errors.NOT_FOUND({}, 'No modules found in the specified directory.');
37-
}
38-
39-
const { project: selectedProject } = await prompter.prompt(argv, [
40-
{
41-
type: 'autocomplete',
42-
name: 'project',
43-
message: 'Choose a project to verify',
44-
options: moduleNames,
45-
required: true
46-
}
47-
]);
26+
projectName = await selectModule(argv, prompter, 'Choose a project to verify', cwd);
27+
log.info(`Selected project: ${projectName}`);
28+
}
4829

49-
const options: LaunchQLOptions = getEnvOptions({
50-
pg: {
51-
database
52-
}
53-
});
30+
await verifyModules({
31+
database,
32+
cwd,
33+
recursive,
34+
projectName,
35+
useSqitch
36+
});
5437

55-
log.info(`Verifying project ${selectedProject} on database ${database}...`);
56-
await verify(options, selectedProject, database, cwd, { useSqitch });
57-
log.success('Verify complete.');
58-
} else {
59-
const pgEnv = getPgEnvOptions();
60-
if (useSqitch) {
61-
log.info(`Running: sqitch verify db:pg:${database} (using legacy Sqitch)`);
62-
execSync(`sqitch verify db:pg:${database}`, {
63-
cwd,
64-
env: getSpawnEnvWithPg(pgEnv),
65-
stdio: 'inherit'
66-
});
67-
} else {
68-
log.info(`Running: launchql migrate verify db:pg:${database}`);
69-
await verifyCommand(pgEnv, database, cwd);
70-
}
71-
log.success('Verify complete.');
72-
}
38+
log.success('Verify complete.');
7339

7440
return argv;
7541
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { Inquirerer } from 'inquirerer';
2+
import { ParsedArgs } from 'minimist';
3+
import { getAvailableModules } from '@launchql/core';
4+
import { errors } from '@launchql/types';
5+
6+
/**
7+
* Prompt user to select a module from available modules in the directory
8+
*/
9+
export async function selectModule(
10+
argv: Partial<ParsedArgs>,
11+
prompter: Inquirerer,
12+
message: string,
13+
cwd: string
14+
): Promise<string> {
15+
const modules = await getAvailableModules(cwd);
16+
17+
if (!modules.length) {
18+
prompter.close();
19+
throw errors.NOT_FOUND({}, 'No modules found in the specified directory.');
20+
}
21+
22+
const { project } = await prompter.prompt(argv, [{
23+
type: 'autocomplete',
24+
name: 'project',
25+
message,
26+
options: modules,
27+
required: true
28+
}]);
29+
30+
return project;
31+
}

0 commit comments

Comments
 (0)