All checks were successful
Label PRs based on size / Check PR size (pull_request) Successful in 6s
123 lines
3.3 KiB
JavaScript
123 lines
3.3 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import fs from "fs";
|
|
import { confirm, select, input } from "@inquirer/prompts";
|
|
import { exit } from "process";
|
|
import {
|
|
addProject,
|
|
configPath,
|
|
generateDefaultConfig,
|
|
getConfiguration,
|
|
getProjects,
|
|
type Project,
|
|
} from "./configuration/configuration";
|
|
import { execSync } from "child_process";
|
|
import { program } from "commander";
|
|
|
|
import packageJson from "./package.json";
|
|
export const VERSION = packageJson.version;
|
|
|
|
const CLI_NAME = "pcli";
|
|
|
|
program
|
|
.name("project-cli")
|
|
.description("A cli for managing projects")
|
|
.version(VERSION)
|
|
.action(async () => {
|
|
if (!fs.existsSync(configPath + "config.json")) {
|
|
const createConfig = await confirm({
|
|
message:
|
|
"No cofig has been found. Would you like to generate a new one?",
|
|
});
|
|
|
|
if (createConfig) {
|
|
generateDefaultConfig();
|
|
} else {
|
|
console.log(
|
|
"This project can not run without the config. Either create it yourself or generate the default.",
|
|
);
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
if (
|
|
!getProjects() ||
|
|
getProjects().length == 0 ||
|
|
getProjects().length == undefined
|
|
) {
|
|
const anwser = await select({
|
|
message: "Create a new Project",
|
|
choices: ["Clone a project with git", "Create a new empty Project"],
|
|
});
|
|
if (anwser == "Clone a project with git") {
|
|
const repoUrl = await input({
|
|
message: "What is the url of the repo?",
|
|
});
|
|
const wantsCustomName = await confirm({
|
|
message: "Would you like to give this project a custom name?",
|
|
default: false,
|
|
});
|
|
let customName = "";
|
|
if (wantsCustomName) {
|
|
customName = await input({
|
|
message: "What would you like the custom name to be?",
|
|
});
|
|
}
|
|
|
|
execSync(
|
|
"cd " +
|
|
getConfiguration().projectsDirectory +
|
|
" && " +
|
|
getConfiguration()
|
|
.cloningCommand.replace("%s", repoUrl)
|
|
.replace("%n", customName),
|
|
);
|
|
|
|
const newProject: Project = {
|
|
name: customName,
|
|
};
|
|
addProject(newProject);
|
|
} else if (anwser == "Create a new empty Project") {
|
|
const name = await input({
|
|
message: "What would you like to call the project?",
|
|
});
|
|
fs.mkdirSync(getConfiguration().projectsDirectory + "/" + name);
|
|
const newProject: Project = {
|
|
name: name,
|
|
};
|
|
addProject(newProject);
|
|
}
|
|
}
|
|
|
|
const pickedProject = await select({
|
|
message: "Which Project would you like to go to?",
|
|
choices: getProjects().map((project: Project) => project.name),
|
|
});
|
|
|
|
process.chdir(getConfiguration().projectsDirectory + "/" + pickedProject);
|
|
|
|
console.log(getProjects());
|
|
});
|
|
|
|
program.command("init").action(() => {
|
|
console.log(`${CLI_NAME}() {
|
|
local output
|
|
output=$(command ${CLI_NAME} "$@")
|
|
local exit_code=$?
|
|
|
|
if [ $exit_code -eq 0 ]; then
|
|
echo "$output" | while IFS= read -r line; do
|
|
if [[ $line == __EXEC__* ]]; then
|
|
eval "\${line#__EXEC__}"
|
|
else
|
|
echo "$line"
|
|
fi
|
|
done
|
|
else
|
|
echo "$output" >&2
|
|
return $exit_code
|
|
fi
|
|
}`);
|
|
});
|
|
|
|
program.parse();
|