Skip to content

Commit

Permalink
@comet/create-app: Return non-zero exit code on error (#126)
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnyomair authored Jan 29, 2024
1 parent 4901365 commit c18d691
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 34 deletions.
26 changes: 18 additions & 8 deletions create-app/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,40 +4,50 @@ import kleur from "kleur";
import { createApp } from "./scripts/create-app/createApp";
import { removeShowcaseContent } from "./scripts/remove-showcase/removeShowcase";
import { removeSite } from "./scripts/remove-site/removeSite";
import { cwdIsCometProject } from "./util/cwdIsCometProject";
import { isValidNodeVersion } from "./util/isValidNodeVersion";
import { isValidProjectName } from "./util/isValidProjectName";

// eslint-disable-next-line @typescript-eslint/no-var-requires
const { name, version } = require("../package.json");

if (!isValidNodeVersion()) {
console.error("Invalid Node Version (your Node.js version is prior to v18).");
process.exit(1);
}

void (async () => {
const program = new Command();
if (!isValidNodeVersion()) {
console.log(kleur.bgRed("Invalid Node Version (your Node.js version is prior to v18)."));
return;
}

program.name(name).description("CLI to create a comet app").version(version);
program.name(name).description("CLI to create a Comet app").version(version);
program
.argument("<projectName>", "Sets the name of the project.")
.option("-v, --verbose", "Enables extra console logs for verbose output.")
.action((projectName: string, options) => {
if (isValidProjectName(projectName)) {
createApp({ projectName, verbose: options.verbose });
} else {
console.log(kleur.bgRed("Please provide a valid project name."));
program.error("Please provide a valid project name.");
}
});
})
.configureOutput({ outputError: (str, write) => write(kleur.bgRed(str)) });

program.addCommand(
new Command("remove-showcase").action(() => {
if (!cwdIsCometProject()) {
program.error(`This command must be run from the root of a Comet project.`);
}

console.log(kleur.white(`Removing showcase content from project`));
removeShowcaseContent();
}),
);

program.addCommand(
new Command("remove-site").action(() => {
if (!cwdIsCometProject()) {
program.error(`This command must be run from the root of a Comet project.`);
}

console.log(kleur.white(`Removing site from project`));
removeSite();
}),
Expand Down
4 changes: 1 addition & 3 deletions create-app/src/scripts/create-app/createApp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,7 @@ interface ProjectConfiguration {

export async function createApp(projectConfiguration: ProjectConfiguration) {
console.log(kleur.white(`Creating a new Comet app in `) + kleur.yellow(`${process.cwd()}\n`));
if (!createWorkingDirectoryCopy(projectConfiguration.projectName, projectConfiguration.verbose)) {
return;
}
createWorkingDirectoryCopy(projectConfiguration.projectName, projectConfiguration.verbose);
cleanupReadme();
cleanupWorkingDirectory(projectConfiguration.verbose);
replacePlaceholder(projectConfiguration.projectName, projectConfiguration.verbose);
Expand Down
16 changes: 5 additions & 11 deletions create-app/src/scripts/create-app/createWorkingDirectoryCopy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,11 @@ import { execSync } from "child_process";
import kleur from "kleur";
import process from "process";

export function createWorkingDirectoryCopy(projectName: string, verbose: boolean): boolean {
export function createWorkingDirectoryCopy(projectName: string, verbose: boolean): void {
const clone = `git clone --depth 1 https://github.com/vivid-planet/comet-starter.git ./${projectName}`;
try {
execSync(clone);
process.chdir(`./${projectName}`);
if (verbose) {
console.log(kleur.white("Cloned git repository."));
}
} catch (e) {
console.log(kleur.bgRed(`Error while cloning working directory to ${projectName}`));
return false;
execSync(clone);
process.chdir(`./${projectName}`);
if (verbose) {
console.log(kleur.white("Cloned git repository."));
}
return true;
}
6 changes: 0 additions & 6 deletions create-app/src/scripts/remove-showcase/removeShowcase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { ESLint } from "eslint";
import { existsSync, readFileSync, writeFileSync } from "fs";
import kleur from "kleur";

import { cwdIsCometProject } from "../../util/cwdIsCometProject";
import { deleteFilesAndFolders } from "../../util/deleteFilesAndFolders";

async function removeFileContent() {
Expand Down Expand Up @@ -60,11 +59,6 @@ async function removeFileContent() {
}

export async function removeShowcaseContent() {
if (!cwdIsCometProject()) {
console.log(kleur.bgYellow(`This command must be run from the root of a Comet project.`));
return;
}

await removeFileContent();
const filesToRemove: string[] = [
"api/src/products",
Expand Down
5 changes: 0 additions & 5 deletions create-app/src/scripts/remove-site/removeSite.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { cwdIsCometProject } from "../../util/cwdIsCometProject";
import { deleteFilesAndFolders } from "../../util/deleteFilesAndFolders";
import { removeReferenceInFile } from "../../util/removeReferenceInFile";

Expand All @@ -17,10 +16,6 @@ function removeSiteReferences() {
}

export function removeSite() {
if (!cwdIsCometProject()) {
console.error("This command must be run from the root of a Comet project.");
return;
}
deleteFilesAndFolders(["site"], false);
removeSiteReferences();
}
2 changes: 1 addition & 1 deletion create-app/src/util/cwdIsCometProject.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import fs from "fs";

export function cwdIsCometProject(): boolean {
return fs.existsSync("api/src/comet-config.json") && fs.readFileSync("admin/package.json", "utf8").includes("@comet");
return fs.existsSync("api/src/comet-config.json");
}

0 comments on commit c18d691

Please sign in to comment.