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
|
@@ -5,13 +5,76 @@
|
|
|
5
5
|
* These jobs are marked as 'preserve' so users can customize them.
|
|
6
6
|
*/
|
|
7
7
|
import { createValueFromString } from '../../../utils/ast-path-operations.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create placeholder job operations for domains with custom prefixes
|
|
10
|
+
*
|
|
11
|
+
* Generates jobs based on the `prefixes` field in domain config.
|
|
12
|
+
* For example, with domain 'core' and prefixes ['lint', 'build', 'test'],
|
|
13
|
+
* this creates: lint-core, build-core, test-core
|
|
14
|
+
*
|
|
15
|
+
* @param ctx Context with domain configurations
|
|
16
|
+
* @returns Array of path operations for all prefix-based jobs
|
|
17
|
+
*/
|
|
18
|
+
export function createPrefixedDomainJobOperations(ctx) {
|
|
19
|
+
const { domains } = ctx;
|
|
20
|
+
const operations = [];
|
|
21
|
+
// Group jobs by prefix to add section comments
|
|
22
|
+
const jobsByPrefix = {};
|
|
23
|
+
Object.keys(domains)
|
|
24
|
+
.sort()
|
|
25
|
+
.forEach(domain => {
|
|
26
|
+
const domainConfig = domains[domain];
|
|
27
|
+
// Only process domains with prefixes defined
|
|
28
|
+
if (domainConfig.prefixes && Array.isArray(domainConfig.prefixes)) {
|
|
29
|
+
domainConfig.prefixes.forEach((prefix) => {
|
|
30
|
+
if (!jobsByPrefix[prefix]) {
|
|
31
|
+
jobsByPrefix[prefix] = [];
|
|
32
|
+
}
|
|
33
|
+
jobsByPrefix[prefix].push({
|
|
34
|
+
domain,
|
|
35
|
+
jobName: `${prefix}-${domain}`
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
// Generate operations for each prefix group
|
|
41
|
+
Object.keys(jobsByPrefix)
|
|
42
|
+
.sort()
|
|
43
|
+
.forEach(prefix => {
|
|
44
|
+
const jobs = jobsByPrefix[prefix];
|
|
45
|
+
jobs.forEach((job, index) => {
|
|
46
|
+
operations.push({
|
|
47
|
+
path: `jobs.${job.jobName}`,
|
|
48
|
+
operation: 'preserve', // User can customize these jobs - won't overwrite if exists
|
|
49
|
+
value: createValueFromString(`
|
|
50
|
+
needs: changes
|
|
51
|
+
if: \${{ needs.changes.outputs.${job.domain} == 'true' }}
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/checkout@v4
|
|
55
|
+
with:
|
|
56
|
+
ref: \${{ inputs.commitSha || github.sha }}
|
|
57
|
+
# TODO: Replace with your ${job.domain} ${prefix} logic
|
|
58
|
+
- name: Run ${prefix} for ${job.domain}
|
|
59
|
+
run: |
|
|
60
|
+
echo "Running ${prefix} for ${job.domain} domain"
|
|
61
|
+
echo "Replace this with your actual ${prefix} commands"
|
|
62
|
+
# Example: npm run ${prefix}:${job.domain}
|
|
63
|
+
`)
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
return operations;
|
|
68
|
+
}
|
|
8
69
|
/**
|
|
9
70
|
* Create test job operations for each domain
|
|
10
71
|
*/
|
|
11
72
|
export function createDomainTestJobOperations(ctx) {
|
|
12
73
|
const { domains } = ctx;
|
|
13
74
|
const operations = [];
|
|
14
|
-
const testableDomains = Object.keys(domains)
|
|
75
|
+
const testableDomains = Object.keys(domains)
|
|
76
|
+
.sort()
|
|
77
|
+
.filter(d => domains[d].testable !== false);
|
|
15
78
|
testableDomains.forEach((domain, index) => {
|
|
16
79
|
operations.push({
|
|
17
80
|
path: `jobs.test-${domain}`,
|
|
@@ -20,10 +83,10 @@ export function createDomainTestJobOperations(ctx) {
|
|
|
20
83
|
...(index === 0 && {
|
|
21
84
|
commentBefore: `
|
|
22
85
|
=============================================================================
|
|
23
|
-
TESTING JOBS (✅ Customize these with your test logic)
|
|
86
|
+
TESTING JOBS (✅ Customize these with your test logic)
|
|
24
87
|
=============================================================================
|
|
25
|
-
These jobs run tests for each domain when changes are detected.
|
|
26
|
-
Replace the TODO comments with your actual test commands.
|
|
88
|
+
These jobs run tests for each domain when changes are detected.
|
|
89
|
+
Replace the TODO comments with your actual test commands.
|
|
27
90
|
`
|
|
28
91
|
}),
|
|
29
92
|
value: createValueFromString(`
|
|
@@ -51,7 +114,9 @@ Replace the TODO comments with your actual test commands.
|
|
|
51
114
|
export function createDomainDeployJobOperations(ctx) {
|
|
52
115
|
const { domains } = ctx;
|
|
53
116
|
const operations = [];
|
|
54
|
-
const deployableDomains = Object.keys(domains)
|
|
117
|
+
const deployableDomains = Object.keys(domains)
|
|
118
|
+
.sort()
|
|
119
|
+
.filter(d => domains[d].deployable === true);
|
|
55
120
|
deployableDomains.forEach((domain, index) => {
|
|
56
121
|
operations.push({
|
|
57
122
|
path: `jobs.deploy-${domain}`,
|
|
@@ -60,10 +125,10 @@ export function createDomainDeployJobOperations(ctx) {
|
|
|
60
125
|
...(index === 0 && {
|
|
61
126
|
commentBefore: `
|
|
62
127
|
=============================================================================
|
|
63
|
-
DEPLOYMENT JOBS (✅ Customize these with your deploy logic)
|
|
128
|
+
DEPLOYMENT JOBS (✅ Customize these with your deploy logic)
|
|
64
129
|
=============================================================================
|
|
65
|
-
These jobs deploy each domain when changes are detected and tests pass.
|
|
66
|
-
Replace the TODO
|
|
130
|
+
These jobs deploy each domain when changes are detected and tests pass.
|
|
131
|
+
Replace the TODO commands with your actual deployment commands.
|
|
67
132
|
`
|
|
68
133
|
}),
|
|
69
134
|
value: createValueFromString(`
|
|
@@ -91,7 +156,9 @@ Replace the TODO comments with your actual deployment commands.
|
|
|
91
156
|
export function createDomainRemoteTestJobOperations(ctx) {
|
|
92
157
|
const { domains } = ctx;
|
|
93
158
|
const operations = [];
|
|
94
|
-
const remoteTestableDomains = Object.keys(domains)
|
|
159
|
+
const remoteTestableDomains = Object.keys(domains)
|
|
160
|
+
.sort()
|
|
161
|
+
.filter(d => domains[d].remoteTestable === true);
|
|
95
162
|
remoteTestableDomains.forEach((domain, index) => {
|
|
96
163
|
operations.push({
|
|
97
164
|
path: `jobs.remote-test-${domain}`,
|
|
@@ -100,10 +167,10 @@ export function createDomainRemoteTestJobOperations(ctx) {
|
|
|
100
167
|
...(index === 0 && {
|
|
101
168
|
commentBefore: `
|
|
102
169
|
=============================================================================
|
|
103
|
-
REMOTE TESTING JOBS (✅ Customize these with your remote test logic)
|
|
170
|
+
REMOTE TESTING JOBS (✅ Customize these with your remote test logic)
|
|
104
171
|
=============================================================================
|
|
105
|
-
These jobs test deployed services remotely after deployment succeeds.
|
|
106
|
-
Replace the TODO comments with your actual remote testing commands.
|
|
172
|
+
These jobs test deployed services remotely after deployment succeeds.
|
|
173
|
+
Replace the TODO comments with your actual remote testing commands.
|
|
107
174
|
`
|
|
108
175
|
}),
|
|
109
176
|
value: createValueFromString(`
|
|
@@ -127,12 +194,70 @@ Replace the TODO comments with your actual remote testing commands.
|
|
|
127
194
|
}
|
|
128
195
|
/**
|
|
129
196
|
* Get list of all domain job names for dependency management
|
|
197
|
+
*
|
|
198
|
+
* Supports both legacy boolean flags (testable, deployable, remoteTestable)
|
|
199
|
+
* and new flexible prefixes array.
|
|
200
|
+
*
|
|
201
|
+
* @returns Object with arrays of job names categorized by type
|
|
130
202
|
*/
|
|
131
203
|
export function getDomainJobNames(domains) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
204
|
+
const testJobs = [];
|
|
205
|
+
const deployJobs = [];
|
|
206
|
+
const remoteTestJobs = [];
|
|
207
|
+
const allJobsByPrefix = {};
|
|
208
|
+
Object.keys(domains)
|
|
209
|
+
.sort()
|
|
210
|
+
.forEach(domain => {
|
|
211
|
+
const domainConfig = domains[domain];
|
|
212
|
+
// New approach: use prefixes if defined
|
|
213
|
+
if (domainConfig.prefixes && Array.isArray(domainConfig.prefixes)) {
|
|
214
|
+
domainConfig.prefixes.forEach((prefix) => {
|
|
215
|
+
const jobName = `${prefix}-${domain}`;
|
|
216
|
+
// Categorize by known prefixes for backwards compatibility
|
|
217
|
+
if (prefix === 'test') {
|
|
218
|
+
testJobs.push(jobName);
|
|
219
|
+
}
|
|
220
|
+
else if (prefix === 'deploy') {
|
|
221
|
+
deployJobs.push(jobName);
|
|
222
|
+
}
|
|
223
|
+
else if (prefix === 'remote-test') {
|
|
224
|
+
remoteTestJobs.push(jobName);
|
|
225
|
+
}
|
|
226
|
+
// Also track all jobs by prefix for flexible access
|
|
227
|
+
if (!allJobsByPrefix[prefix]) {
|
|
228
|
+
allJobsByPrefix[prefix] = [];
|
|
229
|
+
}
|
|
230
|
+
allJobsByPrefix[prefix].push(jobName);
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
// Legacy approach: use boolean flags
|
|
235
|
+
if (domainConfig.testable !== false) {
|
|
236
|
+
const jobName = `test-${domain}`;
|
|
237
|
+
testJobs.push(jobName);
|
|
238
|
+
if (!allJobsByPrefix['test']) {
|
|
239
|
+
allJobsByPrefix['test'] = [];
|
|
240
|
+
}
|
|
241
|
+
allJobsByPrefix['test'].push(jobName);
|
|
242
|
+
}
|
|
243
|
+
if (domainConfig.deployable === true) {
|
|
244
|
+
const jobName = `deploy-${domain}`;
|
|
245
|
+
deployJobs.push(jobName);
|
|
246
|
+
if (!allJobsByPrefix['deploy']) {
|
|
247
|
+
allJobsByPrefix['deploy'] = [];
|
|
248
|
+
}
|
|
249
|
+
allJobsByPrefix['deploy'].push(jobName);
|
|
250
|
+
}
|
|
251
|
+
if (domainConfig.remoteTestable === true) {
|
|
252
|
+
const jobName = `remote-test-${domain}`;
|
|
253
|
+
remoteTestJobs.push(jobName);
|
|
254
|
+
if (!allJobsByPrefix['remote-test']) {
|
|
255
|
+
allJobsByPrefix['remote-test'] = [];
|
|
256
|
+
}
|
|
257
|
+
allJobsByPrefix['remote-test'].push(jobName);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
return { testJobs, deployJobs, remoteTestJobs, allJobsByPrefix };
|
|
137
262
|
}
|
|
138
263
|
//# sourceMappingURL=operations-domain-jobs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations-domain-jobs.js","sourceRoot":"","sources":["../../../../src/templates/workflows/shared/operations-domain-jobs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"operations-domain-jobs.js","sourceRoot":"","sources":["../../../../src/templates/workflows/shared/operations-domain-jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations-gate.d.ts","sourceRoot":"","sources":["../../../../src/templates/workflows/shared/operations-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkC,MAAM,MAAM,CAAA;AAmE/D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAA;CACf;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,QA0E7E"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml';
|
|
2
|
+
import { logger } from '../../../utils/logger.js';
|
|
3
|
+
const GATE_COMMENT = `
|
|
4
|
+
=============================================================================
|
|
5
|
+
GATE (⚠️ Managed by Pipecraft - do not modify)
|
|
6
|
+
=============================================================================
|
|
7
|
+
Gate job that ensures prior jobs succeed before allowing tag/promote/release.
|
|
8
|
+
Uses pattern: allow only SUCCESS or SKIPPED results (failures block progression).
|
|
9
|
+
`;
|
|
10
|
+
const DEFAULT_GATE_STEP_RUN = 'echo "All prerequisite jobs succeeded or were skipped - gate allows progression"';
|
|
11
|
+
function toKeyString(key) {
|
|
12
|
+
if (key instanceof Scalar) {
|
|
13
|
+
return typeof key.value === 'string' ? key.value : String(key.value);
|
|
14
|
+
}
|
|
15
|
+
return String(key);
|
|
16
|
+
}
|
|
17
|
+
function buildNeedsSequence(jobNames) {
|
|
18
|
+
const seq = new YAMLSeq();
|
|
19
|
+
seq.items = jobNames.map(name => new Scalar(name));
|
|
20
|
+
return seq;
|
|
21
|
+
}
|
|
22
|
+
function buildIfExpression(jobNames) {
|
|
23
|
+
const clauses = jobNames.map(name => `(needs['${name}'].result == 'success' || needs['${name}'].result == 'skipped')`);
|
|
24
|
+
const expression = clauses.length > 0 ? `always() && ${clauses.join(' && ')}` : 'always()';
|
|
25
|
+
const scalar = new Scalar(`\${{ ${expression} }}`);
|
|
26
|
+
scalar.type = Scalar.QUOTE_DOUBLE;
|
|
27
|
+
return scalar;
|
|
28
|
+
}
|
|
29
|
+
function ensureDefaultRunsAndSteps(gateMap) {
|
|
30
|
+
if (!gateMap.has('runs-on')) {
|
|
31
|
+
gateMap.set('runs-on', new Scalar('ubuntu-latest'));
|
|
32
|
+
}
|
|
33
|
+
if (!gateMap.has('steps')) {
|
|
34
|
+
const stepsSeq = new YAMLSeq();
|
|
35
|
+
const stepMap = new YAMLMap();
|
|
36
|
+
stepMap.set('name', new Scalar('Gate passed'));
|
|
37
|
+
stepMap.set('run', new Scalar(DEFAULT_GATE_STEP_RUN));
|
|
38
|
+
stepsSeq.items = [stepMap];
|
|
39
|
+
gateMap.set('steps', stepsSeq);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function dedupePreserveOrder(values) {
|
|
43
|
+
const seen = new Set();
|
|
44
|
+
const result = [];
|
|
45
|
+
for (const value of values) {
|
|
46
|
+
if (!seen.has(value)) {
|
|
47
|
+
seen.add(value);
|
|
48
|
+
result.push(value);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
export function ensureGateJob(doc, options) {
|
|
54
|
+
const { force } = options;
|
|
55
|
+
const root = doc.contents;
|
|
56
|
+
if (!(root instanceof YAMLMap)) {
|
|
57
|
+
logger.warn('⚠️ Unable to update gate job - root YAML node is not a map');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
let jobsNode = root.get('jobs');
|
|
61
|
+
if (!(jobsNode instanceof YAMLMap)) {
|
|
62
|
+
jobsNode = new YAMLMap();
|
|
63
|
+
const jobsPair = new Pair(new Scalar('jobs'), jobsNode);
|
|
64
|
+
root.items.push(jobsPair);
|
|
65
|
+
}
|
|
66
|
+
const items = jobsNode.items;
|
|
67
|
+
const gateIndex = items.findIndex(pair => toKeyString(pair.key) === 'gate');
|
|
68
|
+
const tagIndex = items.findIndex(pair => toKeyString(pair.key) === 'tag');
|
|
69
|
+
let gatePair;
|
|
70
|
+
const gateExisted = gateIndex !== -1;
|
|
71
|
+
if (gateExisted) {
|
|
72
|
+
gatePair = items[gateIndex];
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
const insertionIndex = tagIndex !== -1 ? tagIndex : items.length;
|
|
76
|
+
gatePair = new Pair(new Scalar('gate'), new YAMLMap());
|
|
77
|
+
gatePair.spaceBefore = true;
|
|
78
|
+
gatePair.commentBefore = GATE_COMMENT.trimEnd();
|
|
79
|
+
items.splice(insertionIndex, 0, gatePair);
|
|
80
|
+
}
|
|
81
|
+
const currentIndex = items.indexOf(gatePair);
|
|
82
|
+
const priorJobs = items.slice(0, currentIndex);
|
|
83
|
+
// Filter out disabled jobs (those with if: false or if: ${{ false }})
|
|
84
|
+
const enabledPriorJobs = priorJobs.filter(pair => {
|
|
85
|
+
const jobMap = pair.value;
|
|
86
|
+
if (!(jobMap instanceof YAMLMap))
|
|
87
|
+
return false;
|
|
88
|
+
const ifCondition = jobMap.get('if');
|
|
89
|
+
if (!ifCondition)
|
|
90
|
+
return true; // No condition means enabled
|
|
91
|
+
// Check if explicitly disabled
|
|
92
|
+
const ifValue = ifCondition instanceof Scalar ? String(ifCondition.value).trim() : String(ifCondition).trim();
|
|
93
|
+
return ifValue !== 'false' && ifValue !== '${{ false }}';
|
|
94
|
+
});
|
|
95
|
+
const priorJobKeys = enabledPriorJobs.map(pair => toKeyString(pair.key));
|
|
96
|
+
const prerequisites = dedupePreserveOrder(priorJobKeys);
|
|
97
|
+
let gateMap = gatePair.value;
|
|
98
|
+
if (!(gateMap instanceof YAMLMap)) {
|
|
99
|
+
gateMap = new YAMLMap();
|
|
100
|
+
gatePair.value = gateMap;
|
|
101
|
+
}
|
|
102
|
+
if (!gatePair.commentBefore) {
|
|
103
|
+
;
|
|
104
|
+
gatePair.commentBefore = GATE_COMMENT.trimEnd();
|
|
105
|
+
}
|
|
106
|
+
if (!gateExisted) {
|
|
107
|
+
ensureDefaultRunsAndSteps(gateMap);
|
|
108
|
+
}
|
|
109
|
+
const shouldUpdateControlFields = force || !gateExisted;
|
|
110
|
+
if (shouldUpdateControlFields) {
|
|
111
|
+
;
|
|
112
|
+
gateMap.set('needs', buildNeedsSequence(prerequisites));
|
|
113
|
+
gateMap.set('if', buildIfExpression(prerequisites));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=operations-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations-gate.js","sourceRoot":"","sources":["../../../../src/templates/workflows/shared/operations-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,19 @@
|
|
|
4
4
|
* Generates workflow header operations (name, run-name, on triggers) that are
|
|
5
5
|
* common to both Nx and path-based pipeline templates.
|
|
6
6
|
*/
|
|
7
|
-
import { PathOperationConfig } from '../../../utils/ast-path-operations.js';
|
|
7
|
+
import type { PathOperationConfig } from '../../../utils/ast-path-operations.js';
|
|
8
8
|
export interface HeaderContext {
|
|
9
9
|
branchFlow: string[];
|
|
10
|
+
/**
|
|
11
|
+
* Existing node version from the pipeline, if present.
|
|
12
|
+
* Falls back to PipeCraft defaults when not provided.
|
|
13
|
+
*/
|
|
14
|
+
nodeVersion?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Existing pnpm version from the pipeline, if present.
|
|
17
|
+
* Falls back to PipeCraft defaults when not provided.
|
|
18
|
+
*/
|
|
19
|
+
pnpmVersion?: string;
|
|
10
20
|
}
|
|
11
21
|
/**
|
|
12
22
|
* Create workflow header operations (name, run-name, on triggers)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations-header.d.ts","sourceRoot":"","sources":["../../../../src/templates/workflows/shared/operations-header.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"operations-header.d.ts","sourceRoot":"","sources":["../../../../src/templates/workflows/shared/operations-header.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAEhF,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,aAAa,GAAG,mBAAmB,EAAE,CA4NhF"}
|
|
@@ -9,10 +9,12 @@ import { Scalar } from 'yaml';
|
|
|
9
9
|
* Create workflow header operations (name, run-name, on triggers)
|
|
10
10
|
*/
|
|
11
11
|
export function createHeaderOperations(ctx) {
|
|
12
|
-
const { branchFlow } = ctx;
|
|
12
|
+
const { branchFlow, nodeVersion, pnpmVersion } = ctx;
|
|
13
13
|
// Provide sensible defaults if branchFlow is invalid
|
|
14
|
-
const validBranchFlow =
|
|
14
|
+
const validBranchFlow = branchFlow && Array.isArray(branchFlow) && branchFlow.length > 0 ? branchFlow : ['main'];
|
|
15
15
|
const branchList = validBranchFlow.join(',');
|
|
16
|
+
const normalizedNodeVersion = typeof nodeVersion === 'string' && nodeVersion.trim().length > 0 ? nodeVersion.trim() : '22';
|
|
17
|
+
const normalizedPnpmVersion = typeof pnpmVersion === 'string' && pnpmVersion.trim().length > 0 ? pnpmVersion.trim() : '9';
|
|
16
18
|
return [
|
|
17
19
|
// =============================================================================
|
|
18
20
|
// WORKFLOW NAME
|
|
@@ -20,14 +22,27 @@ export function createHeaderOperations(ctx) {
|
|
|
20
22
|
{
|
|
21
23
|
path: 'name',
|
|
22
24
|
operation: 'preserve',
|
|
23
|
-
value: (
|
|
24
|
-
const nameScalar = new Scalar('Pipeline');
|
|
25
|
-
nameScalar.type = Scalar.QUOTE_DOUBLE;
|
|
26
|
-
return nameScalar;
|
|
27
|
-
})(),
|
|
25
|
+
value: new Scalar('Pipeline'),
|
|
28
26
|
required: true
|
|
29
27
|
},
|
|
30
28
|
// =============================================================================
|
|
29
|
+
// PERMISSIONS - Required for workflow operations
|
|
30
|
+
// =============================================================================
|
|
31
|
+
// contents: write - For creating tags and pushing changes
|
|
32
|
+
// pull-requests: write - For creating pull requests during promotion
|
|
33
|
+
// actions: write - For triggering workflow_dispatch on target branches
|
|
34
|
+
{
|
|
35
|
+
path: 'permissions',
|
|
36
|
+
operation: 'preserve',
|
|
37
|
+
value: {
|
|
38
|
+
contents: 'write',
|
|
39
|
+
'pull-requests': 'write',
|
|
40
|
+
actions: 'write'
|
|
41
|
+
},
|
|
42
|
+
required: true,
|
|
43
|
+
spaceBefore: true
|
|
44
|
+
},
|
|
45
|
+
// =============================================================================
|
|
31
46
|
// RUN NAME - Display name for workflow runs
|
|
32
47
|
// =============================================================================
|
|
33
48
|
{
|
|
@@ -36,12 +51,56 @@ export function createHeaderOperations(ctx) {
|
|
|
36
51
|
value: (() => {
|
|
37
52
|
const runNameScalar = new Scalar(`\${{ github.event_name == 'pull_request' && !contains('${branchList}', github.head_ref) && github.event.pull_request.title || github.ref_name }} #\${{ inputs.run_number || github.run_number }}\${{ inputs.version && format(' - {0}', inputs.version) || '' }}`);
|
|
38
53
|
runNameScalar.type = Scalar.QUOTE_DOUBLE;
|
|
54
|
+
runNameScalar.type = 'QUOTE_DOUBLE';
|
|
39
55
|
return runNameScalar;
|
|
40
56
|
})(),
|
|
41
57
|
required: true,
|
|
42
58
|
spaceBefore: true
|
|
43
59
|
},
|
|
44
60
|
// =============================================================================
|
|
61
|
+
// ENVIRONMENT VARIABLES
|
|
62
|
+
// =============================================================================
|
|
63
|
+
{
|
|
64
|
+
path: 'env',
|
|
65
|
+
operation: 'preserve',
|
|
66
|
+
value: {},
|
|
67
|
+
required: true,
|
|
68
|
+
spaceBefore: true,
|
|
69
|
+
commentBefore: `Git fetch depth configuration
|
|
70
|
+
- FETCH_DEPTH_AFFECTED: For change detection and Nx affected analysis
|
|
71
|
+
Lower values (50-100) improve performance, higher values (200+) improve accuracy
|
|
72
|
+
Use 0 for complete history if your branches diverge significantly
|
|
73
|
+
- FETCH_DEPTH_VERSIONING: For semantic version calculation (needs git tags)
|
|
74
|
+
Should almost always be 0 to access all tags
|
|
75
|
+
|
|
76
|
+
Runtime versions
|
|
77
|
+
Update these to match your project's requirements without regenerating workflows`
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
path: 'env.FETCH_DEPTH_AFFECTED',
|
|
81
|
+
operation: 'preserve',
|
|
82
|
+
value: new Scalar('100'),
|
|
83
|
+
required: true
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
path: 'env.FETCH_DEPTH_VERSIONING',
|
|
87
|
+
operation: 'preserve',
|
|
88
|
+
value: new Scalar('0'),
|
|
89
|
+
required: true
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
path: 'env.NODE_VERSION',
|
|
93
|
+
operation: 'preserve',
|
|
94
|
+
value: new Scalar(normalizedNodeVersion),
|
|
95
|
+
required: true
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
path: 'env.PNPM_VERSION',
|
|
99
|
+
operation: 'preserve',
|
|
100
|
+
value: new Scalar(normalizedPnpmVersion),
|
|
101
|
+
required: true
|
|
102
|
+
},
|
|
103
|
+
// =============================================================================
|
|
45
104
|
// WORKFLOW TRIGGERS
|
|
46
105
|
// =============================================================================
|
|
47
106
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations-header.js","sourceRoot":"","sources":["../../../../src/templates/workflows/shared/operations-header.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"operations-header.js","sourceRoot":"","sources":["../../../../src/templates/workflows/shared/operations-header.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates the tag creation, branch promotion, and GitHub release jobs.
|
|
5
5
|
*/
|
|
6
|
-
import { PathOperationConfig } from '../../../utils/ast-path-operations.js';
|
|
6
|
+
import { type PathOperationConfig } from '../../../utils/ast-path-operations.js';
|
|
7
|
+
import type { PipecraftConfig } from '../../../types/index.js';
|
|
7
8
|
export interface TagPromoteContext {
|
|
8
9
|
branchFlow: string[];
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
autoPromote?: Record<string, boolean>;
|
|
11
|
+
config?: Partial<PipecraftConfig>;
|
|
11
12
|
}
|
|
12
13
|
/**
|
|
13
14
|
* Create tag, promote, and release job operations
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations-tag-promote.d.ts","sourceRoot":"","sources":["../../../../src/templates/workflows/shared/operations-tag-promote.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"operations-tag-promote.d.ts","sourceRoot":"","sources":["../../../../src/templates/workflows/shared/operations-tag-promote.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,uCAAuC,CAAA;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAE9D,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,CAoJ/F"}
|