Skip to content

Commit 042a4d7

Browse files
committed
cleanup
1 parent 8e5b641 commit 042a4d7

File tree

8 files changed

+406
-160
lines changed

8 files changed

+406
-160
lines changed

packages/cli/src/commands/deploy.ts

Lines changed: 40 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@ import { CLIOptions, Inquirerer, Question } from 'inquirerer';
22
import { ParsedArgs } from 'minimist';
33

44
import {
5-
errors,
65
getEnvOptions,
76
LaunchQLOptions
87
} from '@launchql/types';
8+
99
import {
1010
getPgEnvOptions,
1111
getSpawnEnvWithPg,
1212
} from 'pg-env';
1313

14-
import { deploy, deployFast } from '@launchql/core';
14+
import { deployFast } from '@launchql/core';
1515
import { Logger } from '@launchql/logger';
1616
import { execSync } from 'child_process';
17-
import { LaunchQLProject } from '@launchql/core';
18-
import { deployCommand } from '@launchql/migrate';
17+
import { deployProject } from '@launchql/migrate';
1918
import { getTargetDatabase } from '../utils';
19+
import { selectModule } from '../utils/module-utils';
2020

2121
export default async (
2222
argv: Partial<ParsedArgs>,
@@ -71,77 +71,54 @@ export default async (
7171

7272
log.debug(`Using current directory: ${cwd}`);
7373

74-
const project = new LaunchQLProject(cwd);
75-
7674
if (createdb) {
7775
log.info(`Creating database ${database}...`);
7876
execSync(`createdb ${database}`, {
7977
env: getSpawnEnvWithPg(pgEnv)
8078
});
8179
}
8280

83-
const options: LaunchQLOptions = getEnvOptions({
84-
pg: {
85-
database
86-
}
87-
});
88-
81+
let projectName: string | undefined;
8982
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-
}
83+
projectName = await selectModule(argv, prompter, 'Choose a project to deploy', cwd);
84+
log.info(`Selected project: ${projectName}`);
85+
}
9886

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
87+
// Handle fast deploy separately as it uses a different API
88+
if (argv.fast && recursive) {
89+
const options: LaunchQLOptions = getEnvOptions({
90+
pg: {
91+
database
10692
}
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}...`);
116-
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-
}
129-
130-
log.success('Deployment complete.');
93+
});
94+
95+
// Fast deploy needs the module path, so we need to get it
96+
// This is a limitation of the current fast deploy API
97+
const { LaunchQLProject } = await import('@launchql/core');
98+
const project = new LaunchQLProject(cwd);
99+
const modules = project.getModuleMap();
100+
const modulePath = modules[projectName!].path;
101+
102+
await deployFast({
103+
opts: options,
104+
database,
105+
dir: modulePath,
106+
name: projectName!,
107+
usePlan: true,
108+
cache: false
109+
});
131110
} 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.');
111+
await deployProject({
112+
database,
113+
cwd,
114+
recursive,
115+
projectName,
116+
useSqitch,
117+
useTransaction: tx
118+
});
144119
}
145120

121+
log.success('Deployment complete.');
122+
146123
return argv;
147124
};
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 { revertProject } from '@launchql/migrate';
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 revertProject({
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 { verifyProject } from '@launchql/migrate';
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 verifyProject({
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/migrate';
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)