@alejandrochaves/devflow-cli 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +217 -15
- package/dist/colors.d.ts +9 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +13 -0
- package/dist/colors.js.map +1 -0
- package/dist/commands/amend.d.ts +4 -0
- package/dist/commands/amend.d.ts.map +1 -0
- package/dist/commands/amend.js +138 -0
- package/dist/commands/amend.js.map +1 -0
- package/dist/commands/branch.d.ts +3 -1
- package/dist/commands/branch.d.ts.map +1 -1
- package/dist/commands/branch.js +37 -5
- package/dist/commands/branch.js.map +1 -1
- package/dist/commands/changelog.d.ts +4 -0
- package/dist/commands/changelog.d.ts.map +1 -0
- package/dist/commands/changelog.js +204 -0
- package/dist/commands/changelog.js.map +1 -0
- package/dist/commands/cleanup.d.ts +4 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +124 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/commit.d.ts +13 -1
- package/dist/commands/commit.d.ts.map +1 -1
- package/dist/commands/commit.js +107 -25
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +122 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/fixup.d.ts +4 -0
- package/dist/commands/fixup.d.ts.map +1 -0
- package/dist/commands/fixup.js +100 -0
- package/dist/commands/fixup.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +260 -22
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/merge.d.ts +4 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/merge.js +84 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/pr.d.ts +3 -1
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +49 -40
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +83 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test-plan.d.ts +2 -0
- package/dist/commands/test-plan.d.ts.map +1 -0
- package/dist/commands/test-plan.js +92 -0
- package/dist/commands/test-plan.js.map +1 -0
- package/dist/commands/undo.d.ts +4 -0
- package/dist/commands/undo.d.ts.map +1 -0
- package/dist/commands/undo.js +46 -0
- package/dist/commands/undo.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +100 -3
- package/dist/config.js.map +1 -1
- package/dist/git.d.ts +1 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +5 -0
- package/dist/git.js.map +1 -1
- package/dist/index.js +145 -5
- package/dist/index.js.map +1 -1
- package/dist/monorepo.d.ts +13 -0
- package/dist/monorepo.d.ts.map +1 -0
- package/dist/monorepo.js +191 -0
- package/dist/monorepo.js.map +1 -0
- package/dist/test-plan.d.ts +5 -0
- package/dist/test-plan.d.ts.map +1 -0
- package/dist/test-plan.js +48 -0
- package/dist/test-plan.js.map +1 -0
- package/dist/update-notifier.d.ts +2 -0
- package/dist/update-notifier.d.ts.map +1 -0
- package/dist/update-notifier.js +96 -0
- package/dist/update-notifier.js.map +1 -0
- package/package.json +14 -3
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
import { existsSync, readFileSync } from "fs";
|
|
3
|
+
import { resolve } from "path";
|
|
4
|
+
import { bold, dim, green, red, yellow, gray } from "../colors.js";
|
|
5
|
+
function checkCommand(cmd) {
|
|
6
|
+
try {
|
|
7
|
+
return execSync(cmd, { encoding: "utf-8", stdio: ["pipe", "pipe", "ignore"] }).trim();
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export async function doctorCommand() {
|
|
14
|
+
const cwd = process.cwd();
|
|
15
|
+
const checks = [];
|
|
16
|
+
console.log(`\n${dim("───")} ${bold("devflow doctor")} ${dim("───")}\n`);
|
|
17
|
+
// 1. Git
|
|
18
|
+
const gitVersion = checkCommand("git --version");
|
|
19
|
+
checks.push(gitVersion
|
|
20
|
+
? { name: "git", status: "ok", detail: gitVersion.replace("git version ", "") }
|
|
21
|
+
: { name: "git", status: "error", detail: "Not installed" });
|
|
22
|
+
// 2. Node
|
|
23
|
+
const nodeVersion = checkCommand("node --version");
|
|
24
|
+
if (nodeVersion) {
|
|
25
|
+
const major = parseInt(nodeVersion.replace("v", "").split(".")[0], 10);
|
|
26
|
+
checks.push(major >= 20
|
|
27
|
+
? { name: "node", status: "ok", detail: nodeVersion }
|
|
28
|
+
: { name: "node", status: "warning", detail: `${nodeVersion} (>= 20 recommended)` });
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
checks.push({ name: "node", status: "error", detail: "Not installed" });
|
|
32
|
+
}
|
|
33
|
+
// 3. GitHub CLI
|
|
34
|
+
const ghVersion = checkCommand("gh --version");
|
|
35
|
+
if (ghVersion) {
|
|
36
|
+
const version = ghVersion.split("\n")[0];
|
|
37
|
+
checks.push({ name: "gh (GitHub CLI)", status: "ok", detail: version.replace("gh version ", "").split(" ")[0] });
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
checks.push({ name: "gh (GitHub CLI)", status: "warning", detail: "Not installed (needed for PR command)" });
|
|
41
|
+
}
|
|
42
|
+
// 4. gh auth
|
|
43
|
+
if (ghVersion) {
|
|
44
|
+
const ghAuth = checkCommand("gh auth status");
|
|
45
|
+
checks.push(ghAuth
|
|
46
|
+
? { name: "gh auth", status: "ok", detail: "Authenticated" }
|
|
47
|
+
: { name: "gh auth", status: "warning", detail: "Not authenticated (run: gh auth login)" });
|
|
48
|
+
}
|
|
49
|
+
// 5. Git repo
|
|
50
|
+
const isRepo = checkCommand("git rev-parse --is-inside-work-tree");
|
|
51
|
+
checks.push(isRepo === "true"
|
|
52
|
+
? { name: "git repository", status: "ok" }
|
|
53
|
+
: { name: "git repository", status: "error", detail: "Not inside a git repository" });
|
|
54
|
+
// 6. .devflow.json
|
|
55
|
+
const configExists = existsSync(resolve(cwd, ".devflow.json"));
|
|
56
|
+
checks.push(configExists
|
|
57
|
+
? { name: ".devflow.json", status: "ok" }
|
|
58
|
+
: { name: ".devflow.json", status: "warning", detail: "Not found (run: devflow init)" });
|
|
59
|
+
// 7. commitlint
|
|
60
|
+
const commitlintConfig = existsSync(resolve(cwd, "commitlint.config.js"))
|
|
61
|
+
|| existsSync(resolve(cwd, "commitlint.config.cjs"))
|
|
62
|
+
|| existsSync(resolve(cwd, ".commitlintrc.js"));
|
|
63
|
+
checks.push(commitlintConfig
|
|
64
|
+
? { name: "commitlint config", status: "ok" }
|
|
65
|
+
: { name: "commitlint config", status: "warning", detail: "Not found" });
|
|
66
|
+
// 8. Husky
|
|
67
|
+
const huskyDir = existsSync(resolve(cwd, ".husky"));
|
|
68
|
+
checks.push(huskyDir
|
|
69
|
+
? { name: "husky (.husky/)", status: "ok" }
|
|
70
|
+
: { name: "husky (.husky/)", status: "warning", detail: "Not found" });
|
|
71
|
+
// 9. commit-msg hook
|
|
72
|
+
const commitMsgHook = existsSync(resolve(cwd, ".husky/commit-msg"));
|
|
73
|
+
checks.push(commitMsgHook
|
|
74
|
+
? { name: "commit-msg hook", status: "ok" }
|
|
75
|
+
: { name: "commit-msg hook", status: "warning", detail: "Not found" });
|
|
76
|
+
// 10. package.json scripts
|
|
77
|
+
try {
|
|
78
|
+
const pkgPath = resolve(cwd, "package.json");
|
|
79
|
+
if (existsSync(pkgPath)) {
|
|
80
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
81
|
+
const scripts = pkg.scripts || {};
|
|
82
|
+
const hasCommit = scripts.commit?.includes("devflow");
|
|
83
|
+
const hasBranch = scripts.branch?.includes("devflow");
|
|
84
|
+
const hasPr = scripts.pr?.includes("devflow");
|
|
85
|
+
if (hasCommit && hasBranch && hasPr) {
|
|
86
|
+
checks.push({ name: "package.json scripts", status: "ok", detail: "commit, branch, pr" });
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const missing = [];
|
|
90
|
+
if (!hasCommit)
|
|
91
|
+
missing.push("commit");
|
|
92
|
+
if (!hasBranch)
|
|
93
|
+
missing.push("branch");
|
|
94
|
+
if (!hasPr)
|
|
95
|
+
missing.push("pr");
|
|
96
|
+
checks.push({ name: "package.json scripts", status: "warning", detail: `Missing: ${missing.join(", ")}` });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
checks.push({ name: "package.json scripts", status: "warning", detail: "Could not read package.json" });
|
|
102
|
+
}
|
|
103
|
+
// Print results
|
|
104
|
+
let hasErrors = false;
|
|
105
|
+
for (const check of checks) {
|
|
106
|
+
const icon = check.status === "ok" ? green("✓")
|
|
107
|
+
: check.status === "warning" ? yellow("⚠")
|
|
108
|
+
: red("✗");
|
|
109
|
+
const detail = check.detail ? gray(` ${check.detail}`) : "";
|
|
110
|
+
console.log(` ${icon} ${check.name}${detail}`);
|
|
111
|
+
if (check.status === "error")
|
|
112
|
+
hasErrors = true;
|
|
113
|
+
}
|
|
114
|
+
const okCount = checks.filter((c) => c.status === "ok").length;
|
|
115
|
+
const warnCount = checks.filter((c) => c.status === "warning").length;
|
|
116
|
+
const errCount = checks.filter((c) => c.status === "error").length;
|
|
117
|
+
console.log(`\n ${green(`${okCount} passed`)}${warnCount ? `, ${yellow(`${warnCount} warnings`)}` : ""}${errCount ? `, ${red(`${errCount} errors`)}` : ""}\n`);
|
|
118
|
+
if (hasErrors) {
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixup.d.ts","sourceRoot":"","sources":["../../src/commands/fixup.ts"],"names":[],"mappings":"AAkBA,wBAAsB,YAAY,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFpF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { select, confirm, checkbox } from "@inquirer/prompts";
|
|
2
|
+
import { execSync } from "child_process";
|
|
3
|
+
import { bold, dim, green, cyan } from "../colors.js";
|
|
4
|
+
import { getDefaultBase, getBranch } from "../git.js";
|
|
5
|
+
function getCommitsOnBranch(base) {
|
|
6
|
+
try {
|
|
7
|
+
const log = execSync(`git log ${base}..HEAD --format=%H|%s`, { encoding: "utf-8" }).trim();
|
|
8
|
+
if (!log)
|
|
9
|
+
return [];
|
|
10
|
+
return log.split("\n").map((line) => {
|
|
11
|
+
const [hash, ...rest] = line.split("|");
|
|
12
|
+
return { hash, message: rest.join("|") };
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export async function fixupCommand(options = {}) {
|
|
20
|
+
try {
|
|
21
|
+
const branch = getBranch();
|
|
22
|
+
const base = getDefaultBase(branch);
|
|
23
|
+
const commits = getCommitsOnBranch(base);
|
|
24
|
+
if (commits.length < 2) {
|
|
25
|
+
console.log("Need at least 2 commits on the branch to fixup.");
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Check for unstaged/staged changes
|
|
29
|
+
const staged = execSync("git diff --cached --name-only", { encoding: "utf-8" }).trim();
|
|
30
|
+
const unstaged = execSync("git diff --name-only", { encoding: "utf-8" }).trim();
|
|
31
|
+
const untracked = execSync("git ls-files --others --exclude-standard", { encoding: "utf-8" }).trim();
|
|
32
|
+
const hasChanges = staged || unstaged || untracked;
|
|
33
|
+
if (hasChanges) {
|
|
34
|
+
// Stage changes first
|
|
35
|
+
const allChanges = [
|
|
36
|
+
...unstaged.split("\n").filter(Boolean).map((f) => ({ file: f, label: `M ${f}` })),
|
|
37
|
+
...untracked.split("\n").filter(Boolean).map((f) => ({ file: f, label: `? ${f}` })),
|
|
38
|
+
];
|
|
39
|
+
if (!staged && allChanges.length > 0) {
|
|
40
|
+
const filesToStage = await checkbox({
|
|
41
|
+
message: "Select files to include in fixup:",
|
|
42
|
+
choices: [
|
|
43
|
+
{ value: "__ALL__", name: "Stage all" },
|
|
44
|
+
...allChanges.map((c) => ({ value: c.file, name: c.label })),
|
|
45
|
+
],
|
|
46
|
+
required: true,
|
|
47
|
+
});
|
|
48
|
+
if (!options.dryRun) {
|
|
49
|
+
if (filesToStage.includes("__ALL__")) {
|
|
50
|
+
execSync("git add -A");
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
for (const file of filesToStage) {
|
|
54
|
+
execSync(`git add ${JSON.stringify(file)}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
console.log(`\n${dim("───")} ${bold("Fixup Commit")} ${dim("───")}\n`);
|
|
61
|
+
console.log(`${dim("Branch commits (newest first):")}\n`);
|
|
62
|
+
const target = await select({
|
|
63
|
+
message: "Which commit should this fixup apply to?",
|
|
64
|
+
choices: commits.map((c) => ({
|
|
65
|
+
value: c.hash,
|
|
66
|
+
name: `${cyan(c.hash.slice(0, 7))} ${c.message}`,
|
|
67
|
+
})),
|
|
68
|
+
});
|
|
69
|
+
if (options.dryRun) {
|
|
70
|
+
const targetCommit = commits.find((c) => c.hash === target);
|
|
71
|
+
console.log(dim(`[dry-run] Would create fixup for: ${targetCommit?.message}`));
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Create fixup commit
|
|
75
|
+
execSync(`git commit --fixup=${target}`, { stdio: "inherit" });
|
|
76
|
+
console.log(green("✓ Fixup commit created."));
|
|
77
|
+
const autoSquash = await confirm({
|
|
78
|
+
message: "Auto-squash now? (interactive rebase)",
|
|
79
|
+
default: false,
|
|
80
|
+
});
|
|
81
|
+
if (autoSquash) {
|
|
82
|
+
execSync(`GIT_SEQUENCE_EDITOR=true git rebase -i --autosquash ${base}`, {
|
|
83
|
+
stdio: "inherit",
|
|
84
|
+
env: { ...process.env, GIT_SEQUENCE_EDITOR: "true" },
|
|
85
|
+
});
|
|
86
|
+
console.log(green("✓ Commits squashed."));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
console.log(dim("Run later: git rebase -i --autosquash " + base));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if (error.name === "ExitPromptError") {
|
|
94
|
+
console.log("\nCancelled.");
|
|
95
|
+
process.exit(0);
|
|
96
|
+
}
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=fixup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixup.js","sourceRoot":"","sources":["../../src/commands/fixup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtD,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,IAAI,uBAAuB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3F,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAgC,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,oCAAoC;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,+BAA+B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvF,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChF,MAAM,SAAS,GAAG,QAAQ,CAAC,0CAA0C,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAErG,MAAM,UAAU,GAAG,MAAM,IAAI,QAAQ,IAAI,SAAS,CAAC;QAEnD,IAAI,UAAU,EAAE,CAAC;YACf,sBAAsB;YACtB,MAAM,UAAU,GAAG;gBACjB,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnF,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;aACrF,CAAC;YAEF,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC;oBAClC,OAAO,EAAE,mCAAmC;oBAC5C,OAAO,EAAE;wBACP,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;wBACvC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;qBAC7D;oBACD,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACpB,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;wBACrC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACzB,CAAC;yBAAM,CAAC;wBACN,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;4BAChC,QAAQ,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAC9C,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC;QAE1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;YAC1B,OAAO,EAAE,0CAA0C;YACnD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,KAAK,EAAE,CAAC,CAAC,IAAI;gBACb,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;aACjD,CAAC,CAAC;SACJ,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qCAAqC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,QAAQ,CAAC,sBAAsB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAE9C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC;YAC/B,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,uDAAuD,IAAI,EAAE,EAAE;gBACtE,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE;aACrD,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wCAAwC,GAAG,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAAe,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA+BA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAqSjD"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,25 +1,31 @@
|
|
|
1
|
-
import { existsSync, writeFileSync } from "fs";
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
2
2
|
import { resolve } from "path";
|
|
3
3
|
import { confirm, input } from "@inquirer/prompts";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
4
|
+
import { execSync } from "child_process";
|
|
5
|
+
const DEFAULT_CHECKLIST = [
|
|
6
|
+
"Code follows project conventions",
|
|
7
|
+
"Self-reviewed the changes",
|
|
8
|
+
"No new warnings or errors introduced",
|
|
9
|
+
];
|
|
10
|
+
function readPackageJson(cwd) {
|
|
11
|
+
const pkgPath = resolve(cwd, "package.json");
|
|
12
|
+
if (!existsSync(pkgPath))
|
|
13
|
+
return undefined;
|
|
14
|
+
try {
|
|
15
|
+
return JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function writePackageJson(cwd, pkg) {
|
|
22
|
+
const pkgPath = resolve(cwd, "package.json");
|
|
23
|
+
writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
24
|
+
}
|
|
20
25
|
export async function initCommand() {
|
|
21
26
|
try {
|
|
22
|
-
const
|
|
27
|
+
const cwd = process.cwd();
|
|
28
|
+
const configPath = resolve(cwd, ".devflow.json");
|
|
23
29
|
if (existsSync(configPath)) {
|
|
24
30
|
const overwrite = await confirm({
|
|
25
31
|
message: ".devflow.json already exists. Overwrite?",
|
|
@@ -30,16 +36,248 @@ export async function initCommand() {
|
|
|
30
36
|
process.exit(0);
|
|
31
37
|
}
|
|
32
38
|
}
|
|
39
|
+
console.log("\n devflow setup\n");
|
|
40
|
+
// 1. Ticket base URL
|
|
33
41
|
const ticketBaseUrl = await input({
|
|
34
42
|
message: "Ticket base URL (e.g., https://github.com/org/repo/issues):",
|
|
35
43
|
});
|
|
44
|
+
// 2. Scopes
|
|
45
|
+
console.log("\nLet's define your project scopes for commits.");
|
|
46
|
+
console.log("Add scopes one at a time. Press Enter with empty name to finish.\n");
|
|
47
|
+
const scopes = [];
|
|
48
|
+
let addingScopes = true;
|
|
49
|
+
while (addingScopes) {
|
|
50
|
+
const value = await input({
|
|
51
|
+
message: `Scope name${scopes.length > 0 ? " (blank to finish)" : ""}:`,
|
|
52
|
+
});
|
|
53
|
+
if (!value.trim()) {
|
|
54
|
+
if (scopes.length === 0) {
|
|
55
|
+
const useDefaults = await confirm({
|
|
56
|
+
message: "No scopes added. Use defaults (core, ui, api, config, deps, ci)?",
|
|
57
|
+
default: true,
|
|
58
|
+
});
|
|
59
|
+
if (useDefaults) {
|
|
60
|
+
scopes.push({ value: "core", description: "Core functionality" }, { value: "ui", description: "UI components" }, { value: "api", description: "API layer" }, { value: "config", description: "Configuration" }, { value: "deps", description: "Dependencies" }, { value: "ci", description: "CI/CD" });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
addingScopes = false;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const description = await input({
|
|
67
|
+
message: `Description for "${value.trim()}":`,
|
|
68
|
+
});
|
|
69
|
+
scopes.push({
|
|
70
|
+
value: value.trim().toLowerCase(),
|
|
71
|
+
description: description.trim() || value.trim(),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// 3. Checklist
|
|
76
|
+
const customizeChecklist = await confirm({
|
|
77
|
+
message: "Customize PR checklist items?",
|
|
78
|
+
default: false,
|
|
79
|
+
});
|
|
80
|
+
let checklist = [...DEFAULT_CHECKLIST];
|
|
81
|
+
if (customizeChecklist) {
|
|
82
|
+
console.log("\nAdd checklist items one at a time. Press Enter with empty text to finish.\n");
|
|
83
|
+
checklist = [];
|
|
84
|
+
let addingChecklist = true;
|
|
85
|
+
while (addingChecklist) {
|
|
86
|
+
const item = await input({
|
|
87
|
+
message: `Checklist item${checklist.length > 0 ? " (blank to finish)" : ""}:`,
|
|
88
|
+
});
|
|
89
|
+
if (!item.trim()) {
|
|
90
|
+
if (checklist.length === 0) {
|
|
91
|
+
checklist = [...DEFAULT_CHECKLIST];
|
|
92
|
+
console.log("Using default checklist.");
|
|
93
|
+
}
|
|
94
|
+
addingChecklist = false;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
checklist.push(item.trim());
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Write .devflow.json
|
|
36
102
|
const config = {
|
|
37
|
-
|
|
38
|
-
|
|
103
|
+
scopes,
|
|
104
|
+
checklist,
|
|
39
105
|
};
|
|
106
|
+
if (ticketBaseUrl.trim()) {
|
|
107
|
+
config.ticketBaseUrl = ticketBaseUrl.trim();
|
|
108
|
+
}
|
|
40
109
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
41
|
-
console.log("Created .devflow.json");
|
|
42
|
-
|
|
110
|
+
console.log("\n✓ Created .devflow.json");
|
|
111
|
+
// 4. Add scripts to package.json
|
|
112
|
+
const pkg = readPackageJson(cwd);
|
|
113
|
+
if (pkg) {
|
|
114
|
+
const addScripts = await confirm({
|
|
115
|
+
message: "Add commit/branch/pr scripts to package.json?",
|
|
116
|
+
default: true,
|
|
117
|
+
});
|
|
118
|
+
if (addScripts) {
|
|
119
|
+
const scripts = (pkg.scripts || {});
|
|
120
|
+
scripts.commit = "devflow commit";
|
|
121
|
+
scripts.branch = "devflow branch";
|
|
122
|
+
scripts.pr = "devflow pr";
|
|
123
|
+
pkg.scripts = scripts;
|
|
124
|
+
writePackageJson(cwd, pkg);
|
|
125
|
+
console.log("✓ Added scripts to package.json");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 5. Commitlint setup
|
|
129
|
+
const setupCommitlint = await confirm({
|
|
130
|
+
message: "Set up commitlint for the devflow commit format?",
|
|
131
|
+
default: true,
|
|
132
|
+
});
|
|
133
|
+
if (setupCommitlint) {
|
|
134
|
+
const commitlintConfig = `module.exports = {
|
|
135
|
+
extends: ['@commitlint/config-conventional'],
|
|
136
|
+
parserPreset: {
|
|
137
|
+
parserOpts: {
|
|
138
|
+
headerPattern: /^(\\w+)\\[.*?\\]!?\\((.+)\\): (.+)$/,
|
|
139
|
+
headerCorrespondence: ['type', 'scope', 'subject'],
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
rules: {
|
|
143
|
+
'subject-case': [0],
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
`;
|
|
147
|
+
writeFileSync(resolve(cwd, "commitlint.config.js"), commitlintConfig);
|
|
148
|
+
console.log("✓ Created commitlint.config.js");
|
|
149
|
+
// Install commitlint deps
|
|
150
|
+
const installCommitlint = await confirm({
|
|
151
|
+
message: "Install @commitlint/cli and @commitlint/config-conventional?",
|
|
152
|
+
default: true,
|
|
153
|
+
});
|
|
154
|
+
if (installCommitlint) {
|
|
155
|
+
console.log("Installing commitlint...");
|
|
156
|
+
try {
|
|
157
|
+
execSync("npm install -D @commitlint/cli @commitlint/config-conventional", {
|
|
158
|
+
cwd,
|
|
159
|
+
stdio: "inherit",
|
|
160
|
+
});
|
|
161
|
+
console.log("✓ Installed commitlint");
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
console.log("⚠ Failed to install commitlint. Run manually:");
|
|
165
|
+
console.log(" npm install -D @commitlint/cli @commitlint/config-conventional");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// 6. Husky setup
|
|
170
|
+
const setupHusky = await confirm({
|
|
171
|
+
message: "Set up husky with a commit-msg hook?",
|
|
172
|
+
default: true,
|
|
173
|
+
});
|
|
174
|
+
if (setupHusky) {
|
|
175
|
+
// Install husky
|
|
176
|
+
const installHusky = await confirm({
|
|
177
|
+
message: "Install husky?",
|
|
178
|
+
default: true,
|
|
179
|
+
});
|
|
180
|
+
if (installHusky) {
|
|
181
|
+
console.log("Installing husky...");
|
|
182
|
+
try {
|
|
183
|
+
execSync("npm install -D husky", { cwd, stdio: "inherit" });
|
|
184
|
+
execSync("npx husky init", { cwd, stdio: "inherit" });
|
|
185
|
+
console.log("✓ Installed and initialized husky");
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
console.log("⚠ Failed to install husky. Run manually:");
|
|
189
|
+
console.log(" npm install -D husky && npx husky init");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Create commit-msg hook
|
|
193
|
+
const huskyDir = resolve(cwd, ".husky");
|
|
194
|
+
if (!existsSync(huskyDir)) {
|
|
195
|
+
mkdirSync(huskyDir, { recursive: true });
|
|
196
|
+
}
|
|
197
|
+
const commitMsgHook = `npx --no -- commitlint --edit $1 || {
|
|
198
|
+
echo ""
|
|
199
|
+
echo " Commit message does not follow the required format."
|
|
200
|
+
echo " Use: npm run commit"
|
|
201
|
+
echo ""
|
|
202
|
+
exit 1
|
|
203
|
+
}
|
|
204
|
+
`;
|
|
205
|
+
writeFileSync(resolve(huskyDir, "commit-msg"), commitMsgHook);
|
|
206
|
+
console.log("✓ Created .husky/commit-msg hook");
|
|
207
|
+
// Pre-push hook
|
|
208
|
+
const addPrePush = await confirm({
|
|
209
|
+
message: "Add pre-push hook (lint + typecheck)?",
|
|
210
|
+
default: true,
|
|
211
|
+
});
|
|
212
|
+
if (addPrePush) {
|
|
213
|
+
const prePushHook = `npm run lint
|
|
214
|
+
npx tsc --noEmit
|
|
215
|
+
`;
|
|
216
|
+
writeFileSync(resolve(huskyDir, "pre-push"), prePushHook);
|
|
217
|
+
console.log("✓ Created .husky/pre-push hook");
|
|
218
|
+
}
|
|
219
|
+
// Add prepare script
|
|
220
|
+
const updatedPkg = readPackageJson(cwd);
|
|
221
|
+
if (updatedPkg) {
|
|
222
|
+
const scripts = (updatedPkg.scripts || {});
|
|
223
|
+
if (!scripts.prepare) {
|
|
224
|
+
scripts.prepare = "husky";
|
|
225
|
+
updatedPkg.scripts = scripts;
|
|
226
|
+
writePackageJson(cwd, updatedPkg);
|
|
227
|
+
console.log("✓ Added prepare script to package.json");
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// 7. CI workflow
|
|
232
|
+
const setupCi = await confirm({
|
|
233
|
+
message: "Generate a GitHub Actions CI workflow?",
|
|
234
|
+
default: false,
|
|
235
|
+
});
|
|
236
|
+
if (setupCi) {
|
|
237
|
+
const workflowDir = resolve(cwd, ".github/workflows");
|
|
238
|
+
if (!existsSync(workflowDir)) {
|
|
239
|
+
mkdirSync(workflowDir, { recursive: true });
|
|
240
|
+
}
|
|
241
|
+
const ciWorkflow = `name: CI
|
|
242
|
+
|
|
243
|
+
on:
|
|
244
|
+
pull_request:
|
|
245
|
+
branches: [main]
|
|
246
|
+
|
|
247
|
+
jobs:
|
|
248
|
+
ci:
|
|
249
|
+
runs-on: ubuntu-latest
|
|
250
|
+
steps:
|
|
251
|
+
- uses: actions/checkout@v4
|
|
252
|
+
|
|
253
|
+
- uses: actions/setup-node@v4
|
|
254
|
+
with:
|
|
255
|
+
node-version: 20
|
|
256
|
+
cache: npm
|
|
257
|
+
|
|
258
|
+
- run: npm ci
|
|
259
|
+
|
|
260
|
+
- name: Lint
|
|
261
|
+
run: npm run lint
|
|
262
|
+
|
|
263
|
+
- name: Type check
|
|
264
|
+
run: npx tsc --noEmit
|
|
265
|
+
|
|
266
|
+
- name: Test
|
|
267
|
+
run: npm test
|
|
268
|
+
`;
|
|
269
|
+
writeFileSync(resolve(workflowDir, "ci.yml"), ciWorkflow);
|
|
270
|
+
console.log("✓ Created .github/workflows/ci.yml");
|
|
271
|
+
}
|
|
272
|
+
// 8. Summary
|
|
273
|
+
console.log("\n Setup complete!\n");
|
|
274
|
+
console.log("Usage:");
|
|
275
|
+
console.log(" npm run branch Create a new branch");
|
|
276
|
+
console.log(" npm run commit Create a conventional commit");
|
|
277
|
+
console.log(" npm run pr Create or update a PR");
|
|
278
|
+
console.log(" devflow status Show branch and PR info");
|
|
279
|
+
console.log(" devflow doctor Verify setup");
|
|
280
|
+
console.log("");
|
|
43
281
|
}
|
|
44
282
|
catch (error) {
|
|
45
283
|
if (error.name === "ExitPromptError") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"AAkBA,wBAAsB,YAAY,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EpF"}
|