pipecraft 0.36.2 → 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.
Files changed (101) hide show
  1. package/README.md +30 -20
  2. package/dist/cli/index.js +4 -3
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/generators/init.tpl.d.ts.map +1 -1
  5. package/dist/generators/init.tpl.js +7 -128
  6. package/dist/generators/init.tpl.js.map +1 -1
  7. package/dist/generators/workflows.tpl.d.ts.map +1 -1
  8. package/dist/generators/workflows.tpl.js +3 -15
  9. package/dist/generators/workflows.tpl.js.map +1 -1
  10. package/dist/templates/actions/calculate-version.yml.tpl.d.ts.map +1 -1
  11. package/dist/templates/actions/calculate-version.yml.tpl.js +38 -19
  12. package/dist/templates/actions/calculate-version.yml.tpl.js.map +1 -1
  13. package/dist/templates/actions/create-pr.yml.tpl.d.ts.map +1 -1
  14. package/dist/templates/actions/create-pr.yml.tpl.js +9 -6
  15. package/dist/templates/actions/create-pr.yml.tpl.js.map +1 -1
  16. package/dist/templates/actions/create-release.yml.tpl.d.ts.map +1 -1
  17. package/dist/templates/actions/create-release.yml.tpl.js +11 -9
  18. package/dist/templates/actions/create-release.yml.tpl.js.map +1 -1
  19. package/dist/templates/actions/create-tag.yml.tpl.d.ts.map +1 -1
  20. package/dist/templates/actions/create-tag.yml.tpl.js +8 -7
  21. package/dist/templates/actions/create-tag.yml.tpl.js.map +1 -1
  22. package/dist/templates/actions/detect-changes.yml.tpl.d.ts +7 -13
  23. package/dist/templates/actions/detect-changes.yml.tpl.d.ts.map +1 -1
  24. package/dist/templates/actions/detect-changes.yml.tpl.js +62 -215
  25. package/dist/templates/actions/detect-changes.yml.tpl.js.map +1 -1
  26. package/dist/templates/actions/manage-branch.yml.tpl.d.ts.map +1 -1
  27. package/dist/templates/actions/manage-branch.yml.tpl.js +8 -7
  28. package/dist/templates/actions/manage-branch.yml.tpl.js.map +1 -1
  29. package/dist/templates/actions/promote-branch.yml.tpl.d.ts.map +1 -1
  30. package/dist/templates/actions/promote-branch.yml.tpl.js +25 -29
  31. package/dist/templates/actions/promote-branch.yml.tpl.js.map +1 -1
  32. package/dist/templates/release-it.cjs.tpl.d.ts.map +1 -1
  33. package/dist/templates/release-it.cjs.tpl.js +14 -3
  34. package/dist/templates/release-it.cjs.tpl.js.map +1 -1
  35. package/dist/templates/workflows/pipeline.yml.tpl.d.ts.map +1 -1
  36. package/dist/templates/workflows/pipeline.yml.tpl.js +28 -48
  37. package/dist/templates/workflows/pipeline.yml.tpl.js.map +1 -1
  38. package/dist/templates/workflows/shared/index.d.ts +1 -0
  39. package/dist/templates/workflows/shared/index.d.ts.map +1 -1
  40. package/dist/templates/workflows/shared/index.js +1 -0
  41. package/dist/templates/workflows/shared/index.js.map +1 -1
  42. package/dist/templates/workflows/shared/managed-workflow.d.ts +32 -0
  43. package/dist/templates/workflows/shared/managed-workflow.d.ts.map +1 -0
  44. package/dist/templates/workflows/shared/managed-workflow.js +51 -0
  45. package/dist/templates/workflows/shared/managed-workflow.js.map +1 -0
  46. package/dist/templates/workflows/shared/operations-changes.d.ts +0 -1
  47. package/dist/templates/workflows/shared/operations-changes.d.ts.map +1 -1
  48. package/dist/templates/workflows/shared/operations-changes.js +1 -6
  49. package/dist/templates/workflows/shared/operations-changes.js.map +1 -1
  50. package/dist/templates/workflows/shared/operations-gate.d.ts +4 -30
  51. package/dist/templates/workflows/shared/operations-gate.d.ts.map +1 -1
  52. package/dist/templates/workflows/shared/operations-gate.js +110 -71
  53. package/dist/templates/workflows/shared/operations-gate.js.map +1 -1
  54. package/dist/templates/workflows/shared/operations-header.d.ts +10 -0
  55. package/dist/templates/workflows/shared/operations-header.d.ts.map +1 -1
  56. package/dist/templates/workflows/shared/operations-header.js +22 -3
  57. package/dist/templates/workflows/shared/operations-header.js.map +1 -1
  58. package/dist/templates/workflows/shared/operations-tag-promote.d.ts +1 -4
  59. package/dist/templates/workflows/shared/operations-tag-promote.d.ts.map +1 -1
  60. package/dist/templates/workflows/shared/operations-tag-promote.js +21 -17
  61. package/dist/templates/workflows/shared/operations-tag-promote.js.map +1 -1
  62. package/dist/templates/workflows/shared/operations-version.d.ts +0 -1
  63. package/dist/templates/workflows/shared/operations-version.d.ts.map +1 -1
  64. package/dist/templates/workflows/shared/operations-version.js +4 -11
  65. package/dist/templates/workflows/shared/operations-version.js.map +1 -1
  66. package/dist/templates/yaml-format-utils.d.ts.map +1 -1
  67. package/dist/templates/yaml-format-utils.js +1 -5
  68. package/dist/templates/yaml-format-utils.js.map +1 -1
  69. package/dist/types/index.d.ts +16 -57
  70. package/dist/types/index.d.ts.map +1 -1
  71. package/dist/utils/action-reference.d.ts +1 -1
  72. package/dist/utils/action-reference.js +2 -2
  73. package/dist/utils/action-reference.js.map +1 -1
  74. package/dist/utils/config.d.ts +5 -0
  75. package/dist/utils/config.d.ts.map +1 -1
  76. package/dist/utils/config.js +36 -4
  77. package/dist/utils/config.js.map +1 -1
  78. package/dist/utils/github-setup.d.ts +4 -4
  79. package/dist/utils/github-setup.js +28 -28
  80. package/dist/utils/github-setup.js.map +1 -1
  81. package/dist/utils/messaging.d.ts +2 -2
  82. package/dist/utils/messaging.d.ts.map +1 -1
  83. package/dist/utils/messaging.js +5 -5
  84. package/dist/utils/messaging.js.map +1 -1
  85. package/dist/utils/preflight.js +2 -2
  86. package/dist/utils/preflight.js.map +1 -1
  87. package/dist/utils/workflow-semantics.d.ts +61 -0
  88. package/dist/utils/workflow-semantics.d.ts.map +1 -0
  89. package/dist/utils/workflow-semantics.js +230 -0
  90. package/dist/utils/workflow-semantics.js.map +1 -0
  91. package/package.json +6 -5
  92. package/src/generators/init.tpl.ts +7 -132
  93. package/src/generators/workflows.tpl.ts +3 -15
  94. package/dist/templates/actions/run-nx-affected.yml.tpl.d.ts +0 -33
  95. package/dist/templates/actions/run-nx-affected.yml.tpl.d.ts.map +0 -1
  96. package/dist/templates/actions/run-nx-affected.yml.tpl.js +0 -346
  97. package/dist/templates/actions/run-nx-affected.yml.tpl.js.map +0 -1
  98. package/dist/templates/workflows/pipeline-nx.yml.tpl.d.ts +0 -22
  99. package/dist/templates/workflows/pipeline-nx.yml.tpl.d.ts.map +0 -1
  100. package/dist/templates/workflows/pipeline-nx.yml.tpl.js +0 -403
  101. package/dist/templates/workflows/pipeline-nx.yml.tpl.js.map +0 -1
@@ -1,403 +0,0 @@
1
- /**
2
- * Nx Pipeline Template
3
- *
4
- * Generates an Nx-optimized workflow that uses `nx affected` to intelligently test
5
- * only changed projects. Runs all Nx tasks sequentially in a single job, leveraging
6
- * Nx's built-in caching and parallel execution.
7
- *
8
- * This is Option 1 (Sequential Strategy) - simple, fast, and leverages Nx's intelligence.
9
- */
10
- import { renderTemplate, toFile } from '@featherscloud/pinion';
11
- import fs from 'fs';
12
- import { parseDocument, Scalar, stringify } from 'yaml';
13
- import { applyPathOperations, createValueFromString } from '../../utils/ast-path-operations.js';
14
- import { logger } from '../../utils/logger.js';
15
- import { formatIfConditions } from '../yaml-format-utils.js';
16
- import { createChangesJobOperation, createGateJobOperation, createHeaderOperations, createTagPromoteReleaseOperations, createVersionJobOperation, getDomainJobNames } from './shared/index.js';
17
- /**
18
- * Extract user-customized section between markers from YAML content
19
- * Returns content WITHOUT the markers themselves
20
- * Uses unique delimiters as YAML comments (indentation-independent)
21
- */
22
- function extractUserSection(yamlContent) {
23
- // Match markers as YAML comments: any leading whitespace + one or more # + optional whitespace + marker
24
- // Example: " ### <--START CUSTOM JOBS-->"
25
- const startMarkerRegex = /^.*#+\s*<--START CUSTOM JOBS-->\s*$/m;
26
- const endMarkerRegex = /^.*#+\s*<--END CUSTOM JOBS-->\s*$/m;
27
- const startMatch = yamlContent.match(startMarkerRegex);
28
- const endMatch = yamlContent.match(endMarkerRegex);
29
- if (!startMatch || !endMatch) {
30
- return null;
31
- }
32
- const startIndex = startMatch.index + startMatch[0].length;
33
- const endIndex = endMatch.index;
34
- // Extract content between markers (NOT including the markers themselves)
35
- let extracted = yamlContent.substring(startIndex, endIndex);
36
- // Normalize whitespace: remove leading/trailing newlines
37
- // These will be added back consistently during insertion
38
- extracted = extracted.replace(/^\n+/, '');
39
- extracted = extracted.replace(/\n+$/, '');
40
- return extracted;
41
- }
42
- /**
43
- * Create the test-nx job operation (Nx-specific)
44
- */
45
- function createTestNxJobOperation(ctx) {
46
- const { config } = ctx;
47
- const nxConfig = config.nx;
48
- const packageManager = config.packageManager || 'npm';
49
- const enableCache = nxConfig.enableCache !== false;
50
- const targets = nxConfig.tasks.join(',');
51
- // Build the job steps
52
- const cacheStep = enableCache
53
- ? `
54
- - name: Cache Nx
55
- uses: actions/cache@v4
56
- with:
57
- path: .nx/cache
58
- key: \${{ runner.os }}-nx-\${{ hashFiles('**/nx.json', '**/.nxignore', '**/package-lock.json', '**/pnpm-lock.yaml', '**/yarn.lock') }}
59
- restore-keys: |
60
- \${{ runner.os }}-nx-`
61
- : '';
62
- // Build individual task steps
63
- const taskSteps = nxConfig.tasks
64
- .map(target => `
65
- - name: Run nx affected --target=${target}
66
- run: |
67
- npx nx affected --target=${target} --base=\${{ inputs.baseRef || '${nxConfig.baseRef || 'origin/main'}' }} || echo "No affected projects"`)
68
- .join('');
69
- return {
70
- path: 'jobs.test-nx',
71
- operation: 'preserve', // User can customize this job!
72
- commentBefore: `
73
- =============================================================================
74
- TEST-NX ( ✅ Customize these with your test logic)
75
- =============================================================================
76
- This job runs all Nx tasks sequentially using \`nx affected\`.
77
- Nx handles dependency detection, caching, and parallel execution internally.
78
- `,
79
- value: createValueFromString(`
80
- needs: [ changes ]
81
- runs-on: ubuntu-latest
82
- steps:
83
- - uses: actions/checkout@v4
84
- with:
85
- ref: \${{ inputs.commitSha || github.sha }}
86
- fetch-depth: \${{ env.FETCH_DEPTH_AFFECTED }}
87
- - name: Setup Node.js
88
- uses: actions/setup-node@v4
89
- with:
90
- node-version: \${{ env.NODE_VERSION }}
91
- ${packageManager === 'pnpm'
92
- ? `
93
- - name: Setup pnpm
94
- uses: pnpm/action-setup@v4
95
- with:
96
- version: \${{ env.PNPM_VERSION }}
97
- - name: Install dependencies
98
- run: pnpm install --frozen-lockfile`
99
- : packageManager === 'yarn'
100
- ? `
101
- - name: Install dependencies
102
- run: yarn install --frozen-lockfile`
103
- : `
104
- - name: Install dependencies
105
- run: npm ci`}
106
- ${cacheStep}${taskSteps}
107
- `)
108
- };
109
- }
110
- /**
111
- * Main generator that handles merging with existing workflow
112
- */
113
- export const generate = (ctx) => Promise.resolve(ctx)
114
- .then(ctx => {
115
- const filePath = `${ctx.cwd || process.cwd()}/.github/workflows/pipeline.yml`;
116
- const { config, branchFlow } = ctx;
117
- const domains = config.domains || {};
118
- const nxConfig = config.nx;
119
- // Get domain job names for dependency management
120
- const { testJobs, deployJobs, remoteTestJobs } = getDomainJobNames(domains);
121
- // Build operations array - only managed jobs
122
- const operations = [
123
- // Header (name, run-name, on triggers)
124
- ...createHeaderOperations({ branchFlow }),
125
- // Changes detection (Nx-enabled)
126
- createChangesJobOperation({
127
- domains,
128
- useNx: true,
129
- baseRef: nxConfig.baseRef || 'origin/main',
130
- config
131
- }),
132
- // Nx test job (runs all Nx tasks)
133
- createTestNxJobOperation(ctx),
134
- // Version calculation (depends on test-nx and changes)
135
- createVersionJobOperation({
136
- testJobNames: [], // No domain test job dependencies
137
- nxEnabled: true, // Depends on test-nx job
138
- baseRef: nxConfig.baseRef || 'origin/main',
139
- config
140
- }),
141
- // Gate job (runs after test-nx, gates downstream jobs)
142
- createGateJobOperation({
143
- testJobNames: ['test-nx'], // Gate on the Nx test job
144
- deployJobNames: [] // Could add deploy jobs here if needed
145
- }),
146
- // Tag, promote, release
147
- ...createTagPromoteReleaseOperations({
148
- branchFlow,
149
- deployJobNames: [], // No deployment dependencies in new model
150
- remoteTestJobNames: [],
151
- testJobNames: ['test-nx'], // For Nx, the single test-nx job is the gate
152
- autoMerge: typeof config.autoMerge === 'object' ? config.autoMerge : {},
153
- config
154
- })
155
- ];
156
- // Check if file exists
157
- const fileExists = fs.existsSync(filePath);
158
- // Extract user-customized section and custom jobs from existing file if it exists
159
- let userSection = null;
160
- const customJobsFromExisting = [];
161
- if (fileExists) {
162
- const existingContent = fs.readFileSync(filePath, 'utf8');
163
- userSection = extractUserSection(existingContent);
164
- if (userSection) {
165
- logger.verbose('📋 Found user-customized section between markers');
166
- }
167
- // Also extract custom jobs (for force mode preservation)
168
- const existingDoc = parseDocument(existingContent);
169
- const existingJobs = existingDoc.contents && existingDoc.contents.get
170
- ? existingDoc.contents.get('jobs')
171
- : null;
172
- const managedJobs = new Set([
173
- 'changes',
174
- 'version',
175
- 'gate',
176
- 'tag',
177
- 'promote',
178
- 'release',
179
- 'test-nx'
180
- ]);
181
- if (existingJobs && existingJobs.items) {
182
- for (const pair of existingJobs.items) {
183
- const keyStr = pair.key instanceof Scalar ? pair.key.value : pair.key;
184
- if (!managedJobs.has(keyStr)) {
185
- customJobsFromExisting.push(pair);
186
- }
187
- }
188
- }
189
- if (customJobsFromExisting.length > 0) {
190
- logger.verbose(`📋 Found ${customJobsFromExisting.length} custom job(s) to preserve`);
191
- }
192
- }
193
- // In force mode or new file, create fresh document to ensure correct structure
194
- if (!fileExists || ctx.pinion?.force) {
195
- const logMessage = !fileExists
196
- ? '📝 Creating new Nx pipeline'
197
- : '🔄 Force mode: Rebuilding Nx pipeline from scratch';
198
- logger.verbose(logMessage);
199
- // Create new document with empty YAML map
200
- const doc = parseDocument('{}');
201
- // Ensure the root map uses block style (not flow/compact)
202
- if (doc.contents && doc.contents.flow !== undefined) {
203
- ;
204
- doc.contents.flow = false;
205
- }
206
- // Add header comment block to document
207
- const headerComment = `=============================================================================
208
- PIPECRAFT MANAGED WORKFLOW
209
- =============================================================================
210
-
211
- ✅ YOU CAN CUSTOMIZE:
212
- - Custom jobs between the '# <--START CUSTOM JOBS-->' and '# <--END CUSTOM JOBS-->' comment markers
213
- - Workflow name
214
-
215
- ⚠️ PIPECRAFT MANAGES (do not modify):
216
- - Workflow triggers, job dependencies, and conditionals
217
- - Changes detection, version calculation, and tag creation
218
- - CreatePR, branch management, promote, and release jobs
219
-
220
- 📌 VERSION PROMOTION BEHAVIOR:
221
- - Only commits that trigger a version bump will promote to staging/main
222
- - Non-versioned commits (test, build, etc.) remain on develop
223
- - This keeps staging/main aligned with tagged releases
224
-
225
- Running 'pipecraft generate' updates managed sections while preserving
226
- your customizations in test/deploy/smoke-test etc jobs.
227
-
228
- 📖 Learn more: https://pipecraft.thecraftlab.dev
229
- =============================================================================`;
230
- doc.commentBefore = headerComment;
231
- if (doc.contents) {
232
- applyPathOperations(doc.contents, operations, doc);
233
- }
234
- let yamlContent = stringify(doc, {
235
- lineWidth: 0, // 0 means no line width limit for scalars
236
- indent: 2,
237
- defaultStringType: 'PLAIN',
238
- defaultKeyType: 'PLAIN',
239
- minContentWidth: 0
240
- });
241
- // Insert user section and custom jobs after version job if they exist
242
- const hasCustomContent = userSection || customJobsFromExisting.length > 0;
243
- if (hasCustomContent) {
244
- // Find the insertion point (after version job outputs)
245
- const versionOutputsPattern = /^ {2}version:\s*\n(?:.*\n)*? {4}outputs:\s*\n\s*version:.*$/m;
246
- const match = yamlContent.match(versionOutputsPattern);
247
- if (match) {
248
- const insertionIndex = match.index + match[0].length;
249
- let contentToInsert = '';
250
- // Add user section if exists
251
- if (userSection) {
252
- contentToInsert += `# <--START CUSTOM JOBS-->\n\n${userSection}\n\n # <--END CUSTOM JOBS-->`;
253
- }
254
- // Add custom jobs if they exist (and weren't in user section)
255
- if (customJobsFromExisting.length > 0 && !userSection) {
256
- const customJobsYaml = customJobsFromExisting
257
- .map(pair => {
258
- const keyStr = pair.key instanceof Scalar ? pair.key.value : pair.key;
259
- const valueYaml = stringify(pair.value, { indent: 2 });
260
- return ` ${keyStr}:\n${valueYaml
261
- .split('\n')
262
- .map((line) => (line ? ' ' + line : line))
263
- .join('\n')}`;
264
- })
265
- .join('\n\n');
266
- contentToInsert = `# <--START CUSTOM JOBS-->\n\n${customJobsYaml}\n\n # <--END CUSTOM JOBS-->`;
267
- }
268
- if (contentToInsert) {
269
- yamlContent =
270
- yamlContent.slice(0, insertionIndex) +
271
- '\n\n ' +
272
- contentToInsert +
273
- '\n' +
274
- yamlContent.slice(insertionIndex);
275
- logger.verbose('📋 Inserted user-customized section after version job');
276
- }
277
- }
278
- else {
279
- logger.verbose('⚠️ Could not find version job outputs, appending user section at end');
280
- const contentToInsert = userSection ||
281
- (customJobsFromExisting.length > 0
282
- ? customJobsFromExisting
283
- .map(pair => {
284
- const keyStr = pair.key instanceof Scalar ? pair.key.value : pair.key;
285
- const valueYaml = stringify(pair.value, { indent: 2 });
286
- return ` ${keyStr}:\n${valueYaml
287
- .split('\n')
288
- .map((line) => (line ? ' ' + line : line))
289
- .join('\n')}`;
290
- })
291
- .join('\n\n')
292
- : '');
293
- const userSectionWithMarkers = `# <--START CUSTOM JOBS-->\n\n${contentToInsert}\n\n # <--END CUSTOM JOBS-->`;
294
- yamlContent = yamlContent + '\n\n ' + userSectionWithMarkers;
295
- }
296
- }
297
- else if (!fileExists) {
298
- // For new files, add placeholder markers
299
- const versionOutputsPattern = /^( {2}version:\s*\n(?:.*\n)*? {4}outputs:\s*\n\s*version:.*)$/m;
300
- yamlContent = yamlContent.replace(versionOutputsPattern, '$1\n\n # <--START CUSTOM JOBS-->\n\n # <--END CUSTOM JOBS-->\n');
301
- logger.verbose('📝 Added placeholder user section markers');
302
- }
303
- const formattedContent = formatIfConditions(yamlContent);
304
- const status = hasCustomContent ? 'merged' : fileExists ? 'rebuilt' : 'created';
305
- return { ...ctx, yamlContent: formattedContent, mergeStatus: status };
306
- }
307
- // Parse existing file for merge mode (no force flag)
308
- const existingContent = fs.readFileSync(filePath, 'utf8');
309
- const doc = parseDocument(existingContent);
310
- // Get managed jobs (always overwritten)
311
- const managedJobs = new Set(['changes', 'version', 'tag', 'promote', 'release', 'test-nx']);
312
- // test-nx is preserved (user can customize), but still managed if it doesn't exist
313
- // Extract custom jobs (not managed and not in user section between markers)
314
- const existingJobs = doc.contents && doc.contents.get ? doc.contents.get('jobs') : null;
315
- const customJobs = [];
316
- if (existingJobs && existingJobs.items) {
317
- // Preserve jobs that are not managed
318
- for (const pair of existingJobs.items) {
319
- const keyStr = pair.key instanceof Scalar ? pair.key.value : pair.key;
320
- if (!managedJobs.has(keyStr)) {
321
- customJobs.push(pair);
322
- }
323
- }
324
- // Clear all jobs before applying operations to prevent duplicates
325
- ;
326
- existingJobs.items = [];
327
- }
328
- // Apply operations to update managed jobs
329
- if (doc.contents) {
330
- applyPathOperations(doc.contents, operations, doc);
331
- }
332
- // Reinsert custom jobs (preserved from existing pipeline)
333
- if (existingJobs && customJobs.length > 0) {
334
- for (const customPair of customJobs) {
335
- existingJobs.add(customPair);
336
- }
337
- logger.verbose(`📋 Preserved ${customJobs.length} custom job(s) from existing pipeline`);
338
- }
339
- let yamlContent = stringify(doc, {
340
- lineWidth: 0,
341
- indent: 2,
342
- defaultStringType: 'PLAIN',
343
- defaultKeyType: 'PLAIN',
344
- minContentWidth: 0
345
- });
346
- // Insert user section after version job if it exists
347
- if (userSection) {
348
- const versionOutputsPattern = /^ {2}version:\s*\n(?:.*\n)*? {4}outputs:\s*\n\s*version:.*$/m;
349
- const match = yamlContent.match(versionOutputsPattern);
350
- if (match) {
351
- const insertionIndex = match.index + match[0].length;
352
- const userSectionWithMarkers = `# <--START CUSTOM JOBS-->\n\n${userSection}\n\n # <--END CUSTOM JOBS-->`;
353
- yamlContent =
354
- yamlContent.slice(0, insertionIndex) +
355
- '\n\n ' +
356
- userSectionWithMarkers +
357
- '\n' +
358
- yamlContent.slice(insertionIndex);
359
- logger.verbose('📋 Inserted user-customized section after version job');
360
- }
361
- }
362
- // Also insert custom jobs that weren't in the user section
363
- if (customJobs.length > 0 && !userSection) {
364
- const versionOutputsPattern = /^ {2}version:\s*\n(?:.*\n)*? {4}outputs:\s*\n\s*version:.*$/m;
365
- const match = yamlContent.match(versionOutputsPattern);
366
- if (match) {
367
- const insertionIndex = match.index + match[0].length;
368
- const customJobsYaml = customJobs
369
- .map(pair => {
370
- const keyStr = pair.key instanceof Scalar ? pair.key.value : pair.key;
371
- const valueYaml = stringify(pair.value, { indent: 2 });
372
- return ` ${keyStr}:\n${valueYaml
373
- .split('\n')
374
- .map((line) => (line ? ' ' + line : line))
375
- .join('\n')}`;
376
- })
377
- .join('\n\n');
378
- yamlContent =
379
- yamlContent.slice(0, insertionIndex) +
380
- '\n\n # <--START CUSTOM JOBS-->\n\n' +
381
- customJobsYaml +
382
- '\n\n # <--END CUSTOM JOBS-->\n' +
383
- yamlContent.slice(insertionIndex);
384
- }
385
- }
386
- const status = userSection || customJobs.length > 0 ? 'merged' : 'updated';
387
- const formattedContent = formatIfConditions(yamlContent);
388
- return { ...ctx, yamlContent: formattedContent, mergeStatus: status };
389
- })
390
- .then(ctx => {
391
- const outputPath = ctx.outputPipelinePath || '.github/workflows/pipeline.yml';
392
- const status = ctx.mergeStatus === 'merged'
393
- ? '🔄 Merged with existing'
394
- : ctx.mergeStatus === 'updated'
395
- ? '🔄 Updated existing'
396
- : ctx.mergeStatus === 'rebuilt'
397
- ? '🔄 Rebuilt from scratch'
398
- : '📝 Created new';
399
- logger.verbose(`${status} ${outputPath}`);
400
- return ctx;
401
- })
402
- .then(renderTemplate((ctx) => ctx.yamlContent, toFile((ctx) => ctx.outputPipelinePath || '.github/workflows/pipeline.yml')));
403
- //# sourceMappingURL=pipeline-nx.yml.tpl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipeline-nx.yml.tpl.js","sourceRoot":"","sources":["../../../src/templates/workflows/pipeline-nx.yml.tpl.ts"],"names":[],"mappings":"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"}