Skip to content

Commit 8d1e051

Browse files
feat: add a collie info command
This command now returns runtime and detected CLI version infos. The version command now outputs only the version number
1 parent 226c9c0 commit 8d1e051

File tree

3 files changed

+51
-34
lines changed

3 files changed

+51
-34
lines changed

src/commands/info.command.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import * as colors from "std/fmt/colors";
2+
3+
import { CliApiFacadeFactory } from "../api/CliApiFacadeFactory.ts";
4+
import { CliDetectionResult } from "../api/CliDetector.ts";
5+
import { InstallationStatus } from "../api/CliInstallationStatus.ts";
6+
import { Logger } from "../cli/Logger.ts";
7+
import { CollieRepository } from "../model/CollieRepository.ts";
8+
import { TopLevelCommand } from "./TopLevelCommand.ts";
9+
import { GlobalCommandOptions } from "./GlobalCommandOptions.ts";
10+
11+
export function registerInfoCommand(program: TopLevelCommand) {
12+
program
13+
.command("info")
14+
.description("Show info about this program and the environment")
15+
.action(async (opts: GlobalCommandOptions) => {
16+
console.log("collie %s\n", program.getVersion());
17+
18+
console.log(`Runtime:`);
19+
console.log(`deno ${Deno.version.deno} ${Deno.build.target}\n`);
20+
21+
const collie = new CollieRepository("./");
22+
const logger = new Logger(collie, opts);
23+
24+
const factory = new CliApiFacadeFactory(collie, logger);
25+
26+
const detectors = factory.buildCliDetectors();
27+
28+
const detectTasks = detectors.map((x) => x.detect());
29+
const infos = await Promise.all(detectTasks);
30+
31+
const cliInfos = infos.map((x) => formatInfo(x)).join("\n");
32+
console.log("Installed dependencies:");
33+
console.log(cliInfos);
34+
});
35+
}
36+
37+
function formatInfo(r: CliDetectionResult) {
38+
switch (r.status) {
39+
case InstallationStatus.NotInstalled:
40+
return `${r.cli} ${colors.italic("not installed")}`;
41+
case InstallationStatus.UnsupportedVersion:
42+
return `${r.cli} ${r.version} ${colors.italic("unsupported version")}`;
43+
case InstallationStatus.Installed: {
44+
return `${r.cli} ${r.version}`;
45+
}
46+
}
47+
}

src/commands/version.command.ts

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,11 @@
1-
import * as colors from "std/fmt/colors";
2-
3-
import { CliApiFacadeFactory } from "../api/CliApiFacadeFactory.ts";
4-
import { CliDetectionResult } from "../api/CliDetector.ts";
5-
import { InstallationStatus } from "../api/CliInstallationStatus.ts";
6-
import { Logger } from "../cli/Logger.ts";
7-
import { CollieRepository } from "../model/CollieRepository.ts";
81
import { TopLevelCommand } from "./TopLevelCommand.ts";
92

103
export function registerVersionCommand(program: TopLevelCommand) {
114
program.versionOption(
125
"-V, --version",
136
"Show the version number for this program.",
14-
async function () {
15-
console.log("collie %s\n", program.getVersion());
16-
17-
const collie = new CollieRepository("./");
18-
const logger = new Logger(collie, {});
19-
20-
const factory = new CliApiFacadeFactory(collie, logger);
21-
22-
const detectors = factory.buildCliDetectors();
23-
24-
const detectTasks = detectors.map((x) => x.detect());
25-
const infos = await Promise.all(detectTasks);
26-
27-
const cliInfos = infos.map((x) => formatInfo(x)).join("\n");
28-
console.log(cliInfos);
7+
() => {
8+
console.log("collie %s", program.getVersion());
299
},
3010
);
3111
}
32-
33-
function formatInfo(r: CliDetectionResult) {
34-
switch (r.status) {
35-
case InstallationStatus.NotInstalled:
36-
return `${r.cli} ${colors.italic("not installed")}`;
37-
case InstallationStatus.UnsupportedVersion:
38-
return `${r.cli} ${r.version} ${colors.italic("unsupported version")}`;
39-
case InstallationStatus.Installed: {
40-
return `${r.cli} ${r.version}`;
41-
}
42-
}
43-
}

src/main.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { registerVersionCommand } from "./commands/version.command.ts";
1616
import { FirstTimeExperience } from "./FirstTimeExperience.ts";
1717
import { CollieFoundationDoesNotExistError } from "./model/schemas/ModelValidator.ts";
1818
import { makeTopLevelCommand } from "./commands/TopLevelCommand.ts";
19+
import { registerInfoCommand } from "./commands/info.command.ts";
1920

2021
async function collie() {
2122
const program = makeTopLevelCommand()
@@ -35,6 +36,7 @@ async function collie() {
3536
registerKitCommand(program);
3637
registerComplianceCommand(program);
3738

39+
registerInfoCommand(program);
3840
registerUpgradeCommand(program);
3941
registerVersionCommand(program);
4042

0 commit comments

Comments
 (0)