pipecraft 0.29.3 → 0.36.14
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/README.md +128 -54
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +68 -25
- package/dist/cli/index.js.map +1 -1
- package/dist/generators/init.tpl.d.ts +4 -4
- package/dist/generators/init.tpl.d.ts.map +1 -1
- package/dist/generators/init.tpl.js +214 -108
- package/dist/generators/init.tpl.js.map +1 -1
- package/dist/generators/workflows.tpl.d.ts +9 -9
- package/dist/generators/workflows.tpl.d.ts.map +1 -1
- package/dist/generators/workflows.tpl.js +33 -36
- package/dist/generators/workflows.tpl.js.map +1 -1
- package/dist/templates/actions/calculate-version.yml.tpl.d.ts +7 -4
- package/dist/templates/actions/calculate-version.yml.tpl.d.ts.map +1 -1
- package/dist/templates/actions/calculate-version.yml.tpl.js +49 -23
- package/dist/templates/actions/calculate-version.yml.tpl.js.map +1 -1
- package/dist/templates/actions/create-pr.yml.tpl.d.ts +5 -2
- package/dist/templates/actions/create-pr.yml.tpl.d.ts.map +1 -1
- package/dist/templates/actions/create-pr.yml.tpl.js +14 -8
- package/dist/templates/actions/create-pr.yml.tpl.js.map +1 -1
- package/dist/templates/actions/create-release.yml.tpl.d.ts +5 -2
- package/dist/templates/actions/create-release.yml.tpl.d.ts.map +1 -1
- package/dist/templates/actions/create-release.yml.tpl.js +16 -11
- package/dist/templates/actions/create-release.yml.tpl.js.map +1 -1
- package/dist/templates/actions/create-tag.yml.tpl.d.ts +5 -2
- package/dist/templates/actions/create-tag.yml.tpl.d.ts.map +1 -1
- package/dist/templates/actions/create-tag.yml.tpl.js +13 -9
- package/dist/templates/actions/create-tag.yml.tpl.js.map +1 -1
- package/dist/templates/actions/detect-changes.yml.tpl.d.ts +17 -51
- package/dist/templates/actions/detect-changes.yml.tpl.d.ts.map +1 -1
- package/dist/templates/actions/detect-changes.yml.tpl.js +130 -110
- package/dist/templates/actions/detect-changes.yml.tpl.js.map +1 -1
- package/dist/templates/actions/manage-branch.yml.tpl.d.ts +5 -2
- package/dist/templates/actions/manage-branch.yml.tpl.d.ts.map +1 -1
- package/dist/templates/actions/manage-branch.yml.tpl.js +13 -9
- package/dist/templates/actions/manage-branch.yml.tpl.js.map +1 -1
- package/dist/templates/actions/promote-branch.yml.tpl.d.ts +5 -2
- package/dist/templates/actions/promote-branch.yml.tpl.d.ts.map +1 -1
- package/dist/templates/actions/promote-branch.yml.tpl.js +39 -92
- package/dist/templates/actions/promote-branch.yml.tpl.js.map +1 -1
- package/dist/templates/release-it.cjs.tpl.d.ts +1 -1
- package/dist/templates/release-it.cjs.tpl.d.ts.map +1 -1
- package/dist/templates/release-it.cjs.tpl.js +38 -29
- package/dist/templates/release-it.cjs.tpl.js.map +1 -1
- package/dist/templates/workflows/enforce-pr-target.yml.tpl.d.ts +1 -1
- package/dist/templates/workflows/enforce-pr-target.yml.tpl.d.ts.map +1 -1
- package/dist/templates/workflows/enforce-pr-target.yml.tpl.js +2 -3
- package/dist/templates/workflows/enforce-pr-target.yml.tpl.js.map +1 -1
- package/dist/templates/workflows/pipeline.yml.tpl.d.ts +2 -2
- package/dist/templates/workflows/pipeline.yml.tpl.d.ts.map +1 -1
- package/dist/templates/workflows/pipeline.yml.tpl.js +337 -84
- package/dist/templates/workflows/pipeline.yml.tpl.js.map +1 -1
- package/dist/templates/workflows/pr-title-check.yml.tpl.d.ts +1 -1
- package/dist/templates/workflows/pr-title-check.yml.tpl.d.ts.map +1 -1
- package/dist/templates/workflows/pr-title-check.yml.tpl.js +101 -22
- package/dist/templates/workflows/pr-title-check.yml.tpl.js.map +1 -1
- package/dist/templates/workflows/shared/index.d.ts +4 -2
- package/dist/templates/workflows/shared/index.d.ts.map +1 -1
- package/dist/templates/workflows/shared/index.js +4 -2
- package/dist/templates/workflows/shared/index.js.map +1 -1
- package/dist/templates/workflows/shared/managed-workflow.d.ts +32 -0
- package/dist/templates/workflows/shared/managed-workflow.d.ts.map +1 -0
- package/dist/templates/workflows/shared/managed-workflow.js +51 -0
- package/dist/templates/workflows/shared/managed-workflow.js.map +1 -0
- package/dist/templates/workflows/shared/operations-changes.d.ts +13 -3
- package/dist/templates/workflows/shared/operations-changes.d.ts.map +1 -1
- package/dist/templates/workflows/shared/operations-changes.js +42 -16
- package/dist/templates/workflows/shared/operations-changes.js.map +1 -1
- package/dist/templates/workflows/shared/operations-domain-jobs.d.ts +18 -1
- package/dist/templates/workflows/shared/operations-domain-jobs.d.ts.map +1 -1
- package/dist/templates/workflows/shared/operations-domain-jobs.js +142 -17
- package/dist/templates/workflows/shared/operations-domain-jobs.js.map +1 -1
- package/dist/templates/workflows/shared/operations-gate.d.ts +6 -0
- package/dist/templates/workflows/shared/operations-gate.d.ts.map +1 -0
- package/dist/templates/workflows/shared/operations-gate.js +116 -0
- package/dist/templates/workflows/shared/operations-gate.js.map +1 -0
- package/dist/templates/workflows/shared/operations-header.d.ts +11 -1
- package/dist/templates/workflows/shared/operations-header.d.ts.map +1 -1
- package/dist/templates/workflows/shared/operations-header.js +66 -7
- package/dist/templates/workflows/shared/operations-header.js.map +1 -1
- package/dist/templates/workflows/shared/operations-tag-promote.d.ts +4 -3
- package/dist/templates/workflows/shared/operations-tag-promote.d.ts.map +1 -1
- package/dist/templates/workflows/shared/operations-tag-promote.js +144 -33
- package/dist/templates/workflows/shared/operations-tag-promote.js.map +1 -1
- package/dist/templates/workflows/shared/operations-version.d.ts +3 -2
- package/dist/templates/workflows/shared/operations-version.d.ts.map +1 -1
- package/dist/templates/workflows/shared/operations-version.js +17 -16
- package/dist/templates/workflows/shared/operations-version.js.map +1 -1
- package/dist/templates/yaml-format-utils.d.ts.map +1 -1
- package/dist/templates/yaml-format-utils.js +1 -5
- package/dist/templates/yaml-format-utils.js.map +1 -1
- package/dist/types/index.d.ts +65 -53
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/action-reference.d.ts +73 -0
- package/dist/utils/action-reference.d.ts.map +1 -0
- package/dist/utils/action-reference.js +120 -0
- package/dist/utils/action-reference.js.map +1 -0
- package/dist/utils/ast-path-operations.d.ts +3 -3
- package/dist/utils/ast-path-operations.d.ts.map +1 -1
- package/dist/utils/ast-path-operations.js +58 -17
- package/dist/utils/ast-path-operations.js.map +1 -1
- package/dist/utils/config.d.ts +16 -5
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +69 -12
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/github-setup.d.ts +7 -7
- package/dist/utils/github-setup.d.ts.map +1 -1
- package/dist/utils/github-setup.js +84 -63
- package/dist/utils/github-setup.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/messaging.d.ts +2 -2
- package/dist/utils/messaging.d.ts.map +1 -1
- package/dist/utils/messaging.js +12 -8
- package/dist/utils/messaging.js.map +1 -1
- package/dist/utils/preflight.d.ts +2 -2
- package/dist/utils/preflight.d.ts.map +1 -1
- package/dist/utils/preflight.js +43 -41
- package/dist/utils/preflight.js.map +1 -1
- package/dist/utils/versioning.d.ts +1 -1
- package/dist/utils/versioning.d.ts.map +1 -1
- package/dist/utils/versioning.js +10 -10
- package/dist/utils/versioning.js.map +1 -1
- package/dist/utils/workflow-semantics.d.ts +61 -0
- package/dist/utils/workflow-semantics.d.ts.map +1 -0
- package/dist/utils/workflow-semantics.js +230 -0
- package/dist/utils/workflow-semantics.js.map +1 -0
- package/package.json +12 -4
- package/src/generators/init.tpl.ts +275 -128
- package/src/generators/workflows.tpl.ts +54 -57
- package/dist/templates/actions/detect-changes-nx.yml.tpl.d.ts +0 -32
- package/dist/templates/actions/detect-changes-nx.yml.tpl.d.ts.map +0 -1
- package/dist/templates/actions/detect-changes-nx.yml.tpl.js +0 -227
- package/dist/templates/actions/detect-changes-nx.yml.tpl.js.map +0 -1
- package/dist/templates/workflows/pipeline-nx.yml.tpl.d.ts +0 -22
- package/dist/templates/workflows/pipeline-nx.yml.tpl.d.ts.map +0 -1
- package/dist/templates/workflows/pipeline-nx.yml.tpl.js +0 -196
- package/dist/templates/workflows/pipeline-nx.yml.tpl.js.map +0 -1
- package/dist/utils/idempotency.d.ts +0 -187
- package/dist/utils/idempotency.d.ts.map +0 -1
- package/dist/utils/idempotency.js +0 -304
- package/dist/utils/idempotency.js.map +0 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Reference Utilities
|
|
3
|
+
*
|
|
4
|
+
* Helper functions for generating action references in workflows based on
|
|
5
|
+
* the configured action source mode (embedded, marketplace, or repository).
|
|
6
|
+
*
|
|
7
|
+
* @module utils/action-reference
|
|
8
|
+
*/
|
|
9
|
+
import type { PipecraftConfig } from '../types/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Generate the action reference path based on configuration.
|
|
12
|
+
*
|
|
13
|
+
* @param actionName - Name of the action (e.g., 'detect-changes', 'create-tag')
|
|
14
|
+
* @param config - PipeCraft configuration
|
|
15
|
+
* @returns The action reference string to use in workflows
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // Embedded mode (default)
|
|
20
|
+
* getActionReference('detect-changes', { actionSourceMode: 'local' })
|
|
21
|
+
* // Returns: './.github/actions/detect-changes'
|
|
22
|
+
*
|
|
23
|
+
* // Marketplace mode
|
|
24
|
+
* getActionReference('detect-changes', {
|
|
25
|
+
* actionSourceMode: 'remote',
|
|
26
|
+
* actionVersion: 'v1.2.3'
|
|
27
|
+
* })
|
|
28
|
+
* // Returns: 'the-craftlab/pipecraft/actions/detect-changes@v1.2.3'
|
|
29
|
+
*
|
|
30
|
+
* // Repository mode (PipeCraft's own CI)
|
|
31
|
+
* getActionReference('detect-changes', { actionSourceMode: 'source' })
|
|
32
|
+
* // Returns: './actions/detect-changes'
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function getActionReference(actionName: string, config: Partial<PipecraftConfig>): string;
|
|
36
|
+
/**
|
|
37
|
+
* Get the output directory for action files during generation.
|
|
38
|
+
*
|
|
39
|
+
* @param config - PipeCraft configuration
|
|
40
|
+
* @returns Directory path where actions should be generated
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* getActionOutputDir({ actionSourceMode: 'local' })
|
|
45
|
+
* // Returns: '.github/actions'
|
|
46
|
+
*
|
|
47
|
+
* getActionOutputDir({ actionSourceMode: 'source' })
|
|
48
|
+
* // Returns: 'actions'
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function getActionOutputDir(config: Partial<PipecraftConfig>): string;
|
|
52
|
+
/**
|
|
53
|
+
* Check if actions should be generated locally.
|
|
54
|
+
*
|
|
55
|
+
* @param config - PipeCraft configuration
|
|
56
|
+
* @returns True if actions should be generated, false if using marketplace
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* shouldGenerateActions({ actionSourceMode: 'local' }) // true
|
|
61
|
+
* shouldGenerateActions({ actionSourceMode: 'remote' }) // false
|
|
62
|
+
* shouldGenerateActions({ actionSourceMode: 'source' }) // true
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function shouldGenerateActions(config: Partial<PipecraftConfig>): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Get human-readable description of the action source mode.
|
|
68
|
+
*
|
|
69
|
+
* @param config - PipeCraft configuration
|
|
70
|
+
* @returns Description string for logging/display
|
|
71
|
+
*/
|
|
72
|
+
export declare function getActionSourceDescription(config: Partial<PipecraftConfig>): string;
|
|
73
|
+
//# sourceMappingURL=action-reference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-reference.d.ts","sourceRoot":"","sources":["../../src/utils/action-reference.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,CAsB/F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,CAiB3E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAG/E;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,CAkBnF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Reference Utilities
|
|
3
|
+
*
|
|
4
|
+
* Helper functions for generating action references in workflows based on
|
|
5
|
+
* the configured action source mode (embedded, marketplace, or repository).
|
|
6
|
+
*
|
|
7
|
+
* @module utils/action-reference
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Generate the action reference path based on configuration.
|
|
11
|
+
*
|
|
12
|
+
* @param actionName - Name of the action (e.g., 'detect-changes', 'create-tag')
|
|
13
|
+
* @param config - PipeCraft configuration
|
|
14
|
+
* @returns The action reference string to use in workflows
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // Embedded mode (default)
|
|
19
|
+
* getActionReference('detect-changes', { actionSourceMode: 'local' })
|
|
20
|
+
* // Returns: './.github/actions/detect-changes'
|
|
21
|
+
*
|
|
22
|
+
* // Marketplace mode
|
|
23
|
+
* getActionReference('detect-changes', {
|
|
24
|
+
* actionSourceMode: 'remote',
|
|
25
|
+
* actionVersion: 'v1.2.3'
|
|
26
|
+
* })
|
|
27
|
+
* // Returns: 'the-craftlab/pipecraft/actions/detect-changes@v1.2.3'
|
|
28
|
+
*
|
|
29
|
+
* // Repository mode (PipeCraft's own CI)
|
|
30
|
+
* getActionReference('detect-changes', { actionSourceMode: 'source' })
|
|
31
|
+
* // Returns: './actions/detect-changes'
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function getActionReference(actionName, config) {
|
|
35
|
+
const mode = config.actionSourceMode || 'local';
|
|
36
|
+
switch (mode) {
|
|
37
|
+
case 'local':
|
|
38
|
+
// Default: Actions in .github/actions/ (user repos)
|
|
39
|
+
return `./.github/actions/${actionName}`;
|
|
40
|
+
case 'remote': {
|
|
41
|
+
// Reference published marketplace actions
|
|
42
|
+
const version = config.actionVersion || 'v1';
|
|
43
|
+
return `the-craftlab/pipecraft/actions/${actionName}@${version}`;
|
|
44
|
+
}
|
|
45
|
+
case 'source':
|
|
46
|
+
// Internal: Actions in /actions/ (PipeCraft repo only)
|
|
47
|
+
return `./actions/${actionName}`;
|
|
48
|
+
default:
|
|
49
|
+
// Fallback to local mode
|
|
50
|
+
return `./.github/actions/${actionName}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the output directory for action files during generation.
|
|
55
|
+
*
|
|
56
|
+
* @param config - PipeCraft configuration
|
|
57
|
+
* @returns Directory path where actions should be generated
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* getActionOutputDir({ actionSourceMode: 'local' })
|
|
62
|
+
* // Returns: '.github/actions'
|
|
63
|
+
*
|
|
64
|
+
* getActionOutputDir({ actionSourceMode: 'source' })
|
|
65
|
+
* // Returns: 'actions'
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export function getActionOutputDir(config) {
|
|
69
|
+
const mode = config.actionSourceMode || 'local';
|
|
70
|
+
switch (mode) {
|
|
71
|
+
case 'local':
|
|
72
|
+
return '.github/actions';
|
|
73
|
+
case 'remote':
|
|
74
|
+
// Don't generate actions locally in remote mode
|
|
75
|
+
return '';
|
|
76
|
+
case 'source':
|
|
77
|
+
return 'actions';
|
|
78
|
+
default:
|
|
79
|
+
return '.github/actions';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if actions should be generated locally.
|
|
84
|
+
*
|
|
85
|
+
* @param config - PipeCraft configuration
|
|
86
|
+
* @returns True if actions should be generated, false if using marketplace
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* shouldGenerateActions({ actionSourceMode: 'local' }) // true
|
|
91
|
+
* shouldGenerateActions({ actionSourceMode: 'remote' }) // false
|
|
92
|
+
* shouldGenerateActions({ actionSourceMode: 'source' }) // true
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export function shouldGenerateActions(config) {
|
|
96
|
+
const mode = config.actionSourceMode || 'local';
|
|
97
|
+
return mode !== 'remote';
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get human-readable description of the action source mode.
|
|
101
|
+
*
|
|
102
|
+
* @param config - PipeCraft configuration
|
|
103
|
+
* @returns Description string for logging/display
|
|
104
|
+
*/
|
|
105
|
+
export function getActionSourceDescription(config) {
|
|
106
|
+
const mode = config.actionSourceMode || 'local';
|
|
107
|
+
switch (mode) {
|
|
108
|
+
case 'local':
|
|
109
|
+
return 'Local actions (full control, in .github/actions/)';
|
|
110
|
+
case 'remote': {
|
|
111
|
+
const version = config.actionVersion || 'v1';
|
|
112
|
+
return `Marketplace actions (pinned to ${version})`;
|
|
113
|
+
}
|
|
114
|
+
case 'source':
|
|
115
|
+
return 'Repository actions (dogfooding /actions/ folder)';
|
|
116
|
+
default:
|
|
117
|
+
return 'Local actions (default mode)';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=action-reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-reference.js","sourceRoot":"","sources":["../../src/utils/action-reference.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,MAAgC;IACrF,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAA;IAE/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,oDAAoD;YACpD,OAAO,qBAAqB,UAAU,EAAE,CAAA;QAE1C,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,0CAA0C;YAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAA;YAC5C,OAAO,kCAAkC,UAAU,IAAI,OAAO,EAAE,CAAA;QAClE,CAAC;QAED,KAAK,QAAQ;YACX,uDAAuD;YACvD,OAAO,aAAa,UAAU,EAAE,CAAA;QAElC;YACE,yBAAyB;YACzB,OAAO,qBAAqB,UAAU,EAAE,CAAA;IAC5C,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAgC;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAA;IAE/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,iBAAiB,CAAA;QAE1B,KAAK,QAAQ;YACX,gDAAgD;YAChD,OAAO,EAAE,CAAA;QAEX,KAAK,QAAQ;YACX,OAAO,SAAS,CAAA;QAElB;YACE,OAAO,iBAAiB,CAAA;IAC5B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAgC;IACpE,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAA;IAC/C,OAAO,IAAI,KAAK,QAAQ,CAAA;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAgC;IACzE,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAA;IAE/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,mDAAmD,CAAA;QAE5D,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAA;YAC5C,OAAO,kCAAkC,OAAO,GAAG,CAAA;QACrD,CAAC;QAED,KAAK,QAAQ;YACX,OAAO,kDAAkD,CAAA;QAE3D;YACE,OAAO,8BAA8B,CAAA;IACzC,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type Node, YAMLMap } from 'yaml';
|
|
2
2
|
/**
|
|
3
3
|
* # AST Path Operations for YAML Manipulation
|
|
4
4
|
*
|
|
@@ -43,7 +43,7 @@ import { YAMLMap, Node } from 'yaml';
|
|
|
43
43
|
* value: createValueFromString(`
|
|
44
44
|
* runs-on: ubuntu-latest
|
|
45
45
|
* steps:
|
|
46
|
-
* - uses:
|
|
46
|
+
* - uses: ./actions/detect-changes
|
|
47
47
|
* with:
|
|
48
48
|
* baseRef: ${{ inputs.baseRef || 'main' }}
|
|
49
49
|
* `)
|
|
@@ -215,7 +215,7 @@ export declare function ensurePathAndApply(doc: YAMLMap, config: PathOperationCo
|
|
|
215
215
|
* value: createValueFromString(`
|
|
216
216
|
* runs-on: ubuntu-latest
|
|
217
217
|
* steps:
|
|
218
|
-
* - uses:
|
|
218
|
+
* - uses: ./actions/detect-changes
|
|
219
219
|
* `)
|
|
220
220
|
* }
|
|
221
221
|
* ]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-path-operations.d.ts","sourceRoot":"","sources":["../../src/utils/ast-path-operations.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ast-path-operations.d.ts","sourceRoot":"","sources":["../../src/utils/ast-path-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAoC,OAAO,EAAW,MAAM,MAAM,CAAA;AAEpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,CAAA;AAEtE;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,GAAG,EAAE,CAAA;AAEzE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,aAAa,CAAA;IACxB,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,EAChB,QAAQ,CAAC,EAAE,GAAG,EACd,aAAa,CAAC,EAAE,MAAM,EACtB,kBAAkB,CAAC,EAAE,OAAO,GAC3B,IAAI,CAiFN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAcpE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,CAAC,EAAE,GAAG,GACb,IAAI,CAmCN;AAkID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,mBAAmB,EAAE,EACjC,QAAQ,CAAC,EAAE,GAAG,GACb,IAAI,CAIN;AAED;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,CA+B7F;AAoCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAKlE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAErD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseDocument, stringify, YAMLMap, YAMLSeq
|
|
1
|
+
import { parseDocument, Scalar, stringify, YAMLMap, YAMLSeq } from 'yaml';
|
|
2
2
|
/**
|
|
3
3
|
* Set a value at a specific path in the YAML AST
|
|
4
4
|
*
|
|
@@ -55,11 +55,9 @@ export function setPathValue(doc, path, value, document, commentBefore, spaceBef
|
|
|
55
55
|
// For job keys, we create Scalar keys so we can add comments to the KEY later (in template code).
|
|
56
56
|
// For non-job paths with comments, we add comments to the VALUE node.
|
|
57
57
|
const isJobKey = pathParts.length === 2 && pathParts[0] === 'jobs';
|
|
58
|
-
// Check if key already exists
|
|
58
|
+
// Check if key already exists
|
|
59
59
|
const existingValue = current.get(finalKey);
|
|
60
|
-
|
|
61
|
-
current.delete(finalKey);
|
|
62
|
-
}
|
|
60
|
+
const keyExists = existingValue !== undefined;
|
|
63
61
|
if (isJobKey || commentBefore || spaceBeforeComment) {
|
|
64
62
|
// For job keys OR any field with comments/spacing: Create a Scalar key
|
|
65
63
|
// Comments and spacing should be attached to keys, not values, for proper YAML formatting
|
|
@@ -67,24 +65,34 @@ export function setPathValue(doc, path, value, document, commentBefore, spaceBef
|
|
|
67
65
|
if (commentBefore) {
|
|
68
66
|
;
|
|
69
67
|
scalarKey.commentBefore = commentBefore;
|
|
70
|
-
// For job keys, also add to value for backwards compatibility with tests
|
|
71
|
-
if (isJobKey && node) {
|
|
72
|
-
;
|
|
73
|
-
node.commentBefore = commentBefore;
|
|
74
|
-
}
|
|
75
68
|
}
|
|
76
69
|
if (spaceBeforeComment) {
|
|
77
70
|
;
|
|
78
71
|
scalarKey.spaceBefore = true;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
}
|
|
73
|
+
if (keyExists) {
|
|
74
|
+
// Update existing key in-place to preserve order
|
|
75
|
+
// Find the existing pair and update it
|
|
76
|
+
const pair = current.items.find((p) => {
|
|
77
|
+
const keyStr = p.key instanceof Scalar ? p.key.value : p.key;
|
|
78
|
+
return keyStr === finalKey;
|
|
79
|
+
});
|
|
80
|
+
if (pair) {
|
|
81
|
+
pair.key = scalarKey;
|
|
82
|
+
pair.value = node;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// Shouldn't happen, but fallback to add
|
|
86
|
+
current.add({ key: scalarKey, value: node });
|
|
82
87
|
}
|
|
83
88
|
}
|
|
84
|
-
|
|
89
|
+
else {
|
|
90
|
+
// Key doesn't exist, add it
|
|
91
|
+
current.add({ key: scalarKey, value: node });
|
|
92
|
+
}
|
|
85
93
|
}
|
|
86
94
|
else {
|
|
87
|
-
// Normal case: use the simple set() method which
|
|
95
|
+
// Normal case: use the simple set() method which updates in-place and preserves order
|
|
88
96
|
current.set(finalKey, node);
|
|
89
97
|
}
|
|
90
98
|
}
|
|
@@ -324,7 +332,7 @@ function createNode(value) {
|
|
|
324
332
|
* value: createValueFromString(`
|
|
325
333
|
* runs-on: ubuntu-latest
|
|
326
334
|
* steps:
|
|
327
|
-
* - uses:
|
|
335
|
+
* - uses: ./actions/detect-changes
|
|
328
336
|
* `)
|
|
329
337
|
* }
|
|
330
338
|
* ]
|
|
@@ -388,7 +396,40 @@ export function createValueFromString(yamlString, context, document) {
|
|
|
388
396
|
}
|
|
389
397
|
// Parse the YAML string and return the root content as a proper Node
|
|
390
398
|
const doc = parseDocument(processedString);
|
|
391
|
-
|
|
399
|
+
const contents = doc.contents;
|
|
400
|
+
// Set all maps and seqs to use block style (not flow/compact)
|
|
401
|
+
setBlockStyle(contents);
|
|
402
|
+
return contents;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Recursively set block style on all YAMLMap and YAMLSeq nodes
|
|
406
|
+
* This ensures proper YAML formatting instead of compact JSON-like flow style
|
|
407
|
+
*/
|
|
408
|
+
function setBlockStyle(node) {
|
|
409
|
+
if (node instanceof YAMLMap) {
|
|
410
|
+
node.flow = false;
|
|
411
|
+
for (const pair of node.items) {
|
|
412
|
+
if (pair.value) {
|
|
413
|
+
setBlockStyle(pair.value);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
else if (node instanceof YAMLSeq) {
|
|
418
|
+
// Check if this is a simple array (only scalar values)
|
|
419
|
+
const isSimpleArray = node.items.every(item => {
|
|
420
|
+
return (item instanceof Scalar ||
|
|
421
|
+
typeof item === 'string' ||
|
|
422
|
+
typeof item === 'number' ||
|
|
423
|
+
typeof item === 'boolean');
|
|
424
|
+
});
|
|
425
|
+
// Keep flow style (inline) for simple arrays, use block style for complex arrays
|
|
426
|
+
node.flow = isSimpleArray;
|
|
427
|
+
for (const item of node.items) {
|
|
428
|
+
if (item && typeof item === 'object' && !(item instanceof Scalar)) {
|
|
429
|
+
setBlockStyle(item);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
392
433
|
}
|
|
393
434
|
/**
|
|
394
435
|
* Create a YAML node from a JavaScript object
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-path-operations.js","sourceRoot":"","sources":["../../src/utils/ast-path-operations.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ast-path-operations.js","sourceRoot":"","sources":["../../src/utils/ast-path-operations.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This module provides functions to load and validate PipeCraft configuration files.
|
|
5
5
|
* It uses cosmiconfig to search for configuration in multiple locations:
|
|
6
|
+
* - .pipecraftrc (YAML or JSON, recommended)
|
|
6
7
|
* - .pipecraftrc.json
|
|
7
|
-
* - .pipecraftrc
|
|
8
|
+
* - .pipecraftrc.yaml
|
|
9
|
+
* - .pipecraftrc.yml
|
|
10
|
+
* - .pipecraftrc.js
|
|
8
11
|
* - pipecraft.config.js
|
|
9
12
|
* - package.json (pipecraft key)
|
|
10
13
|
*
|
|
@@ -13,16 +16,24 @@
|
|
|
13
16
|
*
|
|
14
17
|
* @module utils/config
|
|
15
18
|
*/
|
|
19
|
+
/**
|
|
20
|
+
* Reserved job names that cannot be used as domain names.
|
|
21
|
+
* These are managed by Pipecraft and would conflict with generated workflow jobs.
|
|
22
|
+
*/
|
|
23
|
+
export declare const RESERVED_JOB_NAMES: readonly ["version", "changes", "gate", "tag", "promote", "release"];
|
|
16
24
|
/**
|
|
17
25
|
* Load PipeCraft configuration from filesystem.
|
|
18
26
|
*
|
|
19
27
|
* Uses cosmiconfig to search for configuration files in standard locations.
|
|
20
28
|
* If no path is provided, searches the current directory and ancestors for
|
|
21
29
|
* configuration files in this order:
|
|
22
|
-
* 1. .pipecraftrc
|
|
23
|
-
* 2. .pipecraftrc
|
|
24
|
-
* 3.
|
|
25
|
-
* 4.
|
|
30
|
+
* 1. .pipecraftrc (YAML or JSON, recommended)
|
|
31
|
+
* 2. .pipecraftrc.json
|
|
32
|
+
* 3. .pipecraftrc.yaml
|
|
33
|
+
* 4. .pipecraftrc.yml
|
|
34
|
+
* 5. .pipecraftrc.js
|
|
35
|
+
* 6. pipecraft.config.js
|
|
36
|
+
* 7. package.json (pipecraft key)
|
|
26
37
|
*
|
|
27
38
|
* @param configPath - Optional explicit path to configuration file
|
|
28
39
|
* @returns Parsed configuration object
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,sEAOrB,CAAA;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,UAAU,GAAI,aAAa,MAAM,QAwB7C,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,YAgGzC,CAAA"}
|
package/dist/utils/config.js
CHANGED
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This module provides functions to load and validate PipeCraft configuration files.
|
|
5
5
|
* It uses cosmiconfig to search for configuration in multiple locations:
|
|
6
|
+
* - .pipecraftrc (YAML or JSON, recommended)
|
|
6
7
|
* - .pipecraftrc.json
|
|
7
|
-
* - .pipecraftrc
|
|
8
|
+
* - .pipecraftrc.yaml
|
|
9
|
+
* - .pipecraftrc.yml
|
|
10
|
+
* - .pipecraftrc.js
|
|
8
11
|
* - pipecraft.config.js
|
|
9
12
|
* - package.json (pipecraft key)
|
|
10
13
|
*
|
|
@@ -14,16 +17,31 @@
|
|
|
14
17
|
* @module utils/config
|
|
15
18
|
*/
|
|
16
19
|
import { cosmiconfigSync } from 'cosmiconfig';
|
|
20
|
+
/**
|
|
21
|
+
* Reserved job names that cannot be used as domain names.
|
|
22
|
+
* These are managed by Pipecraft and would conflict with generated workflow jobs.
|
|
23
|
+
*/
|
|
24
|
+
export const RESERVED_JOB_NAMES = [
|
|
25
|
+
'version',
|
|
26
|
+
'changes',
|
|
27
|
+
'gate',
|
|
28
|
+
'tag',
|
|
29
|
+
'promote',
|
|
30
|
+
'release'
|
|
31
|
+
];
|
|
17
32
|
/**
|
|
18
33
|
* Load PipeCraft configuration from filesystem.
|
|
19
34
|
*
|
|
20
35
|
* Uses cosmiconfig to search for configuration files in standard locations.
|
|
21
36
|
* If no path is provided, searches the current directory and ancestors for
|
|
22
37
|
* configuration files in this order:
|
|
23
|
-
* 1. .pipecraftrc
|
|
24
|
-
* 2. .pipecraftrc
|
|
25
|
-
* 3.
|
|
26
|
-
* 4.
|
|
38
|
+
* 1. .pipecraftrc (YAML or JSON, recommended)
|
|
39
|
+
* 2. .pipecraftrc.json
|
|
40
|
+
* 3. .pipecraftrc.yaml
|
|
41
|
+
* 4. .pipecraftrc.yml
|
|
42
|
+
* 5. .pipecraftrc.js
|
|
43
|
+
* 6. pipecraft.config.js
|
|
44
|
+
* 7. package.json (pipecraft key)
|
|
27
45
|
*
|
|
28
46
|
* @param configPath - Optional explicit path to configuration file
|
|
29
47
|
* @returns Parsed configuration object
|
|
@@ -39,10 +57,21 @@ import { cosmiconfigSync } from 'cosmiconfig';
|
|
|
39
57
|
* ```
|
|
40
58
|
*/
|
|
41
59
|
export const loadConfig = (configPath) => {
|
|
42
|
-
const explorer = cosmiconfigSync('pipecraft'
|
|
60
|
+
const explorer = cosmiconfigSync('pipecraft', {
|
|
61
|
+
searchPlaces: [
|
|
62
|
+
'.pipecraftrc',
|
|
63
|
+
'.pipecraftrc.json',
|
|
64
|
+
'.pipecraftrc.yaml',
|
|
65
|
+
'.pipecraftrc.yml',
|
|
66
|
+
'.pipecraftrc.js',
|
|
67
|
+
'pipecraft.config.js',
|
|
68
|
+
'package.json'
|
|
69
|
+
]
|
|
70
|
+
});
|
|
43
71
|
const result = configPath ? explorer.load(configPath) : explorer.search();
|
|
44
72
|
if (!result) {
|
|
45
|
-
throw new Error(`No configuration file found. Expected: ${configPath ||
|
|
73
|
+
throw new Error(`No configuration file found. Expected: ${configPath ||
|
|
74
|
+
'.pipecraftrc, .pipecraftrc.json, .pipecraftrc.yml, .pipecraftrc.yaml, or .pipecraftrc.js'}`);
|
|
46
75
|
}
|
|
47
76
|
return result.config;
|
|
48
77
|
};
|
|
@@ -72,7 +101,15 @@ export const loadConfig = (configPath) => {
|
|
|
72
101
|
*/
|
|
73
102
|
export const validateConfig = (config) => {
|
|
74
103
|
// Check for all required top-level fields
|
|
75
|
-
const requiredFields = [
|
|
104
|
+
const requiredFields = [
|
|
105
|
+
'ciProvider',
|
|
106
|
+
'mergeStrategy',
|
|
107
|
+
'requireConventionalCommits',
|
|
108
|
+
'initialBranch',
|
|
109
|
+
'finalBranch',
|
|
110
|
+
'branchFlow',
|
|
111
|
+
'domains'
|
|
112
|
+
];
|
|
76
113
|
for (const field of requiredFields) {
|
|
77
114
|
if (!(field in config)) {
|
|
78
115
|
throw new Error(`Missing required field: ${field}`);
|
|
@@ -86,15 +123,35 @@ export const validateConfig = (config) => {
|
|
|
86
123
|
if (!['fast-forward', 'merge'].includes(config.mergeStrategy)) {
|
|
87
124
|
throw new Error('mergeStrategy must be either "fast-forward" or "merge"');
|
|
88
125
|
}
|
|
89
|
-
// Validate branchFlow is a non-empty array
|
|
90
|
-
// (
|
|
91
|
-
if (!Array.isArray(config.branchFlow) || config.branchFlow.length <
|
|
92
|
-
throw new Error('branchFlow must be an array with at least
|
|
126
|
+
// Validate branchFlow is a non-empty array
|
|
127
|
+
// Single-branch workflows are valid (e.g., GitHub Actions, libraries that publish from main)
|
|
128
|
+
if (!Array.isArray(config.branchFlow) || config.branchFlow.length < 1) {
|
|
129
|
+
throw new Error('branchFlow must be an array with at least 1 branch');
|
|
130
|
+
}
|
|
131
|
+
// Validate initialBranch is first in branchFlow
|
|
132
|
+
if (config.branchFlow[0] !== config.initialBranch) {
|
|
133
|
+
throw new Error(`initialBranch "${config.initialBranch}" must be the first branch in branchFlow. ` +
|
|
134
|
+
`Got branchFlow: [${config.branchFlow.join(', ')}]`);
|
|
135
|
+
}
|
|
136
|
+
// Validate finalBranch is last in branchFlow
|
|
137
|
+
if (config.branchFlow[config.branchFlow.length - 1] !== config.finalBranch) {
|
|
138
|
+
throw new Error(`finalBranch "${config.finalBranch}" must be the last branch in branchFlow. ` +
|
|
139
|
+
`Got branchFlow: [${config.branchFlow.join(', ')}]`);
|
|
93
140
|
}
|
|
94
141
|
// Validate domains structure
|
|
95
142
|
if (typeof config.domains !== 'object') {
|
|
96
143
|
throw new Error('domains must be an object');
|
|
97
144
|
}
|
|
145
|
+
// Validate domain names don't conflict with reserved job names
|
|
146
|
+
const domainNames = Object.keys(config.domains);
|
|
147
|
+
for (const domainName of domainNames) {
|
|
148
|
+
const lowerName = domainName.toLowerCase();
|
|
149
|
+
if (RESERVED_JOB_NAMES.includes(lowerName)) {
|
|
150
|
+
throw new Error(`Domain name "${domainName}" is reserved and cannot be used. ` +
|
|
151
|
+
`Reserved names: ${RESERVED_JOB_NAMES.join(', ')}. ` +
|
|
152
|
+
`These names are used by Pipecraft-managed workflow jobs.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
98
155
|
// Validate each domain configuration
|
|
99
156
|
for (const [domainName, domainConfig] of Object.entries(config.domains)) {
|
|
100
157
|
if (!domainConfig || typeof domainConfig !== 'object') {
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* and settings for PipeCraft workflows to function properly, including:
|
|
16
16
|
* - Workflows can create pull requests
|
|
17
17
|
* - Merge commits always use PR titles (not individual commit messages)
|
|
18
|
-
* - Auto-merge is enabled based on .pipecraftrc
|
|
18
|
+
* - Auto-merge is enabled based on .pipecraftrc config
|
|
19
19
|
* - Branch protection is configured appropriately
|
|
20
20
|
* - Required status checks are enforced
|
|
21
21
|
*
|
|
@@ -26,18 +26,18 @@
|
|
|
26
26
|
* 1. **Repository-Level Setting** (`allow_auto_merge`):
|
|
27
27
|
* - Must be ON for auto-merge to be available at all
|
|
28
28
|
* - Controls whether the "Enable auto-merge" button appears on PRs
|
|
29
|
-
* - Configured by this module based on .pipecraftrc
|
|
29
|
+
* - Configured by this module based on .pipecraftrc
|
|
30
30
|
*
|
|
31
31
|
* 2. **Per-PR Activation**:
|
|
32
32
|
* - Must be explicitly enabled on each PR (via button, CLI, or API)
|
|
33
33
|
* - Pipecraft workflows automatically enable it for configured branches
|
|
34
|
-
* - Configured per-branch in .pipecraftrc
|
|
34
|
+
* - Configured per-branch in .pipecraftrc autoPromote setting
|
|
35
35
|
*
|
|
36
36
|
* Example config:
|
|
37
37
|
* ```json
|
|
38
38
|
* {
|
|
39
39
|
* "branchFlow": ["develop", "staging", "main"],
|
|
40
|
-
* "
|
|
40
|
+
* "autoPromote": {
|
|
41
41
|
* "staging": true, // Auto-merge PRs to staging
|
|
42
42
|
* "main": true // Auto-merge PRs to main
|
|
43
43
|
* }
|
|
@@ -332,17 +332,17 @@ export declare function getRequiredMergeCommitChanges(currentSettings: MergeComm
|
|
|
332
332
|
*/
|
|
333
333
|
export declare function promptMergeCommitChanges(currentSettings: MergeCommitSettings): Promise<MergeCommitSettings | null | 'declined'>;
|
|
334
334
|
/**
|
|
335
|
-
* Check if auto-merge should be enabled based on .pipecraftrc
|
|
335
|
+
* Check if auto-merge should be enabled based on .pipecraftrc config.
|
|
336
336
|
*
|
|
337
337
|
* Auto-merge should be enabled at the repository level if ANY branch
|
|
338
|
-
* has
|
|
338
|
+
* has autoPromote configured in the config file.
|
|
339
339
|
*/
|
|
340
340
|
export declare function shouldEnableAutoMerge(): boolean;
|
|
341
341
|
/**
|
|
342
342
|
* Get Pipecraft's recommended repository settings.
|
|
343
343
|
*
|
|
344
344
|
* These are the settings that work best with Pipecraft workflows:
|
|
345
|
-
* - Allow auto-merge: ON if any branch has
|
|
345
|
+
* - Allow auto-merge: ON if any branch has autoPromote in config, OFF otherwise
|
|
346
346
|
* - Always suggest updating PR branches: ON
|
|
347
347
|
* - Allow merge commits: OFF
|
|
348
348
|
* - Allow rebase merging: OFF
|