@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
package/dist/config.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from "fs";
|
|
2
2
|
import { resolve } from "path";
|
|
3
|
+
import { createRequire } from "module";
|
|
4
|
+
import { yellow } from "./colors.js";
|
|
5
|
+
import { detectMonorepo, workspacesToScopes } from "./monorepo.js";
|
|
6
|
+
const DEFAULT_PR_TEMPLATE = {
|
|
7
|
+
sections: ["summary", "ticket", "type", "screenshots", "testPlan", "checklist"],
|
|
8
|
+
screenshotsTable: true,
|
|
9
|
+
};
|
|
3
10
|
const DEFAULT_CONFIG = {
|
|
4
11
|
scopes: [],
|
|
5
12
|
branchTypes: ["feat", "fix", "chore", "refactor", "docs", "test", "release", "hotfix"],
|
|
@@ -20,24 +27,114 @@ const DEFAULT_CONFIG = {
|
|
|
20
27
|
"Self-reviewed the changes",
|
|
21
28
|
"No new warnings or errors introduced",
|
|
22
29
|
],
|
|
30
|
+
commitFormat: "{type}[{ticket}]{breaking}({scope}): {message}",
|
|
31
|
+
prTemplate: DEFAULT_PR_TEMPLATE,
|
|
23
32
|
};
|
|
33
|
+
export function validateConfig(raw) {
|
|
34
|
+
const warnings = [];
|
|
35
|
+
const validFields = [
|
|
36
|
+
"extends", "ticketBaseUrl", "scopes", "branchTypes", "commitTypes",
|
|
37
|
+
"checklist", "commitFormat", "prTemplate", "prReviewers",
|
|
38
|
+
];
|
|
39
|
+
for (const key of Object.keys(raw)) {
|
|
40
|
+
if (!validFields.includes(key)) {
|
|
41
|
+
warnings.push({ field: key, message: `Unknown field "${key}" will be ignored` });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (raw.scopes && Array.isArray(raw.scopes)) {
|
|
45
|
+
for (let i = 0; i < raw.scopes.length; i++) {
|
|
46
|
+
const scope = raw.scopes[i];
|
|
47
|
+
if (!scope.value) {
|
|
48
|
+
warnings.push({ field: `scopes[${i}]`, message: "Scope is missing required field \"value\"" });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (raw.commitFormat && typeof raw.commitFormat === "string") {
|
|
53
|
+
const format = raw.commitFormat;
|
|
54
|
+
if (!format.includes("{type}") || !format.includes("{message}")) {
|
|
55
|
+
warnings.push({ field: "commitFormat", message: "Format should include at least {type} and {message} placeholders" });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (raw.commitTypes && Array.isArray(raw.commitTypes)) {
|
|
59
|
+
for (let i = 0; i < raw.commitTypes.length; i++) {
|
|
60
|
+
const ct = raw.commitTypes[i];
|
|
61
|
+
if (!ct.value || !ct.label) {
|
|
62
|
+
warnings.push({ field: `commitTypes[${i}]`, message: "Commit type is missing \"value\" or \"label\"" });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return warnings;
|
|
67
|
+
}
|
|
68
|
+
function resolveExtends(extendsPath, cwd) {
|
|
69
|
+
try {
|
|
70
|
+
// Try as npm package first
|
|
71
|
+
const require = createRequire(resolve(cwd, "package.json"));
|
|
72
|
+
const resolved = require.resolve(extendsPath);
|
|
73
|
+
return JSON.parse(readFileSync(resolved, "utf-8"));
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Try as relative path
|
|
77
|
+
const absPath = resolve(cwd, extendsPath);
|
|
78
|
+
if (existsSync(absPath)) {
|
|
79
|
+
return JSON.parse(readFileSync(absPath, "utf-8"));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
console.error(yellow(`⚠ Could not resolve extends: "${extendsPath}"`));
|
|
83
|
+
return {};
|
|
84
|
+
}
|
|
85
|
+
function mergeConfigs(base, override) {
|
|
86
|
+
const result = { ...base };
|
|
87
|
+
for (const [key, value] of Object.entries(override)) {
|
|
88
|
+
if (key === "extends")
|
|
89
|
+
continue;
|
|
90
|
+
result[key] = value;
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
24
94
|
export function loadConfig(cwd = process.cwd()) {
|
|
25
95
|
const configPath = resolve(cwd, ".devflow.json");
|
|
26
96
|
if (!existsSync(configPath)) {
|
|
97
|
+
// Even without config, detect monorepo workspaces as scopes
|
|
98
|
+
const mono = detectMonorepo(cwd);
|
|
99
|
+
if (mono) {
|
|
100
|
+
return { ...DEFAULT_CONFIG, scopes: workspacesToScopes(mono) };
|
|
101
|
+
}
|
|
27
102
|
return DEFAULT_CONFIG;
|
|
28
103
|
}
|
|
29
104
|
try {
|
|
30
|
-
|
|
105
|
+
let raw = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
106
|
+
// Handle extends
|
|
107
|
+
if (raw.extends) {
|
|
108
|
+
const base = resolveExtends(raw.extends, cwd);
|
|
109
|
+
raw = mergeConfigs(base, raw);
|
|
110
|
+
}
|
|
111
|
+
const warnings = validateConfig(raw);
|
|
112
|
+
if (warnings.length > 0) {
|
|
113
|
+
for (const w of warnings) {
|
|
114
|
+
console.error(yellow(`⚠ .devflow.json: ${w.message}`));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Auto-discover scopes from monorepo workspaces if none configured
|
|
118
|
+
let scopes = raw.scopes ?? DEFAULT_CONFIG.scopes;
|
|
119
|
+
if ((!scopes || scopes.length === 0) && !raw.scopes) {
|
|
120
|
+
const mono = detectMonorepo(cwd);
|
|
121
|
+
if (mono) {
|
|
122
|
+
scopes = workspacesToScopes(mono);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
31
125
|
return {
|
|
32
126
|
ticketBaseUrl: raw.ticketBaseUrl ?? DEFAULT_CONFIG.ticketBaseUrl,
|
|
33
|
-
scopes
|
|
127
|
+
scopes,
|
|
34
128
|
branchTypes: raw.branchTypes ?? DEFAULT_CONFIG.branchTypes,
|
|
35
129
|
commitTypes: raw.commitTypes ?? DEFAULT_CONFIG.commitTypes,
|
|
36
130
|
checklist: raw.checklist ?? DEFAULT_CONFIG.checklist,
|
|
131
|
+
commitFormat: raw.commitFormat ?? DEFAULT_CONFIG.commitFormat,
|
|
132
|
+
prTemplate: raw.prTemplate ?? DEFAULT_CONFIG.prTemplate,
|
|
133
|
+
prReviewers: raw.prReviewers,
|
|
37
134
|
};
|
|
38
135
|
}
|
|
39
136
|
catch {
|
|
40
|
-
console.error("
|
|
137
|
+
console.error(yellow("⚠ Failed to parse .devflow.json, using defaults."));
|
|
41
138
|
return DEFAULT_CONFIG;
|
|
42
139
|
}
|
|
43
140
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/git.d.ts
CHANGED
|
@@ -14,4 +14,5 @@ export declare function getCommits(base: string): string[];
|
|
|
14
14
|
export declare function getScopesFromCommits(commits: string[]): string[];
|
|
15
15
|
export declare function getDefaultBase(currentBranch: string): string;
|
|
16
16
|
export declare function checkGhInstalled(): void;
|
|
17
|
+
export declare function isProtectedBranch(branch?: string): boolean;
|
|
17
18
|
//# sourceMappingURL=git.d.ts.map
|
package/dist/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM;;;;;;;;EAIzC;AAED,wBAAgB,WAAW,IAAI,MAAM,CASpC;AAED,wBAAgB,UAAU,IAAI,MAAM,GAAG,SAAS,CAe/C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAOjD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAOhE;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAiC5D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAG1D"}
|
package/dist/git.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { execSync } from "child_process";
|
|
2
|
+
const PROTECTED_BRANCHES = ["main", "master", "develop", "production"];
|
|
2
3
|
export function getBranch() {
|
|
3
4
|
return execSync("git branch --show-current", { encoding: "utf-8" }).trim();
|
|
4
5
|
}
|
|
@@ -101,4 +102,8 @@ export function checkGhInstalled() {
|
|
|
101
102
|
process.exit(1);
|
|
102
103
|
}
|
|
103
104
|
}
|
|
105
|
+
export function isProtectedBranch(branch) {
|
|
106
|
+
const current = branch || getBranch();
|
|
107
|
+
return PROTECTED_BRANCHES.includes(current);
|
|
108
|
+
}
|
|
104
109
|
//# sourceMappingURL=git.js.map
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,UAAU,SAAS;IACvB,OAAO,QAAQ,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC/C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,gCAAgC,EAAE;YACrD,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACrD,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,IAAI,oBAAoB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxF,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAiB;IACpD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,aAAqB;IAClD,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;aACpE,IAAI,EAAE;aACN,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC;QAE/E,IAAI,OAAO,GAAG,MAAM,CAAC;QACrB,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAExB,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,QAAQ,CAAC,uBAAuB,MAAM,EAAE,EAAE;oBAC1D,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,QAAQ,CAAC,wBAAwB,SAAS,QAAQ,EAAE;oBAChE,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClC,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;oBACrB,QAAQ,GAAG,KAAK,CAAC;oBACjB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uCAAuC;YACzC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC;QACH,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,26 +4,166 @@ import { branchCommand } from "./commands/branch.js";
|
|
|
4
4
|
import { commitCommand } from "./commands/commit.js";
|
|
5
5
|
import { prCommand } from "./commands/pr.js";
|
|
6
6
|
import { initCommand } from "./commands/init.js";
|
|
7
|
+
import { statusCommand } from "./commands/status.js";
|
|
8
|
+
import { amendCommand } from "./commands/amend.js";
|
|
9
|
+
import { cleanupCommand } from "./commands/cleanup.js";
|
|
10
|
+
import { changelogCommand } from "./commands/changelog.js";
|
|
11
|
+
import { doctorCommand } from "./commands/doctor.js";
|
|
12
|
+
import { undoCommand } from "./commands/undo.js";
|
|
13
|
+
import { mergeCommand } from "./commands/merge.js";
|
|
14
|
+
import { fixupCommand } from "./commands/fixup.js";
|
|
15
|
+
import { testPlanCommand } from "./commands/test-plan.js";
|
|
16
|
+
import { checkForUpdates } from "./update-notifier.js";
|
|
17
|
+
// Check for updates (non-blocking, cached)
|
|
18
|
+
checkForUpdates();
|
|
7
19
|
const program = new Command();
|
|
8
20
|
program
|
|
9
21
|
.name("devflow")
|
|
10
22
|
.description("Interactive CLI for branch creation, conventional commits, and PR management")
|
|
11
|
-
.version("0.
|
|
23
|
+
.version("0.3.0");
|
|
24
|
+
// --- Core commands ---
|
|
12
25
|
program
|
|
13
26
|
.command("branch")
|
|
27
|
+
.alias("b")
|
|
14
28
|
.description("Create a new branch with type/ticket/description format")
|
|
15
|
-
.
|
|
29
|
+
.option("--dry-run", "Preview without executing git commands")
|
|
30
|
+
.action((opts) => branchCommand(opts));
|
|
16
31
|
program
|
|
17
32
|
.command("commit")
|
|
33
|
+
.alias("c")
|
|
18
34
|
.description("Create a conventional commit with guided prompts")
|
|
19
|
-
.
|
|
35
|
+
.option("--dry-run", "Preview without executing git commands")
|
|
36
|
+
.action((opts) => commitCommand(opts));
|
|
20
37
|
program
|
|
21
38
|
.command("pr")
|
|
39
|
+
.alias("p")
|
|
22
40
|
.description("Create or update a pull request with auto-filled template")
|
|
23
|
-
.
|
|
41
|
+
.option("--dry-run", "Preview without executing git commands")
|
|
42
|
+
.action((opts) => prCommand(opts));
|
|
43
|
+
program
|
|
44
|
+
.command("amend")
|
|
45
|
+
.alias("a")
|
|
46
|
+
.description("Amend the last commit with guided prompts")
|
|
47
|
+
.option("--dry-run", "Preview without executing git commands")
|
|
48
|
+
.action((opts) => amendCommand(opts));
|
|
49
|
+
program
|
|
50
|
+
.command("undo")
|
|
51
|
+
.alias("u")
|
|
52
|
+
.description("Undo the last commit (keeps changes staged)")
|
|
53
|
+
.option("--dry-run", "Preview without executing git commands")
|
|
54
|
+
.action((opts) => undoCommand(opts));
|
|
55
|
+
program
|
|
56
|
+
.command("fixup")
|
|
57
|
+
.alias("f")
|
|
58
|
+
.description("Create a fixup commit targeting a previous commit")
|
|
59
|
+
.option("--dry-run", "Preview without executing git commands")
|
|
60
|
+
.action((opts) => fixupCommand(opts));
|
|
61
|
+
program
|
|
62
|
+
.command("merge")
|
|
63
|
+
.alias("m")
|
|
64
|
+
.description("Merge the current branch PR with squash/merge/rebase")
|
|
65
|
+
.option("--dry-run", "Preview without executing git commands")
|
|
66
|
+
.action((opts) => mergeCommand(opts));
|
|
67
|
+
// --- Info commands ---
|
|
68
|
+
program
|
|
69
|
+
.command("status")
|
|
70
|
+
.alias("s")
|
|
71
|
+
.description("Show current branch, ticket, commits, and PR info")
|
|
72
|
+
.action(statusCommand);
|
|
73
|
+
program
|
|
74
|
+
.command("test-plan")
|
|
75
|
+
.alias("tp")
|
|
76
|
+
.description("View or edit the test plan for the current branch")
|
|
77
|
+
.action(testPlanCommand);
|
|
78
|
+
program
|
|
79
|
+
.command("changelog")
|
|
80
|
+
.description("Generate a changelog from conventional commits since last tag")
|
|
81
|
+
.option("--dry-run", "Preview without writing to file")
|
|
82
|
+
.action((opts) => changelogCommand(opts));
|
|
83
|
+
program
|
|
84
|
+
.command("cleanup")
|
|
85
|
+
.description("Delete local branches that have been merged or whose remote is gone")
|
|
86
|
+
.option("--dry-run", "Preview without deleting branches")
|
|
87
|
+
.action((opts) => cleanupCommand(opts));
|
|
88
|
+
// --- Setup commands ---
|
|
24
89
|
program
|
|
25
90
|
.command("init")
|
|
26
|
-
.description("Initialize a .devflow.json config
|
|
91
|
+
.description("Initialize a .devflow.json config and project setup")
|
|
27
92
|
.action(initCommand);
|
|
93
|
+
program
|
|
94
|
+
.command("doctor")
|
|
95
|
+
.description("Check that all devflow dependencies are properly configured")
|
|
96
|
+
.action(doctorCommand);
|
|
97
|
+
program
|
|
98
|
+
.command("completions")
|
|
99
|
+
.description("Output shell completion script")
|
|
100
|
+
.option("--shell <shell>", "Shell type (bash or zsh)", "zsh")
|
|
101
|
+
.action((opts) => {
|
|
102
|
+
if (opts.shell === "bash") {
|
|
103
|
+
console.log(generateBashCompletions());
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
console.log(generateZshCompletions());
|
|
107
|
+
}
|
|
108
|
+
});
|
|
28
109
|
program.parse();
|
|
110
|
+
function generateBashCompletions() {
|
|
111
|
+
return `# devflow bash completions
|
|
112
|
+
# Add to ~/.bashrc: eval "$(devflow completions --shell bash)"
|
|
113
|
+
_devflow_completions() {
|
|
114
|
+
local cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
115
|
+
local commands="branch commit pr amend undo fixup merge status test-plan changelog cleanup init doctor completions"
|
|
116
|
+
|
|
117
|
+
if [ "\${COMP_CWORD}" -eq 1 ]; then
|
|
118
|
+
COMPREPLY=($(compgen -W "\${commands}" -- "\${cur}"))
|
|
119
|
+
elif [ "\${COMP_CWORD}" -eq 2 ]; then
|
|
120
|
+
COMPREPLY=($(compgen -W "--dry-run --help" -- "\${cur}"))
|
|
121
|
+
fi
|
|
122
|
+
}
|
|
123
|
+
complete -F _devflow_completions devflow`;
|
|
124
|
+
}
|
|
125
|
+
function generateZshCompletions() {
|
|
126
|
+
return `# devflow zsh completions
|
|
127
|
+
# Add to ~/.zshrc: eval "$(devflow completions --shell zsh)"
|
|
128
|
+
_devflow() {
|
|
129
|
+
local -a commands
|
|
130
|
+
commands=(
|
|
131
|
+
'branch:Create a new branch (alias: b)'
|
|
132
|
+
'commit:Create a conventional commit (alias: c)'
|
|
133
|
+
'pr:Create or update a pull request (alias: p)'
|
|
134
|
+
'amend:Amend the last commit (alias: a)'
|
|
135
|
+
'undo:Undo the last commit (alias: u)'
|
|
136
|
+
'fixup:Create a fixup commit (alias: f)'
|
|
137
|
+
'merge:Merge the current PR (alias: m)'
|
|
138
|
+
'status:Show branch and PR info (alias: s)'
|
|
139
|
+
'test-plan:View or edit test plan (alias: tp)'
|
|
140
|
+
'changelog:Generate changelog from commits'
|
|
141
|
+
'cleanup:Delete merged local branches'
|
|
142
|
+
'init:Initialize devflow config'
|
|
143
|
+
'doctor:Check devflow dependencies'
|
|
144
|
+
'completions:Output shell completion script'
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
_arguments -C \\
|
|
148
|
+
'1: :->command' \\
|
|
149
|
+
'*::arg:->args'
|
|
150
|
+
|
|
151
|
+
case "\$state" in
|
|
152
|
+
command)
|
|
153
|
+
_describe 'command' commands
|
|
154
|
+
;;
|
|
155
|
+
args)
|
|
156
|
+
case "\${words[1]}" in
|
|
157
|
+
branch|commit|pr|amend|undo|fixup|merge|cleanup|changelog)
|
|
158
|
+
_arguments '--dry-run[Preview without executing]'
|
|
159
|
+
;;
|
|
160
|
+
completions)
|
|
161
|
+
_arguments '--shell[Shell type]:shell:(bash zsh)'
|
|
162
|
+
;;
|
|
163
|
+
esac
|
|
164
|
+
;;
|
|
165
|
+
esac
|
|
166
|
+
}
|
|
167
|
+
compdef _devflow devflow`;
|
|
168
|
+
}
|
|
29
169
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Scope } from "./config.js";
|
|
2
|
+
interface WorkspaceInfo {
|
|
3
|
+
type: "npm" | "pnpm" | "lerna" | "nx" | "turborepo";
|
|
4
|
+
packages: WorkspacePackage[];
|
|
5
|
+
}
|
|
6
|
+
interface WorkspacePackage {
|
|
7
|
+
name: string;
|
|
8
|
+
path: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function detectMonorepo(cwd?: string): WorkspaceInfo | undefined;
|
|
11
|
+
export declare function workspacesToScopes(info: WorkspaceInfo): Scope[];
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=monorepo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo.d.ts","sourceRoot":"","sources":["../src/monorepo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,UAAU,aAAa;IACrB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC;IACpD,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,aAAa,GAAG,SAAS,CA6ErF;AAwGD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,KAAK,EAAE,CAU/D"}
|
package/dist/monorepo.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync, statSync } from "fs";
|
|
2
|
+
import { resolve, basename, relative } from "path";
|
|
3
|
+
export function detectMonorepo(cwd = process.cwd()) {
|
|
4
|
+
// Check pnpm workspaces
|
|
5
|
+
const pnpmWorkspace = resolve(cwd, "pnpm-workspace.yaml");
|
|
6
|
+
if (existsSync(pnpmWorkspace)) {
|
|
7
|
+
const packages = parsePnpmWorkspaces(cwd, pnpmWorkspace);
|
|
8
|
+
if (packages.length > 0) {
|
|
9
|
+
return { type: "pnpm", packages };
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
// Check npm/yarn workspaces in package.json
|
|
13
|
+
const pkgPath = resolve(cwd, "package.json");
|
|
14
|
+
if (existsSync(pkgPath)) {
|
|
15
|
+
try {
|
|
16
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
17
|
+
if (pkg.workspaces) {
|
|
18
|
+
const patterns = Array.isArray(pkg.workspaces)
|
|
19
|
+
? pkg.workspaces
|
|
20
|
+
: pkg.workspaces.packages || [];
|
|
21
|
+
const packages = resolveWorkspacePatterns(cwd, patterns);
|
|
22
|
+
if (packages.length > 0) {
|
|
23
|
+
return { type: "npm", packages };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// ignore
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Check lerna.json
|
|
32
|
+
const lernaPath = resolve(cwd, "lerna.json");
|
|
33
|
+
if (existsSync(lernaPath)) {
|
|
34
|
+
try {
|
|
35
|
+
const lerna = JSON.parse(readFileSync(lernaPath, "utf-8"));
|
|
36
|
+
const patterns = lerna.packages || ["packages/*"];
|
|
37
|
+
const packages = resolveWorkspacePatterns(cwd, patterns);
|
|
38
|
+
if (packages.length > 0) {
|
|
39
|
+
return { type: "lerna", packages };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// ignore
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Check nx.json (Nx uses project.json in each package or nx.json at root)
|
|
47
|
+
const nxPath = resolve(cwd, "nx.json");
|
|
48
|
+
if (existsSync(nxPath)) {
|
|
49
|
+
const packages = discoverNxProjects(cwd);
|
|
50
|
+
if (packages.length > 0) {
|
|
51
|
+
return { type: "nx", packages };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Check turbo.json
|
|
55
|
+
const turboPath = resolve(cwd, "turbo.json");
|
|
56
|
+
if (existsSync(turboPath)) {
|
|
57
|
+
// Turborepo uses npm/pnpm/yarn workspaces, so check package.json workspaces
|
|
58
|
+
const pkgPath2 = resolve(cwd, "package.json");
|
|
59
|
+
if (existsSync(pkgPath2)) {
|
|
60
|
+
try {
|
|
61
|
+
const pkg = JSON.parse(readFileSync(pkgPath2, "utf-8"));
|
|
62
|
+
if (pkg.workspaces) {
|
|
63
|
+
const patterns = Array.isArray(pkg.workspaces)
|
|
64
|
+
? pkg.workspaces
|
|
65
|
+
: pkg.workspaces.packages || [];
|
|
66
|
+
const packages = resolveWorkspacePatterns(cwd, patterns);
|
|
67
|
+
if (packages.length > 0) {
|
|
68
|
+
return { type: "turborepo", packages };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// ignore
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
function parsePnpmWorkspaces(cwd, filePath) {
|
|
80
|
+
try {
|
|
81
|
+
const content = readFileSync(filePath, "utf-8");
|
|
82
|
+
// Simple YAML parsing for packages list
|
|
83
|
+
const patterns = [];
|
|
84
|
+
let inPackages = false;
|
|
85
|
+
for (const line of content.split("\n")) {
|
|
86
|
+
if (line.match(/^packages\s*:/)) {
|
|
87
|
+
inPackages = true;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (inPackages) {
|
|
91
|
+
const match = line.match(/^\s+-\s+['"]?(.+?)['"]?\s*$/);
|
|
92
|
+
if (match) {
|
|
93
|
+
patterns.push(match[1]);
|
|
94
|
+
}
|
|
95
|
+
else if (line.match(/^\S/) && line.trim()) {
|
|
96
|
+
break; // New top-level key
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return resolveWorkspacePatterns(cwd, patterns);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function resolveWorkspacePatterns(cwd, patterns) {
|
|
107
|
+
const packages = [];
|
|
108
|
+
for (const pattern of patterns) {
|
|
109
|
+
if (pattern.includes("*")) {
|
|
110
|
+
// Glob pattern like "packages/*" or "apps/*"
|
|
111
|
+
const parts = pattern.split("*");
|
|
112
|
+
const baseDir = resolve(cwd, parts[0]);
|
|
113
|
+
if (existsSync(baseDir) && statSync(baseDir).isDirectory()) {
|
|
114
|
+
for (const entry of readdirSync(baseDir)) {
|
|
115
|
+
const entryPath = resolve(baseDir, entry);
|
|
116
|
+
if (statSync(entryPath).isDirectory()) {
|
|
117
|
+
const pkgJsonPath = resolve(entryPath, "package.json");
|
|
118
|
+
if (existsSync(pkgJsonPath)) {
|
|
119
|
+
try {
|
|
120
|
+
const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
|
|
121
|
+
packages.push({
|
|
122
|
+
name: pkg.name || entry,
|
|
123
|
+
path: relative(cwd, entryPath),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
packages.push({ name: entry, path: relative(cwd, entryPath) });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
packages.push({ name: entry, path: relative(cwd, entryPath) });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
// Direct path
|
|
139
|
+
const dirPath = resolve(cwd, pattern);
|
|
140
|
+
if (existsSync(dirPath) && statSync(dirPath).isDirectory()) {
|
|
141
|
+
const pkgJsonPath = resolve(dirPath, "package.json");
|
|
142
|
+
const name = existsSync(pkgJsonPath)
|
|
143
|
+
? JSON.parse(readFileSync(pkgJsonPath, "utf-8")).name || basename(pattern)
|
|
144
|
+
: basename(pattern);
|
|
145
|
+
packages.push({ name, path: pattern });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return packages;
|
|
150
|
+
}
|
|
151
|
+
function discoverNxProjects(cwd) {
|
|
152
|
+
const packages = [];
|
|
153
|
+
// Look for project.json files in common locations
|
|
154
|
+
const searchDirs = ["packages", "apps", "libs"];
|
|
155
|
+
for (const dir of searchDirs) {
|
|
156
|
+
const dirPath = resolve(cwd, dir);
|
|
157
|
+
if (existsSync(dirPath) && statSync(dirPath).isDirectory()) {
|
|
158
|
+
for (const entry of readdirSync(dirPath)) {
|
|
159
|
+
const entryPath = resolve(dirPath, entry);
|
|
160
|
+
if (statSync(entryPath).isDirectory()) {
|
|
161
|
+
const projectJson = resolve(entryPath, "project.json");
|
|
162
|
+
if (existsSync(projectJson)) {
|
|
163
|
+
try {
|
|
164
|
+
const project = JSON.parse(readFileSync(projectJson, "utf-8"));
|
|
165
|
+
packages.push({
|
|
166
|
+
name: project.name || entry,
|
|
167
|
+
path: relative(cwd, entryPath),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
packages.push({ name: entry, path: relative(cwd, entryPath) });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return packages;
|
|
179
|
+
}
|
|
180
|
+
export function workspacesToScopes(info) {
|
|
181
|
+
return info.packages.map((pkg) => {
|
|
182
|
+
// Use the short package name (strip scope)
|
|
183
|
+
const shortName = pkg.name.replace(/^@[^/]+\//, "");
|
|
184
|
+
return {
|
|
185
|
+
value: shortName,
|
|
186
|
+
description: `Workspace: ${pkg.name}`,
|
|
187
|
+
paths: [`${pkg.path}/**`],
|
|
188
|
+
};
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=monorepo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo.js","sourceRoot":"","sources":["../src/monorepo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function getTestPlan(branch: string, cwd?: string): string[];
|
|
2
|
+
export declare function setTestPlan(branch: string, steps: string[], cwd?: string): void;
|
|
3
|
+
export declare function deleteTestPlan(branch: string, cwd?: string): void;
|
|
4
|
+
export declare function listTestPlans(cwd?: string): Record<string, string[]>;
|
|
5
|
+
//# sourceMappingURL=test-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-plan.d.ts","sourceRoot":"","sources":["../src/test-plan.ts"],"names":[],"mappings":"AAgCA,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAGlE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ/E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAEpE"}
|