Skip to content

Commit 0eaa112

Browse files
committed
feat(cli): add clientId as build option
1 parent 52689a1 commit 0eaa112

File tree

3 files changed

+67
-39
lines changed

3 files changed

+67
-39
lines changed

packages/scripts/src/cli.ts

Lines changed: 18 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@ import { Command } from "commander";
88
import { runBuild } from "./commands/build";
99
import { ALL_PACKAGES, CATEGORY_VM } from "./common/cli.constants";
1010
import { startDeleteFlow } from "./commands/delete";
11-
import { Options_Cli, Schema_Options_Cli } from "./common/cli.types";
12-
import { log } from "./common/cli.utils";
11+
import { Options_Cli } from "./common/cli.types";
12+
import {
13+
log,
14+
mergeOptions,
15+
validateOptions,
16+
validatePackages,
17+
} from "./common/cli.utils";
1318

1419
class CompassCli {
1520
private program: Command;
@@ -29,18 +34,21 @@ class CompassCli {
2934
);
3035
program.option("-f, --force", "force operation, no cautionary prompts");
3136
program.option(
32-
"-u, --user [id | email]",
37+
"--user [id | email]",
3338
"specify which user to run script for"
3439
);
3540

3641
program
3742
.command("build")
38-
.description("build compass package(s)")
43+
.description("build compass package")
3944
.argument(
4045
`[${ALL_PACKAGES.join(" | ")}]`,
41-
"package(s) to build, separated by comma"
46+
"package to build (only provde 1 at a time)"
4247
)
43-
.option("--skip-env", "skip copying env files to build");
48+
.option(
49+
"-c, --clientId <clientId>",
50+
"google client id to inject into build"
51+
);
4452

4553
program
4654
.command("delete")
@@ -49,37 +57,10 @@ class CompassCli {
4957
}
5058

5159
private getCliOptions(): Options_Cli {
52-
const _options = this.program.opts();
53-
const packages = this.program.args[1]?.split(",");
54-
const options: Options_Cli = {
55-
..._options,
56-
force: _options["force"] === true,
57-
packages,
58-
};
59-
60-
const { data, error } = Schema_Options_Cli.safeParse(options);
61-
if (error) {
62-
log.error(`Invalid CLI options: ${JSON.stringify(error.format())}`);
63-
process.exit(1);
64-
}
65-
66-
return data;
67-
}
60+
const options = mergeOptions(this.program);
61+
const validOptions = validateOptions(options);
6862

69-
private validatePackages(packages: string[] | undefined) {
70-
if (!packages) {
71-
log.error("Packages must be defined");
72-
process.exit(1);
73-
}
74-
const unsupportedPackages = packages.filter(
75-
(pkg) => !ALL_PACKAGES.includes(pkg)
76-
);
77-
if (unsupportedPackages.length > 0) {
78-
log.error(
79-
`One or more of these packages isn't supported: ${unsupportedPackages.toString()}`
80-
);
81-
process.exit(1);
82-
}
63+
return validOptions;
8364
}
8465

8566
public async run() {
@@ -88,7 +69,7 @@ class CompassCli {
8869

8970
switch (true) {
9071
case cmd === "build": {
91-
this.validatePackages(packages);
72+
validatePackages(packages);
9273
await runBuild(this.options);
9374
break;
9475
}

packages/scripts/src/commands/build.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ const buildWeb = async (options: Options_Cli) => {
6262

6363
const envFile = environment === "staging" ? ".env" : ".env.prod";
6464
const baseUrl = await getApiBaseUrl(environment);
65-
const gClientId = await getClientId(environment);
65+
const gClientId = options.clientId
66+
? options.clientId
67+
: await getClientId(environment);
6668

6769
const envPath = path.join(__dirname, "..", "..", "..", "backend", envFile);
6870
dotenv.config({ path: envPath });

packages/scripts/src/common/cli.utils.ts

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import pkg from "inquirer";
22
import chalk from "chalk";
33
const { prompt } = pkg;
44
import shell from "shelljs";
5+
import { Command } from "commander";
56

67
import { ALL_PACKAGES, CLI_ENV } from "./cli.constants";
7-
import { Environment_Cli } from "./cli.types";
8+
import { Environment_Cli, Options_Cli, Schema_Options_Cli } from "./cli.types";
89

910
export const fileExists = (file: string) => {
1011
return shell.test("-e", file);
@@ -128,6 +129,24 @@ export const log = {
128129
tip: (msg: string) => console.log(chalk.hex("#f5c150")(msg)),
129130
};
130131

132+
export const mergeOptions = (program: Command): Options_Cli => {
133+
const _options = program.opts();
134+
const packages = program.args[1]?.split(",");
135+
const options: Options_Cli = {
136+
..._options,
137+
force: _options["force"] === true,
138+
packages,
139+
};
140+
141+
const build = program.commands.find((cmd) => cmd.name() === "build");
142+
const clientId = build?.opts()["clientId"] as string;
143+
if (build && clientId) {
144+
options.clientId = clientId;
145+
}
146+
147+
return options;
148+
};
149+
131150
export const _confirm = async (question: string, _default = true) => {
132151
const q = [
133152
{
@@ -144,3 +163,29 @@ export const _confirm = async (question: string, _default = true) => {
144163
process.exit(1);
145164
});
146165
};
166+
167+
export const validateOptions = (options: Options_Cli): Options_Cli => {
168+
const { data, error } = Schema_Options_Cli.safeParse(options);
169+
if (error) {
170+
log.error(`Invalid CLI options: ${JSON.stringify(error.format())}`);
171+
process.exit(1);
172+
}
173+
174+
return data;
175+
};
176+
177+
export const validatePackages = (packages: string[] | undefined) => {
178+
if (!packages) {
179+
log.error("Packages must be defined");
180+
process.exit(1);
181+
}
182+
const unsupportedPackages = packages.filter(
183+
(pkg) => !ALL_PACKAGES.includes(pkg)
184+
);
185+
if (unsupportedPackages.length > 0) {
186+
log.error(
187+
`One or more of these packages isn't supported: ${unsupportedPackages.toString()}`
188+
);
189+
process.exit(1);
190+
}
191+
};

0 commit comments

Comments
 (0)