@synergenius/flowweaver-pack-cicd 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/artifacts.d.ts +13 -0
  2. package/dist/artifacts.d.ts.map +1 -0
  3. package/dist/artifacts.js +26 -0
  4. package/dist/artifacts.js.map +1 -0
  5. package/dist/detection.d.ts +28 -0
  6. package/dist/detection.d.ts.map +1 -0
  7. package/dist/detection.js +81 -0
  8. package/dist/detection.js.map +1 -0
  9. package/dist/index.d.ts +20 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +21 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/job-graph.d.ts +17 -0
  14. package/dist/job-graph.d.ts.map +1 -0
  15. package/dist/job-graph.js +185 -0
  16. package/dist/job-graph.js.map +1 -0
  17. package/dist/native-steps.d.ts +13 -0
  18. package/dist/native-steps.d.ts.map +1 -0
  19. package/dist/native-steps.js +30 -0
  20. package/dist/native-steps.js.map +1 -0
  21. package/dist/node-types/checkout.d.ts +12 -0
  22. package/dist/node-types/checkout.d.ts.map +1 -0
  23. package/dist/node-types/checkout.js +13 -0
  24. package/dist/node-types/checkout.js.map +1 -0
  25. package/dist/node-types/deploy-s3.d.ts +17 -0
  26. package/dist/node-types/deploy-s3.d.ts.map +1 -0
  27. package/dist/node-types/deploy-s3.js +18 -0
  28. package/dist/node-types/deploy-s3.js.map +1 -0
  29. package/dist/node-types/deploy-ssh.d.ts +16 -0
  30. package/dist/node-types/deploy-ssh.d.ts.map +1 -0
  31. package/dist/node-types/deploy-ssh.js +17 -0
  32. package/dist/node-types/deploy-ssh.js.map +1 -0
  33. package/dist/node-types/docker-build.d.ts +15 -0
  34. package/dist/node-types/docker-build.d.ts.map +1 -0
  35. package/dist/node-types/docker-build.js +16 -0
  36. package/dist/node-types/docker-build.js.map +1 -0
  37. package/dist/node-types/docker-login.d.ts +16 -0
  38. package/dist/node-types/docker-login.d.ts.map +1 -0
  39. package/dist/node-types/docker-login.js +17 -0
  40. package/dist/node-types/docker-login.js.map +1 -0
  41. package/dist/node-types/docker-push.d.ts +14 -0
  42. package/dist/node-types/docker-push.d.ts.map +1 -0
  43. package/dist/node-types/docker-push.js +15 -0
  44. package/dist/node-types/docker-push.js.map +1 -0
  45. package/dist/node-types/health-check.d.ts +17 -0
  46. package/dist/node-types/health-check.d.ts.map +1 -0
  47. package/dist/node-types/health-check.js +17 -0
  48. package/dist/node-types/health-check.js.map +1 -0
  49. package/dist/node-types/index.d.ts +16 -0
  50. package/dist/node-types/index.d.ts.map +1 -0
  51. package/dist/node-types/index.js +17 -0
  52. package/dist/node-types/index.js.map +1 -0
  53. package/dist/node-types/npm-build.d.ts +12 -0
  54. package/dist/node-types/npm-build.d.ts.map +1 -0
  55. package/dist/node-types/npm-build.js +13 -0
  56. package/dist/node-types/npm-build.js.map +1 -0
  57. package/dist/node-types/npm-install.d.ts +13 -0
  58. package/dist/node-types/npm-install.d.ts.map +1 -0
  59. package/dist/node-types/npm-install.js +17 -0
  60. package/dist/node-types/npm-install.js.map +1 -0
  61. package/dist/node-types/npm-test.d.ts +14 -0
  62. package/dist/node-types/npm-test.d.ts.map +1 -0
  63. package/dist/node-types/npm-test.js +14 -0
  64. package/dist/node-types/npm-test.js.map +1 -0
  65. package/dist/node-types/setup-node.d.ts +13 -0
  66. package/dist/node-types/setup-node.d.ts.map +1 -0
  67. package/dist/node-types/setup-node.js +14 -0
  68. package/dist/node-types/setup-node.js.map +1 -0
  69. package/dist/node-types/setup-python.d.ts +13 -0
  70. package/dist/node-types/setup-python.d.ts.map +1 -0
  71. package/dist/node-types/setup-python.js +14 -0
  72. package/dist/node-types/setup-python.js.map +1 -0
  73. package/dist/node-types/shell-command.d.ts +16 -0
  74. package/dist/node-types/shell-command.d.ts.map +1 -0
  75. package/dist/node-types/shell-command.js +16 -0
  76. package/dist/node-types/shell-command.js.map +1 -0
  77. package/dist/node-types/slack-notify.d.ts +15 -0
  78. package/dist/node-types/slack-notify.d.ts.map +1 -0
  79. package/dist/node-types/slack-notify.js +16 -0
  80. package/dist/node-types/slack-notify.js.map +1 -0
  81. package/dist/node-types/wait-for-url.d.ts +17 -0
  82. package/dist/node-types/wait-for-url.d.ts.map +1 -0
  83. package/dist/node-types/wait-for-url.js +17 -0
  84. package/dist/node-types/wait-for-url.js.map +1 -0
  85. package/dist/patterns/docker-build-push.d.ts +13 -0
  86. package/dist/patterns/docker-build-push.d.ts.map +1 -0
  87. package/dist/patterns/docker-build-push.js +14 -0
  88. package/dist/patterns/docker-build-push.js.map +1 -0
  89. package/dist/patterns/index.d.ts +2 -0
  90. package/dist/patterns/index.d.ts.map +1 -0
  91. package/dist/patterns/index.js +8 -0
  92. package/dist/patterns/index.js.map +1 -0
  93. package/dist/patterns/multi-env-deploy.d.ts +18 -0
  94. package/dist/patterns/multi-env-deploy.d.ts.map +1 -0
  95. package/dist/patterns/multi-env-deploy.js +19 -0
  96. package/dist/patterns/multi-env-deploy.js.map +1 -0
  97. package/dist/patterns/test-and-deploy.d.ts +15 -0
  98. package/dist/patterns/test-and-deploy.d.ts.map +1 -0
  99. package/dist/patterns/test-and-deploy.js +16 -0
  100. package/dist/patterns/test-and-deploy.js.map +1 -0
  101. package/dist/register.d.ts +9 -0
  102. package/dist/register.d.ts.map +1 -0
  103. package/dist/register.js +25 -0
  104. package/dist/register.js.map +1 -0
  105. package/dist/rules.d.ts +19 -0
  106. package/dist/rules.d.ts.map +1 -0
  107. package/dist/rules.js +247 -0
  108. package/dist/rules.js.map +1 -0
  109. package/dist/secrets-doc.d.ts +9 -0
  110. package/dist/secrets-doc.d.ts.map +1 -0
  111. package/dist/secrets-doc.js +47 -0
  112. package/dist/secrets-doc.js.map +1 -0
  113. package/dist/secrets.d.ts +19 -0
  114. package/dist/secrets.d.ts.map +1 -0
  115. package/dist/secrets.js +50 -0
  116. package/dist/secrets.js.map +1 -0
  117. package/dist/tag-handler.d.ts +12 -0
  118. package/dist/tag-handler.d.ts.map +1 -0
  119. package/dist/tag-handler.js +498 -0
  120. package/dist/tag-handler.js.map +1 -0
  121. package/dist/types.d.ts +90 -0
  122. package/dist/types.d.ts.map +1 -0
  123. package/dist/types.js +9 -0
  124. package/dist/types.js.map +1 -0
  125. package/flowweaver.manifest.json +514 -0
  126. package/package.json +44 -0
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @flowWeaver pattern
3
+ * @name test-and-deploy
4
+ * @description Standard CI pipeline: checkout, setup, install, test, build, deploy
5
+ *
6
+ * @node co checkout [job: "test"]
7
+ * @node setup setup-node [job: "test"]
8
+ * @node install npm-install [job: "test"]
9
+ * @node test npm-test [job: "test"]
10
+ * @node build npm-build [job: "build"]
11
+ * @node deploy deploy-ssh [job: "deploy"]
12
+ *
13
+ * @path IN -> co -> setup -> install -> test -> build -> deploy -> OUT
14
+ */
15
+ //# sourceMappingURL=test-and-deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-and-deploy.d.ts","sourceRoot":"","sources":["../../src/patterns/test-and-deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /**
3
+ * @flowWeaver pattern
4
+ * @name test-and-deploy
5
+ * @description Standard CI pipeline: checkout, setup, install, test, build, deploy
6
+ *
7
+ * @node co checkout [job: "test"]
8
+ * @node setup setup-node [job: "test"]
9
+ * @node install npm-install [job: "test"]
10
+ * @node test npm-test [job: "test"]
11
+ * @node build npm-build [job: "build"]
12
+ * @node deploy deploy-ssh [job: "deploy"]
13
+ *
14
+ * @path IN -> co -> setup -> install -> test -> build -> deploy -> OUT
15
+ */
16
+ //# sourceMappingURL=test-and-deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-and-deploy.js","sourceRoot":"","sources":["../../src/patterns/test-and-deploy.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CI/CD pack self-registration module.
3
+ *
4
+ * Registers tag handlers and validation rules through the core
5
+ * registry APIs. This module can be imported as a side-effect,
6
+ * or the pack can be discovered via manifest-based discovery.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * CI/CD pack self-registration module.
3
+ *
4
+ * Registers tag handlers and validation rules through the core
5
+ * registry APIs. This module can be imported as a side-effect,
6
+ * or the pack can be discovered via manifest-based discovery.
7
+ */
8
+ import { tagHandlerRegistry, validationRuleRegistry, } from '@synergenius/flow-weaver/api';
9
+ import { cicdTagHandler } from './tag-handler.js';
10
+ import { isCICDWorkflow } from './detection.js';
11
+ import { getCICDValidationRules } from './rules.js';
12
+ // ── Tag handlers ────────────────────────────────────────────────────────────
13
+ tagHandlerRegistry.register([
14
+ 'secret', 'runner', 'cache', 'artifact', 'environment', 'matrix',
15
+ 'service', 'concurrency', 'job', 'stage', 'variables',
16
+ 'before_script', 'tags', 'includes', '_cicdTrigger',
17
+ ], 'cicd', 'workflow', cicdTagHandler);
18
+ // ── Validation rules ────────────────────────────────────────────────────────
19
+ validationRuleRegistry.register({
20
+ name: 'CI/CD Rules',
21
+ namespace: 'cicd',
22
+ detect: isCICDWorkflow,
23
+ getRules: getCICDValidationRules,
24
+ });
25
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,+EAA+E;AAE/E,kBAAkB,CAAC,QAAQ,CACzB;IACE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ;IAChE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW;IACrD,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc;CACpD,EACD,MAAM,EACN,UAAU,EACV,cAAc,CACf,CAAC;AAEF,+EAA+E;AAE/E,sBAAsB,CAAC,QAAQ,CAAC;IAC9B,IAAI,EAAE,aAAa;IACnB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,cAAc;IACtB,QAAQ,EAAE,sBAAsB;CACjC,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * CI/CD validation rules.
3
+ *
4
+ * 9 rules for CI/CD pipeline workflows, registered via the
5
+ * ValidationRuleRegistry when this pack is discovered.
6
+ */
7
+ import type { TValidationRule } from '@synergenius/flow-weaver/ast';
8
+ export declare const secretNotDeclaredRule: TValidationRule;
9
+ export declare const secretUnusedRule: TValidationRule;
10
+ export declare const triggerMissingRule: TValidationRule;
11
+ export declare const jobMissingRunnerRule: TValidationRule;
12
+ export declare const artifactCrossJobRule: TValidationRule;
13
+ export declare const circularJobDepsRule: TValidationRule;
14
+ export declare const matrixWithEnvironmentRule: TValidationRule;
15
+ export declare const jobConfigOrphanRule: TValidationRule;
16
+ export declare const stageOrphanRule: TValidationRule;
17
+ export declare const cicdValidationRules: TValidationRule[];
18
+ export declare function getCICDValidationRules(): TValidationRule[];
19
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,8BAA8B,CAAC;AAOtC,eAAO,MAAM,qBAAqB,EAAE,eAmBnC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAmB9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAmBhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAmBlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAsClC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eA2DjC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,eA0BvC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAmBjC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAyB7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAAe,EAUhD,CAAC;AAEF,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAE1D"}
package/dist/rules.js ADDED
@@ -0,0 +1,247 @@
1
+ /**
2
+ * CI/CD validation rules.
3
+ *
4
+ * 9 rules for CI/CD pipeline workflows, registered via the
5
+ * ValidationRuleRegistry when this pack is discovered.
6
+ */
7
+ import { getDeclaredSecrets, getReferencedSecrets, getJobNames, } from './detection.js';
8
+ export const secretNotDeclaredRule = {
9
+ name: 'CICD_SECRET_NOT_DECLARED',
10
+ validate(ast) {
11
+ const errors = [];
12
+ const declared = new Set(getDeclaredSecrets(ast));
13
+ const referenced = getReferencedSecrets(ast);
14
+ for (const secretName of referenced) {
15
+ if (!declared.has(secretName)) {
16
+ errors.push({
17
+ type: 'error',
18
+ code: 'CICD_SECRET_NOT_DECLARED',
19
+ message: `Secret '${secretName}' is referenced via @connect but not declared with @secret. Add: @secret ${secretName} - description`,
20
+ });
21
+ }
22
+ }
23
+ return errors;
24
+ },
25
+ };
26
+ export const secretUnusedRule = {
27
+ name: 'CICD_SECRET_UNUSED',
28
+ validate(ast) {
29
+ const errors = [];
30
+ const referenced = new Set(getReferencedSecrets(ast));
31
+ const declared = getDeclaredSecrets(ast);
32
+ for (const secretName of declared) {
33
+ if (!referenced.has(secretName)) {
34
+ errors.push({
35
+ type: 'warning',
36
+ code: 'CICD_SECRET_UNUSED',
37
+ message: `Secret '${secretName}' is declared but not wired to any node. If used in a shell command, this is fine. Otherwise, wire it with: @connect secret:${secretName} -> node.port`,
38
+ });
39
+ }
40
+ }
41
+ return errors;
42
+ },
43
+ };
44
+ export const triggerMissingRule = {
45
+ name: 'CICD_TRIGGER_MISSING',
46
+ validate(ast) {
47
+ const triggers = ast.options?.cicd?.triggers || [];
48
+ const fwTrigger = ast.options?.trigger;
49
+ if (triggers.length === 0 && !fwTrigger) {
50
+ return [
51
+ {
52
+ type: 'warning',
53
+ code: 'CICD_TRIGGER_MISSING',
54
+ message: 'No trigger annotations found. The pipeline will never run automatically. Add at least one: @trigger push branches="main" or @trigger dispatch',
55
+ },
56
+ ];
57
+ }
58
+ return [];
59
+ },
60
+ };
61
+ export const jobMissingRunnerRule = {
62
+ name: 'CICD_JOB_MISSING_RUNNER',
63
+ validate(ast) {
64
+ const errors = [];
65
+ const defaultRunner = ast.options?.cicd?.runner;
66
+ const jobNames = getJobNames(ast);
67
+ if (defaultRunner)
68
+ return [];
69
+ if (jobNames.length > 0) {
70
+ errors.push({
71
+ type: 'warning',
72
+ code: 'CICD_JOB_MISSING_RUNNER',
73
+ message: `No @runner annotation found. Jobs (${jobNames.join(', ')}) will use platform defaults. Add: @runner ubuntu-latest`,
74
+ });
75
+ }
76
+ return errors;
77
+ },
78
+ };
79
+ export const artifactCrossJobRule = {
80
+ name: 'CICD_ARTIFACT_CROSS_JOB',
81
+ validate(ast) {
82
+ const errors = [];
83
+ const artifacts = ast.options?.cicd?.artifacts || [];
84
+ const nodeJob = new Map();
85
+ for (const inst of ast.instances) {
86
+ if (inst.job)
87
+ nodeJob.set(inst.id, inst.job);
88
+ }
89
+ const crossJobPairs = new Set();
90
+ for (const conn of ast.connections) {
91
+ if (conn.from.node.startsWith('secret:'))
92
+ continue;
93
+ if (conn.from.node === 'Start' || conn.to.node === 'Exit')
94
+ continue;
95
+ const fromJob = nodeJob.get(conn.from.node);
96
+ const toJob = nodeJob.get(conn.to.node);
97
+ if (fromJob && toJob && fromJob !== toJob) {
98
+ const pairKey = `${fromJob}->${toJob}`;
99
+ if (!crossJobPairs.has(pairKey)) {
100
+ crossJobPairs.add(pairKey);
101
+ }
102
+ }
103
+ }
104
+ if (crossJobPairs.size > 0 && artifacts.length === 0) {
105
+ const pairs = Array.from(crossJobPairs);
106
+ errors.push({
107
+ type: 'warning',
108
+ code: 'CICD_ARTIFACT_CROSS_JOB',
109
+ message: `Data flows between jobs (${pairs.join(', ')}) but no @artifact is declared. In CI/CD, each job runs in a fresh environment. Add @artifact declarations to pass data between jobs.`,
110
+ });
111
+ }
112
+ return errors;
113
+ },
114
+ };
115
+ export const circularJobDepsRule = {
116
+ name: 'CICD_CIRCULAR_JOB_DEPS',
117
+ validate(ast) {
118
+ const errors = [];
119
+ const nodeJob = new Map();
120
+ for (const inst of ast.instances) {
121
+ if (inst.job)
122
+ nodeJob.set(inst.id, inst.job);
123
+ }
124
+ const jobDeps = new Map();
125
+ for (const conn of ast.connections) {
126
+ if (conn.from.node.startsWith('secret:'))
127
+ continue;
128
+ if (conn.from.node === 'Start' || conn.to.node === 'Exit')
129
+ continue;
130
+ const fromJob = nodeJob.get(conn.from.node);
131
+ const toJob = nodeJob.get(conn.to.node);
132
+ if (fromJob && toJob && fromJob !== toJob) {
133
+ if (!jobDeps.has(toJob))
134
+ jobDeps.set(toJob, new Set());
135
+ jobDeps.get(toJob).add(fromJob);
136
+ }
137
+ }
138
+ const visited = new Set();
139
+ const inStack = new Set();
140
+ function hasCycle(job) {
141
+ if (inStack.has(job))
142
+ return true;
143
+ if (visited.has(job))
144
+ return false;
145
+ visited.add(job);
146
+ inStack.add(job);
147
+ const deps = jobDeps.get(job);
148
+ if (deps) {
149
+ for (const dep of deps) {
150
+ if (hasCycle(dep))
151
+ return true;
152
+ }
153
+ }
154
+ inStack.delete(job);
155
+ return false;
156
+ }
157
+ const allJobs = getJobNames(ast);
158
+ for (const job of allJobs) {
159
+ if (hasCycle(job)) {
160
+ errors.push({
161
+ type: 'error',
162
+ code: 'CICD_CIRCULAR_JOB_DEPS',
163
+ message: `Circular dependency detected involving job '${job}'. CI/CD platforms require a directed acyclic graph of job dependencies.`,
164
+ });
165
+ break;
166
+ }
167
+ }
168
+ return errors;
169
+ },
170
+ };
171
+ export const matrixWithEnvironmentRule = {
172
+ name: 'CICD_MATRIX_WITH_ENVIRONMENT',
173
+ validate(ast) {
174
+ const errors = [];
175
+ const matrix = ast.options?.cicd?.matrix;
176
+ const environments = ast.options?.cicd?.environments || [];
177
+ if (matrix && environments.length > 0) {
178
+ const dimensions = matrix.include
179
+ ? matrix.include.length
180
+ : Object.values(matrix.dimensions || {}).reduce((acc, vals) => acc * vals.length, 1);
181
+ if (dimensions > 1) {
182
+ errors.push({
183
+ type: 'warning',
184
+ code: 'CICD_MATRIX_WITH_ENVIRONMENT',
185
+ message: `Using @matrix (${dimensions} combinations) with @environment protection will trigger ${dimensions} approval prompts per deployment. Consider separating the matrix job from the deploy job.`,
186
+ });
187
+ }
188
+ }
189
+ return errors;
190
+ },
191
+ };
192
+ export const jobConfigOrphanRule = {
193
+ name: 'CICD_JOB_CONFIG_ORPHAN',
194
+ validate(ast) {
195
+ const errors = [];
196
+ const jobConfigs = ast.options?.cicd?.jobs || [];
197
+ const actualJobs = new Set(getJobNames(ast));
198
+ for (const jc of jobConfigs) {
199
+ if (!actualJobs.has(jc.id)) {
200
+ errors.push({
201
+ type: 'warning',
202
+ code: 'CICD_JOB_CONFIG_ORPHAN',
203
+ message: `@job '${jc.id}' is configured but no node uses [job: "${jc.id}"]. Check for typos or add a node with that job attribute.`,
204
+ });
205
+ }
206
+ }
207
+ return errors;
208
+ },
209
+ };
210
+ export const stageOrphanRule = {
211
+ name: 'CICD_STAGE_ORPHAN',
212
+ validate(ast) {
213
+ const errors = [];
214
+ const stages = ast.options?.cicd?.stages || [];
215
+ if (stages.length === 0)
216
+ return [];
217
+ const jobNames = getJobNames(ast);
218
+ if (jobNames.length === 0)
219
+ return [];
220
+ for (const stage of stages) {
221
+ const hasMatch = jobNames.some(j => j === stage.name || j.startsWith(stage.name + '-') || j.startsWith(stage.name + '_'));
222
+ if (!hasMatch && jobNames.length > 0) {
223
+ errors.push({
224
+ type: 'warning',
225
+ code: 'CICD_STAGE_ORPHAN',
226
+ message: `Stage '${stage.name}' has no jobs matching by name prefix. Jobs will be assigned by dependency depth.`,
227
+ });
228
+ }
229
+ }
230
+ return errors;
231
+ },
232
+ };
233
+ export const cicdValidationRules = [
234
+ secretNotDeclaredRule,
235
+ secretUnusedRule,
236
+ triggerMissingRule,
237
+ jobMissingRunnerRule,
238
+ artifactCrossJobRule,
239
+ circularJobDepsRule,
240
+ matrixWithEnvironmentRule,
241
+ jobConfigOrphanRule,
242
+ stageOrphanRule,
243
+ ];
244
+ export function getCICDValidationRules() {
245
+ return cicdValidationRules;
246
+ }
247
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SECRETS_SETUP.md generator for CI/CD workflows.
3
+ */
4
+ import type { TCICDSecret } from '@synergenius/flow-weaver/ast';
5
+ /**
6
+ * Generate a SECRETS_SETUP.md document with platform-specific instructions.
7
+ */
8
+ export declare function generateSecretsDoc(secrets: TCICDSecret[], platform: string): string;
9
+ //# sourceMappingURL=secrets-doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-doc.d.ts","sourceRoot":"","sources":["../src/secrets-doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA4CnF"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * SECRETS_SETUP.md generator for CI/CD workflows.
3
+ */
4
+ /**
5
+ * Generate a SECRETS_SETUP.md document with platform-specific instructions.
6
+ */
7
+ export function generateSecretsDoc(secrets, platform) {
8
+ if (secrets.length === 0)
9
+ return '';
10
+ const lines = [
11
+ '# Secrets Setup Guide',
12
+ '',
13
+ `This workflow requires ${secrets.length} secret(s) to be configured.`,
14
+ '',
15
+ ];
16
+ for (const secret of secrets) {
17
+ lines.push(`## ${secret.name}`);
18
+ if (secret.description) {
19
+ lines.push(`> ${secret.description}`);
20
+ }
21
+ lines.push('');
22
+ if (platform === 'github-actions' || secret.platform === 'all' || secret.platform === 'github' || !secret.platform) {
23
+ lines.push('**GitHub Actions:**');
24
+ lines.push('1. Go to your repository on GitHub');
25
+ lines.push('2. Navigate to Settings > Secrets and variables > Actions');
26
+ lines.push('3. Click "New repository secret"');
27
+ lines.push(`4. Name: \`${secret.name}\``);
28
+ lines.push('5. Paste your secret value and click "Add secret"');
29
+ lines.push('');
30
+ }
31
+ if (platform === 'gitlab-ci' || secret.platform === 'all' || secret.platform === 'gitlab' || !secret.platform) {
32
+ lines.push('**GitLab CI:**');
33
+ lines.push('1. Go to your project on GitLab');
34
+ lines.push('2. Navigate to Settings > CI/CD > Variables');
35
+ lines.push('3. Click "Add variable"');
36
+ lines.push(`4. Key: \`${secret.name}\``);
37
+ lines.push('5. Paste your secret value');
38
+ lines.push('6. Check "Mask variable" and optionally "Protect variable"');
39
+ lines.push('7. Click "Add variable"');
40
+ lines.push('');
41
+ }
42
+ lines.push('---');
43
+ lines.push('');
44
+ }
45
+ return lines.join('\n');
46
+ }
47
+ //# sourceMappingURL=secrets-doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-doc.js","sourceRoot":"","sources":["../src/secrets-doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAsB,EAAE,QAAgB;IACzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAa;QACtB,uBAAuB;QACvB,EAAE;QACF,0BAA0B,OAAO,CAAC,MAAM,8BAA8B;QACtE,EAAE;KACH,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,IAAI,QAAQ,KAAK,gBAAgB,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnH,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC9G,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Secret resolution for CI/CD jobs.
3
+ *
4
+ * Walks connections to find secret: pseudo-node references and wires
5
+ * them into the appropriate jobs as environment variables.
6
+ */
7
+ import type { TWorkflowAST } from '@synergenius/flow-weaver/ast';
8
+ import type { CICDJob } from './types.js';
9
+ /**
10
+ * Resolve secret connections from the AST and attach them to jobs.
11
+ *
12
+ * For each `@connect secret:NAME -> node.port` connection, adds the secret
13
+ * to the target job's secrets list and sets `step.env[PORT_NAME]` to the
14
+ * platform-specific reference (e.g. `${{ secrets.NAME }}`).
15
+ *
16
+ * @param renderSecretRef Platform-specific renderer, e.g. `(name) => \`\${{ secrets.${name} }}\``
17
+ */
18
+ export declare function resolveJobSecrets(jobs: CICDJob[], ast: TWorkflowAST, renderSecretRef: (name: string) => string): void;
19
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,YAAY,CAAC;AAEpD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EAAE,EACf,GAAG,EAAE,YAAY,EACjB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACxC,IAAI,CAqCN"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Secret resolution for CI/CD jobs.
3
+ *
4
+ * Walks connections to find secret: pseudo-node references and wires
5
+ * them into the appropriate jobs as environment variables.
6
+ */
7
+ /**
8
+ * Resolve secret connections from the AST and attach them to jobs.
9
+ *
10
+ * For each `@connect secret:NAME -> node.port` connection, adds the secret
11
+ * to the target job's secrets list and sets `step.env[PORT_NAME]` to the
12
+ * platform-specific reference (e.g. `${{ secrets.NAME }}`).
13
+ *
14
+ * @param renderSecretRef Platform-specific renderer, e.g. `(name) => \`\${{ secrets.${name} }}\``
15
+ */
16
+ export function resolveJobSecrets(jobs, ast, renderSecretRef) {
17
+ const nodeJob = new Map();
18
+ for (const inst of ast.instances) {
19
+ nodeJob.set(inst.id, inst.job || 'default');
20
+ }
21
+ const stepMap = new Map();
22
+ for (const job of jobs) {
23
+ for (const step of job.steps) {
24
+ stepMap.set(step.id, step);
25
+ }
26
+ }
27
+ for (const conn of ast.connections) {
28
+ if (!conn.from.node.startsWith('secret:'))
29
+ continue;
30
+ const secretName = conn.from.node.substring(7);
31
+ const targetNode = conn.to.node;
32
+ const targetPort = conn.to.port;
33
+ const jobId = nodeJob.get(targetNode);
34
+ if (!jobId)
35
+ continue;
36
+ const job = jobs.find((j) => j.id === jobId);
37
+ if (!job)
38
+ continue;
39
+ if (!job.secrets.includes(secretName)) {
40
+ job.secrets.push(secretName);
41
+ }
42
+ const step = stepMap.get(targetNode);
43
+ if (step) {
44
+ step.env = step.env || {};
45
+ step.env[targetPort.replace(/([A-Z])/g, '_$1').toUpperCase().replace(/^_/, '')] =
46
+ renderSecretRef(secretName);
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAe,EACf,GAAiB,EACjB,eAAyC;IAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEtC,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC7E,eAAe,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CI/CD tag handler for the TagHandlerRegistry.
3
+ *
4
+ * Handles all CI/CD annotation tags: @secret, @runner, @cache, @artifact,
5
+ * @environment, @matrix, @service, @concurrency, @job, @stage, @variables,
6
+ * @before_script, @tags, @includes, plus the synthetic _cicdTrigger tag.
7
+ *
8
+ * Extracted from core's src/extensions/cicd/tag-handler.ts.
9
+ */
10
+ import type { TTagHandlerFn } from '@synergenius/flow-weaver/api';
11
+ export declare const cicdTagHandler: TTagHandlerFn;
12
+ //# sourceMappingURL=tag-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-handler.d.ts","sourceRoot":"","sources":["../src/tag-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,eAAO,MAAM,cAAc,EAAE,aAsD5B,CAAC"}