pipecraft 0.0.0-releaseit
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/.claude/settings.local.json +35 -0
- package/.github/actions/calculate-version/action.yml +106 -0
- package/.github/actions/create-pr/action.yml +122 -0
- package/.github/actions/create-release/action.yml +74 -0
- package/.github/actions/create-tag/action.yml +94 -0
- package/.github/actions/detect-changes/action.yml +62 -0
- package/.github/actions/manage-branch/action.yml +113 -0
- package/.github/actions/promote-branch/action.yml +352 -0
- package/.github/example/workflows/job.analyze.code.yml +26 -0
- package/.github/example/workflows/job.analyze.docker.yml +32 -0
- package/.github/example/workflows/job.app.api.deploy.yml +127 -0
- package/.github/example/workflows/job.app.api.test.yml +102 -0
- package/.github/example/workflows/job.app.docs.deploy.yml +40 -0
- package/.github/example/workflows/job.app.docs.test.yml +50 -0
- package/.github/example/workflows/job.app.web.deploy.yml +96 -0
- package/.github/example/workflows/job.app.web.test.yml +49 -0
- package/.github/example/workflows/job.changes.yml +82 -0
- package/.github/example/workflows/job.create-pr.yml +96 -0
- package/.github/example/workflows/job.env-check.yml +43 -0
- package/.github/example/workflows/job.fast-forward.yml +103 -0
- package/.github/example/workflows/job.lint.yml +64 -0
- package/.github/example/workflows/job.pr-name.yml +70 -0
- package/.github/example/workflows/job.pr-squash-name.yml +27 -0
- package/.github/example/workflows/job.tag.yml +38 -0
- package/.github/example/workflows/job.version.yml +99 -0
- package/.github/example/workflows/lib.plugin-base.publish.yml +59 -0
- package/.github/example/workflows/pipe.yml +178 -0
- package/.github/example/workflows/scripts/fastforward.sh +51 -0
- package/.github/example/workflows/scripts/pipe-cleaner.sh +70 -0
- package/.github/scripts/fastforward.sh +51 -0
- package/.github/scripts/pipe-cleaner.sh +70 -0
- package/.github/workflows/pipeline.yml +220 -0
- package/.github/workflows/pr-title-check.yml +70 -0
- package/.github/workflows/publish.yml +39 -0
- package/.pipecraftrc.json +78 -0
- package/.release-it.cjs +71 -0
- package/PIPELINE_TESTING_PLAN.md +499 -0
- package/README.md +1101 -0
- package/TRUNK_FLOW_PLAN.md +401 -0
- package/assets/logo_banner.png +0 -0
- package/assets/logo_banner.webp +0 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +364 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/generators/init.tpl.d.ts +3 -0
- package/dist/generators/init.tpl.d.ts.map +1 -0
- package/dist/generators/init.tpl.js +117 -0
- package/dist/generators/init.tpl.js.map +1 -0
- package/dist/generators/workflows.tpl.d.ts +7 -0
- package/dist/generators/workflows.tpl.d.ts.map +1 -0
- package/dist/generators/workflows.tpl.js +73 -0
- package/dist/generators/workflows.tpl.js.map +1 -0
- package/dist/templates/actions/calculate-version.yml.tpl.d.ts +3 -0
- package/dist/templates/actions/calculate-version.yml.tpl.d.ts.map +1 -0
- package/dist/templates/actions/calculate-version.yml.tpl.js +122 -0
- package/dist/templates/actions/calculate-version.yml.tpl.js.map +1 -0
- package/dist/templates/actions/create-pr.yml.tpl.d.ts +3 -0
- package/dist/templates/actions/create-pr.yml.tpl.d.ts.map +1 -0
- package/dist/templates/actions/create-pr.yml.tpl.js +145 -0
- package/dist/templates/actions/create-pr.yml.tpl.js.map +1 -0
- package/dist/templates/actions/create-tag.yml.tpl.d.ts +3 -0
- package/dist/templates/actions/create-tag.yml.tpl.d.ts.map +1 -0
- package/dist/templates/actions/create-tag.yml.tpl.js +111 -0
- package/dist/templates/actions/create-tag.yml.tpl.js.map +1 -0
- package/dist/templates/actions/detect-changes.yml.tpl.d.ts +3 -0
- package/dist/templates/actions/detect-changes.yml.tpl.d.ts.map +1 -0
- package/dist/templates/actions/detect-changes.yml.tpl.js +79 -0
- package/dist/templates/actions/detect-changes.yml.tpl.js.map +1 -0
- package/dist/templates/actions/manage-branch.yml.tpl.d.ts +3 -0
- package/dist/templates/actions/manage-branch.yml.tpl.d.ts.map +1 -0
- package/dist/templates/actions/manage-branch.yml.tpl.js +130 -0
- package/dist/templates/actions/manage-branch.yml.tpl.js.map +1 -0
- package/dist/templates/actions/promote-branch.yml.tpl.d.ts +3 -0
- package/dist/templates/actions/promote-branch.yml.tpl.d.ts.map +1 -0
- package/dist/templates/actions/promote-branch.yml.tpl.js +362 -0
- package/dist/templates/actions/promote-branch.yml.tpl.js.map +1 -0
- package/dist/templates/workflows/pipeline-path-based.yml.tpl.d.ts +16 -0
- package/dist/templates/workflows/pipeline-path-based.yml.tpl.d.ts.map +1 -0
- package/dist/templates/workflows/pipeline-path-based.yml.tpl.js +652 -0
- package/dist/templates/workflows/pipeline-path-based.yml.tpl.js.map +1 -0
- package/dist/types/index.d.ts +63 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/ast-path-operations.d.ts +287 -0
- package/dist/utils/ast-path-operations.d.ts.map +1 -0
- package/dist/utils/ast-path-operations.js +419 -0
- package/dist/utils/ast-path-operations.js.map +1 -0
- package/dist/utils/config.d.ts +3 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +49 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/github-setup.d.ts +74 -0
- package/dist/utils/github-setup.d.ts.map +1 -0
- package/dist/utils/github-setup.js +418 -0
- package/dist/utils/github-setup.js.map +1 -0
- package/dist/utils/idempotency.d.ts +47 -0
- package/dist/utils/idempotency.d.ts.map +1 -0
- package/dist/utils/idempotency.js +176 -0
- package/dist/utils/idempotency.js.map +1 -0
- package/dist/utils/preflight.d.ts +55 -0
- package/dist/utils/preflight.d.ts.map +1 -0
- package/dist/utils/preflight.js +261 -0
- package/dist/utils/preflight.js.map +1 -0
- package/dist/utils/versioning.d.ts +41 -0
- package/dist/utils/versioning.d.ts.map +1 -0
- package/dist/utils/versioning.js +219 -0
- package/dist/utils/versioning.js.map +1 -0
- package/docs/USER_JOURNEY_ERRORS.md +352 -0
- package/eslint.config.js +77 -0
- package/examples/basic-config.json +41 -0
- package/examples/monorepo-config.json +49 -0
- package/examples/usage.md +289 -0
- package/package.json +58 -0
- package/scripts/debug-workflows.sh +339 -0
- package/scripts/parse-pipeline.js +29 -0
- package/scripts/test-job-order.cjs +140 -0
- package/scripts/validate-pipeline.cjs +379 -0
- package/scripts/verify-job-order.sh +30 -0
- package/src/cli/index.ts +414 -0
- package/src/generators/init.tpl.ts +126 -0
- package/src/generators/workflows.tpl.ts +80 -0
- package/src/templates/actions/calculate-version.yml.tpl.ts +124 -0
- package/src/templates/actions/create-pr.yml.tpl.ts +147 -0
- package/src/templates/actions/create-tag.yml.tpl.ts +112 -0
- package/src/templates/actions/detect-changes.yml.tpl.ts +87 -0
- package/src/templates/actions/manage-branch.yml.tpl.ts +132 -0
- package/src/templates/actions/promote-branch.yml.tpl.ts +364 -0
- package/src/templates/workflows/pipeline-path-based.yml.tpl.ts +706 -0
- package/src/types/index.ts +64 -0
- package/src/utils/README-ast-path-operations.md +390 -0
- package/src/utils/ast-path-operations.ts +581 -0
- package/src/utils/config.ts +64 -0
- package/src/utils/github-setup.ts +558 -0
- package/src/utils/idempotency.ts +215 -0
- package/src/utils/preflight.ts +306 -0
- package/src/utils/versioning.ts +244 -0
- package/tests/README.md +229 -0
- package/tests/TEST_STRUCTURE.md +256 -0
- package/tests/act/run-act-tests.sh +345 -0
- package/tests/debugging/debug-utils.ts +538 -0
- package/tests/debugging/debug-workflow.test.ts +339 -0
- package/tests/debugging/debug-workflows.sh +339 -0
- package/tests/debugging/iterative-debug.ts +652 -0
- package/tests/debugging/run-debug-tests.sh +431 -0
- package/tests/fixtures/basic-config.json +51 -0
- package/tests/fixtures/invalid-config.json +9 -0
- package/tests/fixtures/pipeline-generated.yml +235 -0
- package/tests/fixtures/pipeline-preserve-comments.yml +245 -0
- package/tests/fixtures/pipeline-user-modified.yml +245 -0
- package/tests/fixtures/test-config.json +58 -0
- package/tests/github-live/README.md +250 -0
- package/tests/github-local/JOB_WORKFLOW_TESTS.md +296 -0
- package/tests/github-local/README.md +240 -0
- package/tests/github-local/run-all-tests.sh +422 -0
- package/tests/github-local/test-job-workflows.sh +631 -0
- package/tests/github-local/test-pipeline-workflow.sh +440 -0
- package/tests/integration/generators.test.ts +578 -0
- package/tests/integration/path-based-template.test.ts +510 -0
- package/tests/integration/simple-path-based.test.ts +415 -0
- package/tests/setup.ts +56 -0
- package/tests/unit/ast-path-operations-extended.test.ts +302 -0
- package/tests/unit/cli.test.ts +541 -0
- package/tests/unit/config-extended.test.ts +412 -0
- package/tests/unit/config.test.ts +152 -0
- package/tests/unit/github-setup.test.ts +189 -0
- package/tests/unit/idempotency-isolated.test.ts +297 -0
- package/tests/unit/job-order.test.ts +157 -0
- package/tests/unit/pipeline-path-based.test.ts +511 -0
- package/tests/unit/validate-pipeline.test.ts +384 -0
- package/tests/unit/versioning-extended.test.ts +279 -0
- package/tests/unit/versioning.test.ts +241 -0
- package/tsconfig.debug.json +17 -0
- package/tsconfig.json +28 -0
- package/vitest.config.ts +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/utils/idempotency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-flight checks for PipeCraft commands
|
|
3
|
+
* Validates environment and prerequisites before executing commands
|
|
4
|
+
*/
|
|
5
|
+
export interface PreflightResult {
|
|
6
|
+
passed: boolean;
|
|
7
|
+
message: string;
|
|
8
|
+
suggestion?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PreflightChecks {
|
|
11
|
+
configExists: PreflightResult;
|
|
12
|
+
configValid: PreflightResult;
|
|
13
|
+
inGitRepo: PreflightResult;
|
|
14
|
+
hasGitRemote: PreflightResult;
|
|
15
|
+
canWriteGithubDir: PreflightResult;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check if config file exists using cosmiconfig
|
|
19
|
+
* Searches for .pipecraftrc.json, .pipecraftrc, or package.json pipecraft key
|
|
20
|
+
*/
|
|
21
|
+
export declare function checkConfigExists(): PreflightResult;
|
|
22
|
+
/**
|
|
23
|
+
* Check if config file is valid and has required fields
|
|
24
|
+
*/
|
|
25
|
+
export declare function checkConfigValid(): PreflightResult;
|
|
26
|
+
/**
|
|
27
|
+
* Check if current directory is a git repository
|
|
28
|
+
*/
|
|
29
|
+
export declare function checkInGitRepo(): PreflightResult;
|
|
30
|
+
/**
|
|
31
|
+
* Check if git remote is configured
|
|
32
|
+
*/
|
|
33
|
+
export declare function checkHasGitRemote(): PreflightResult;
|
|
34
|
+
/**
|
|
35
|
+
* Check if .github directory is writable
|
|
36
|
+
*/
|
|
37
|
+
export declare function checkCanWriteGithubDir(): PreflightResult;
|
|
38
|
+
/**
|
|
39
|
+
* Check Node.js version
|
|
40
|
+
*/
|
|
41
|
+
export declare function checkNodeVersion(minVersion?: string): PreflightResult;
|
|
42
|
+
/**
|
|
43
|
+
* Run all pre-flight checks for generate command
|
|
44
|
+
* Note: No longer needs configPath - uses cosmiconfig to search automatically
|
|
45
|
+
*/
|
|
46
|
+
export declare function runPreflightChecks(): PreflightChecks;
|
|
47
|
+
/**
|
|
48
|
+
* Format preflight results for display
|
|
49
|
+
*/
|
|
50
|
+
export declare function formatPreflightResults(checks: PreflightChecks): {
|
|
51
|
+
allPassed: boolean;
|
|
52
|
+
output: string;
|
|
53
|
+
nextSteps?: string[];
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,eAAe,CAAA;IAC7B,WAAW,EAAE,eAAe,CAAA;IAC5B,SAAS,EAAE,eAAe,CAAA;IAC1B,YAAY,EAAE,eAAe,CAAA;IAC7B,iBAAiB,EAAE,eAAe,CAAA;CACnC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,eAAe,CAgBnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,CAuDlD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,eAAe,CAkBhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,eAAe,CAgCnD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,CAyCxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,GAAE,MAAiB,GAAG,eAAe,CAkB/E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAQpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG;IAC/D,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,CAkCA"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-flight checks for PipeCraft commands
|
|
3
|
+
* Validates environment and prerequisites before executing commands
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, mkdirSync, writeFileSync, unlinkSync } from 'fs';
|
|
6
|
+
import { execSync } from 'child_process';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { cosmiconfigSync } from 'cosmiconfig';
|
|
9
|
+
/**
|
|
10
|
+
* Check if config file exists using cosmiconfig
|
|
11
|
+
* Searches for .pipecraftrc.json, .pipecraftrc, or package.json pipecraft key
|
|
12
|
+
*/
|
|
13
|
+
export function checkConfigExists() {
|
|
14
|
+
const explorer = cosmiconfigSync('pipecraft');
|
|
15
|
+
const result = explorer.search();
|
|
16
|
+
if (!result) {
|
|
17
|
+
return {
|
|
18
|
+
passed: false,
|
|
19
|
+
message: 'No PipeCraft configuration found',
|
|
20
|
+
suggestion: "Run 'pipecraft init' to create a configuration file"
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
passed: true,
|
|
25
|
+
message: `Configuration found: ${result.filepath}`
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if config file is valid and has required fields
|
|
30
|
+
*/
|
|
31
|
+
export function checkConfigValid() {
|
|
32
|
+
const explorer = cosmiconfigSync('pipecraft');
|
|
33
|
+
const result = explorer.search();
|
|
34
|
+
if (!result) {
|
|
35
|
+
return {
|
|
36
|
+
passed: false,
|
|
37
|
+
message: 'No configuration file found',
|
|
38
|
+
suggestion: "Run 'pipecraft init' first"
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const config = result.config;
|
|
43
|
+
// Check for required fields
|
|
44
|
+
const requiredFields = ['ciProvider', 'branchFlow', 'domains'];
|
|
45
|
+
const missingFields = requiredFields.filter(field => !(field in config));
|
|
46
|
+
if (missingFields.length > 0) {
|
|
47
|
+
return {
|
|
48
|
+
passed: false,
|
|
49
|
+
message: `Config is missing required fields: ${missingFields.join(', ')}`,
|
|
50
|
+
suggestion: "Run 'pipecraft init --force' to recreate config"
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// Check domains is not empty
|
|
54
|
+
if (!config.domains || Object.keys(config.domains).length === 0) {
|
|
55
|
+
return {
|
|
56
|
+
passed: false,
|
|
57
|
+
message: 'Config has no domains configured',
|
|
58
|
+
suggestion: "Add at least one domain to your config file"
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
passed: true,
|
|
63
|
+
message: 'Configuration is valid'
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
if (error instanceof SyntaxError) {
|
|
68
|
+
return {
|
|
69
|
+
passed: false,
|
|
70
|
+
message: `Invalid JSON in config file: ${error.message}`,
|
|
71
|
+
suggestion: 'Fix JSON syntax in your config file'
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
passed: false,
|
|
76
|
+
message: `Error reading config: ${error.message}`,
|
|
77
|
+
suggestion: 'Check file permissions for your config file'
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if current directory is a git repository
|
|
83
|
+
*/
|
|
84
|
+
export function checkInGitRepo() {
|
|
85
|
+
try {
|
|
86
|
+
execSync('git rev-parse --is-inside-work-tree', {
|
|
87
|
+
stdio: 'pipe',
|
|
88
|
+
encoding: 'utf8'
|
|
89
|
+
});
|
|
90
|
+
return {
|
|
91
|
+
passed: true,
|
|
92
|
+
message: 'Current directory is a git repository'
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
return {
|
|
97
|
+
passed: false,
|
|
98
|
+
message: 'Not in a git repository',
|
|
99
|
+
suggestion: "Initialize git: 'git init' or clone an existing repository"
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Check if git remote is configured
|
|
105
|
+
*/
|
|
106
|
+
export function checkHasGitRemote() {
|
|
107
|
+
try {
|
|
108
|
+
const remote = execSync('git remote get-url origin', {
|
|
109
|
+
stdio: 'pipe',
|
|
110
|
+
encoding: 'utf8'
|
|
111
|
+
}).trim();
|
|
112
|
+
if (!remote) {
|
|
113
|
+
return {
|
|
114
|
+
passed: false,
|
|
115
|
+
message: 'No git remote configured',
|
|
116
|
+
suggestion: "Add remote: 'git remote add origin <url>'"
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// Check if it's a GitHub remote
|
|
120
|
+
const isGitHub = remote.includes('github.com');
|
|
121
|
+
return {
|
|
122
|
+
passed: true,
|
|
123
|
+
message: `Git remote configured: ${remote}`,
|
|
124
|
+
suggestion: !isGitHub
|
|
125
|
+
? 'Note: PipeCraft is optimized for GitHub. GitLab support is experimental.'
|
|
126
|
+
: undefined
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
return {
|
|
131
|
+
passed: false,
|
|
132
|
+
message: 'No git remote named "origin"',
|
|
133
|
+
suggestion: "Add remote: 'git remote add origin <url>'"
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Check if .github directory is writable
|
|
139
|
+
*/
|
|
140
|
+
export function checkCanWriteGithubDir() {
|
|
141
|
+
const githubDir = '.github';
|
|
142
|
+
const workflowsDir = join(githubDir, 'workflows');
|
|
143
|
+
try {
|
|
144
|
+
if (!existsSync(githubDir)) {
|
|
145
|
+
// Try to create it
|
|
146
|
+
mkdirSync(githubDir, { recursive: true });
|
|
147
|
+
mkdirSync(workflowsDir, { recursive: true });
|
|
148
|
+
return {
|
|
149
|
+
passed: true,
|
|
150
|
+
message: 'Created .github/workflows directory'
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// Directory exists, check if writable
|
|
154
|
+
if (existsSync(workflowsDir)) {
|
|
155
|
+
// Try to write a test file
|
|
156
|
+
const testFile = join(workflowsDir, '.pipecraft-test');
|
|
157
|
+
writeFileSync(testFile, 'test');
|
|
158
|
+
unlinkSync(testFile);
|
|
159
|
+
return {
|
|
160
|
+
passed: true,
|
|
161
|
+
message: '.github/workflows directory is writable'
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
mkdirSync(workflowsDir, { recursive: true });
|
|
166
|
+
return {
|
|
167
|
+
passed: true,
|
|
168
|
+
message: 'Created .github/workflows directory'
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
return {
|
|
174
|
+
passed: false,
|
|
175
|
+
message: `Cannot write to .github directory: ${error.message}`,
|
|
176
|
+
suggestion: 'Check directory permissions'
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Check Node.js version
|
|
182
|
+
*/
|
|
183
|
+
export function checkNodeVersion(minVersion = '18.0.0') {
|
|
184
|
+
const currentVersion = process.version.slice(1); // Remove 'v' prefix
|
|
185
|
+
const [currentMajor] = currentVersion.split('.').map(Number);
|
|
186
|
+
const [minMajor] = minVersion.split('.').map(Number);
|
|
187
|
+
if (currentMajor < minMajor) {
|
|
188
|
+
return {
|
|
189
|
+
passed: false,
|
|
190
|
+
message: `Node.js ${currentVersion} is too old (minimum: ${minVersion})`,
|
|
191
|
+
suggestion: 'Update Node.js: https://nodejs.org'
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
passed: true,
|
|
196
|
+
message: `Node.js ${currentVersion} (>= ${minVersion})`
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Run all pre-flight checks for generate command
|
|
201
|
+
* Note: No longer needs configPath - uses cosmiconfig to search automatically
|
|
202
|
+
*/
|
|
203
|
+
export function runPreflightChecks() {
|
|
204
|
+
return {
|
|
205
|
+
configExists: checkConfigExists(),
|
|
206
|
+
configValid: checkConfigValid(),
|
|
207
|
+
inGitRepo: checkInGitRepo(),
|
|
208
|
+
hasGitRemote: checkHasGitRemote(),
|
|
209
|
+
canWriteGithubDir: checkCanWriteGithubDir()
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Format preflight results for display
|
|
214
|
+
*/
|
|
215
|
+
export function formatPreflightResults(checks) {
|
|
216
|
+
const results = [];
|
|
217
|
+
let allPassed = true;
|
|
218
|
+
for (const [key, result] of Object.entries(checks)) {
|
|
219
|
+
const icon = result.passed ? '✅' : '❌';
|
|
220
|
+
results.push(`${icon} ${result.message}`);
|
|
221
|
+
if (!result.passed) {
|
|
222
|
+
allPassed = false;
|
|
223
|
+
if (result.suggestion) {
|
|
224
|
+
results.push(` 💡 ${result.suggestion}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Provide next steps if all checks passed
|
|
229
|
+
const nextSteps = allPassed ? [
|
|
230
|
+
'Your environment is ready to generate workflows!',
|
|
231
|
+
'',
|
|
232
|
+
'Next steps:',
|
|
233
|
+
' 1. Validate the pipeline: pipecraft validate:pipeline',
|
|
234
|
+
' 2. Set up GitHub tokens: pipecraft setup-github --verify',
|
|
235
|
+
' 3. Commit the generated workflows: git add .github && git commit -m "chore: add workflows"',
|
|
236
|
+
' 4. Push to remote: git push origin ' + getCurrentBranch(),
|
|
237
|
+
'',
|
|
238
|
+
'⚠️ Important: Set up GitHub tokens (step 2) BEFORE pushing to ensure workflows run correctly!'
|
|
239
|
+
] : undefined;
|
|
240
|
+
return {
|
|
241
|
+
allPassed,
|
|
242
|
+
output: results.join('\n'),
|
|
243
|
+
nextSteps
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get current git branch name
|
|
248
|
+
*/
|
|
249
|
+
function getCurrentBranch() {
|
|
250
|
+
try {
|
|
251
|
+
const branch = execSync('git branch --show-current', {
|
|
252
|
+
stdio: 'pipe',
|
|
253
|
+
encoding: 'utf8'
|
|
254
|
+
}).trim();
|
|
255
|
+
return branch || 'main';
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
return 'main';
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { PipecraftConfig } from '../types/index.js';
|
|
2
|
+
export declare class VersionManager {
|
|
3
|
+
private config;
|
|
4
|
+
constructor(config: PipecraftConfig);
|
|
5
|
+
/**
|
|
6
|
+
* Generate release-it configuration
|
|
7
|
+
*/
|
|
8
|
+
generateReleaseItConfig(): string;
|
|
9
|
+
/**
|
|
10
|
+
* Generate commitlint configuration
|
|
11
|
+
*/
|
|
12
|
+
generateCommitlintConfig(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Generate husky configuration
|
|
15
|
+
*/
|
|
16
|
+
generateHuskyConfig(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Setup version management files
|
|
19
|
+
*/
|
|
20
|
+
setupVersionManagement(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Update package.json with version management scripts
|
|
23
|
+
*/
|
|
24
|
+
private updatePackageJsonScripts;
|
|
25
|
+
/**
|
|
26
|
+
* Check if conventional commits are being used
|
|
27
|
+
*/
|
|
28
|
+
validateConventionalCommits(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Get current version from git tags
|
|
31
|
+
*/
|
|
32
|
+
getCurrentVersion(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Calculate next version based on conventional commits
|
|
35
|
+
*/
|
|
36
|
+
calculateNextVersion(): {
|
|
37
|
+
version: string;
|
|
38
|
+
type: string;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=versioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/utils/versioning.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,eAAe;IAInC;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAuEjC;;OAEG;IACH,wBAAwB,IAAI,MAAM;IA8BlC;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAO7B;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAgC9B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;OAEG;IACH,2BAA2B,IAAI,OAAO;IActC;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAS3B;;OAEG;IACH,oBAAoB,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAuB1D"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
export class VersionManager {
|
|
5
|
+
config;
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Generate release-it configuration
|
|
11
|
+
*/
|
|
12
|
+
generateReleaseItConfig() {
|
|
13
|
+
const defaultConfig = {
|
|
14
|
+
git: {
|
|
15
|
+
requireCleanWorkingDir: false,
|
|
16
|
+
commit: false,
|
|
17
|
+
pushArgs: ["--tags"],
|
|
18
|
+
tagMatch: "v[0-9]*.[0-9]*.[0-9]*"
|
|
19
|
+
},
|
|
20
|
+
github: {
|
|
21
|
+
release: false
|
|
22
|
+
},
|
|
23
|
+
npm: {
|
|
24
|
+
ignoreVersion: true,
|
|
25
|
+
publish: false,
|
|
26
|
+
skipChecks: true
|
|
27
|
+
},
|
|
28
|
+
hooks: {
|
|
29
|
+
"after:release": "echo ${version} > .release-version"
|
|
30
|
+
},
|
|
31
|
+
plugins: {
|
|
32
|
+
"@release-it/conventional-changelog": {
|
|
33
|
+
whatBump: (commits, options) => {
|
|
34
|
+
const defaults = {
|
|
35
|
+
test: 'ignore',
|
|
36
|
+
build: 'ignore',
|
|
37
|
+
ci: 'patch',
|
|
38
|
+
docs: 'patch',
|
|
39
|
+
chore: 'minor',
|
|
40
|
+
style: 'patch',
|
|
41
|
+
fix: 'patch',
|
|
42
|
+
perf: 'patch',
|
|
43
|
+
refactor: 'patch',
|
|
44
|
+
feat: 'minor',
|
|
45
|
+
major: 'major',
|
|
46
|
+
};
|
|
47
|
+
// Merge with user-defined bump rules
|
|
48
|
+
const bumpRules = { ...defaults, ...this.config.versioning?.bumpRules };
|
|
49
|
+
let breakings = 0;
|
|
50
|
+
let features = 0;
|
|
51
|
+
let levelSet = ['major', 'minor', 'patch', 'ignore'];
|
|
52
|
+
// eslint-disable-next-line prefer-spread
|
|
53
|
+
let level = Math.min.apply(Math, commits.map(commit => {
|
|
54
|
+
let level = levelSet.indexOf(bumpRules[commit.type] || 'ignore');
|
|
55
|
+
level = level < 0 ? 3 : level;
|
|
56
|
+
if (commit.notes.length > 0) {
|
|
57
|
+
breakings += commit.notes.length;
|
|
58
|
+
}
|
|
59
|
+
if (commit.type === 'feat') {
|
|
60
|
+
features += 1;
|
|
61
|
+
}
|
|
62
|
+
return level;
|
|
63
|
+
}));
|
|
64
|
+
return {
|
|
65
|
+
level: level,
|
|
66
|
+
reason: breakings === 1
|
|
67
|
+
? `There is ${breakings} BREAKING CHANGE and ${features} features`
|
|
68
|
+
: `There are ${breakings} BREAKING CHANGES and ${features} features`
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
return `module.exports = ${JSON.stringify(defaultConfig, null, 2)}`;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Generate commitlint configuration
|
|
78
|
+
*/
|
|
79
|
+
generateCommitlintConfig() {
|
|
80
|
+
return `module.exports = {
|
|
81
|
+
extends: ['@commitlint/config-conventional'],
|
|
82
|
+
rules: {
|
|
83
|
+
'type-enum': [
|
|
84
|
+
2,
|
|
85
|
+
'always',
|
|
86
|
+
[
|
|
87
|
+
'feat',
|
|
88
|
+
'fix',
|
|
89
|
+
'docs',
|
|
90
|
+
'style',
|
|
91
|
+
'refactor',
|
|
92
|
+
'perf',
|
|
93
|
+
'test',
|
|
94
|
+
'build',
|
|
95
|
+
'ci',
|
|
96
|
+
'chore',
|
|
97
|
+
'revert'
|
|
98
|
+
]
|
|
99
|
+
],
|
|
100
|
+
'subject-case': [2, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']],
|
|
101
|
+
'subject-empty': [2, 'never'],
|
|
102
|
+
'subject-full-stop': [2, 'never', '.'],
|
|
103
|
+
'type-case': [2, 'always', 'lower-case'],
|
|
104
|
+
'type-empty': [2, 'never']
|
|
105
|
+
}
|
|
106
|
+
}`;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Generate husky configuration
|
|
110
|
+
*/
|
|
111
|
+
generateHuskyConfig() {
|
|
112
|
+
return `#!/usr/bin/env sh
|
|
113
|
+
. "$(dirname -- "$0")/_/husky.sh"
|
|
114
|
+
|
|
115
|
+
npx commitlint --edit $1`;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Setup version management files
|
|
119
|
+
*/
|
|
120
|
+
setupVersionManagement() {
|
|
121
|
+
if (!this.config.versioning?.enabled) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// Generate .release-it.cjs
|
|
125
|
+
const releaseItConfig = this.generateReleaseItConfig();
|
|
126
|
+
writeFileSync('.release-it.cjs', releaseItConfig);
|
|
127
|
+
// Generate commitlint.config.js
|
|
128
|
+
const commitlintConfig = this.generateCommitlintConfig();
|
|
129
|
+
writeFileSync('commitlint.config.js', commitlintConfig);
|
|
130
|
+
// Generate .husky/commit-msg
|
|
131
|
+
const huskyDir = '.husky';
|
|
132
|
+
if (!existsSync(huskyDir)) {
|
|
133
|
+
execSync('npx husky install', { stdio: 'inherit' });
|
|
134
|
+
// Ensure directory exists (in case husky install was mocked/failed)
|
|
135
|
+
if (!existsSync(huskyDir)) {
|
|
136
|
+
const { mkdirSync } = require('fs');
|
|
137
|
+
mkdirSync(huskyDir, { recursive: true });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
const commitMsgHook = this.generateHuskyConfig();
|
|
141
|
+
writeFileSync(join(huskyDir, 'commit-msg'), commitMsgHook);
|
|
142
|
+
execSync(`chmod +x ${join(huskyDir, 'commit-msg')}`);
|
|
143
|
+
// Update package.json scripts
|
|
144
|
+
this.updatePackageJsonScripts();
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Update package.json with version management scripts
|
|
148
|
+
*/
|
|
149
|
+
updatePackageJsonScripts() {
|
|
150
|
+
const packageJsonPath = 'package.json';
|
|
151
|
+
if (!existsSync(packageJsonPath)) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
155
|
+
packageJson.scripts = {
|
|
156
|
+
...packageJson.scripts,
|
|
157
|
+
'release': 'release-it',
|
|
158
|
+
'release:dry': 'release-it --dry-run',
|
|
159
|
+
'version:check': 'release-it --dry-run',
|
|
160
|
+
'changelog': 'conventional-changelog -p angular -i CHANGELOG.md -s',
|
|
161
|
+
'commit': 'git add . && git commit',
|
|
162
|
+
'prepare': 'husky install'
|
|
163
|
+
};
|
|
164
|
+
writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if conventional commits are being used
|
|
168
|
+
*/
|
|
169
|
+
validateConventionalCommits() {
|
|
170
|
+
try {
|
|
171
|
+
const result = execSync('git log --oneline -10', { encoding: 'utf8' });
|
|
172
|
+
const commits = result.split('\n').filter(line => line.trim());
|
|
173
|
+
// Check if commits follow conventional format
|
|
174
|
+
const conventionalPattern = /^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?: .+/;
|
|
175
|
+
return commits.every(commit => conventionalPattern.test(commit));
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get current version from git tags
|
|
183
|
+
*/
|
|
184
|
+
getCurrentVersion() {
|
|
185
|
+
try {
|
|
186
|
+
const result = execSync('git describe --tags --abbrev=0', { encoding: 'utf8' });
|
|
187
|
+
return result.trim().replace('v', '');
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
return '0.0.0';
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Calculate next version based on conventional commits
|
|
195
|
+
*/
|
|
196
|
+
calculateNextVersion() {
|
|
197
|
+
try {
|
|
198
|
+
const currentVersion = this.getCurrentVersion();
|
|
199
|
+
const result = execSync('npx release-it --dry-run --no-git.requireCleanWorkingDir', {
|
|
200
|
+
encoding: 'utf8',
|
|
201
|
+
stdio: 'pipe'
|
|
202
|
+
});
|
|
203
|
+
// Parse release-it output to get version info
|
|
204
|
+
const versionMatch = result.match(/version\s+(\d+\.\d+\.\d+)/);
|
|
205
|
+
const typeMatch = result.match(/bump\s+(\w+)/);
|
|
206
|
+
return {
|
|
207
|
+
version: versionMatch ? versionMatch[1] : currentVersion,
|
|
208
|
+
type: typeMatch ? typeMatch[1] : 'patch'
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
return {
|
|
213
|
+
version: this.getCurrentVersion(),
|
|
214
|
+
type: 'patch'
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=versioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../src/utils/versioning.ts"],"names":[],"mappings":"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"}
|