@actions/languageservice 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 (188) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +131 -0
  3. package/dist/action.d.ts +28 -0
  4. package/dist/action.d.ts.map +1 -0
  5. package/dist/action.js +36 -0
  6. package/dist/action.js.map +1 -0
  7. package/dist/complete.d.ts +15 -0
  8. package/dist/complete.d.ts.map +1 -0
  9. package/dist/complete.js +203 -0
  10. package/dist/complete.js.map +1 -0
  11. package/dist/context/workflow-context.d.ts +15 -0
  12. package/dist/context/workflow-context.d.ts.map +1 -0
  13. package/dist/context/workflow-context.js +64 -0
  14. package/dist/context/workflow-context.js.map +1 -0
  15. package/dist/context-providers/config.d.ts +7 -0
  16. package/dist/context-providers/config.d.ts.map +1 -0
  17. package/dist/context-providers/config.js +2 -0
  18. package/dist/context-providers/config.js.map +1 -0
  19. package/dist/context-providers/default.d.ts +11 -0
  20. package/dist/context-providers/default.d.ts.map +1 -0
  21. package/dist/context-providers/default.js +88 -0
  22. package/dist/context-providers/default.js.map +1 -0
  23. package/dist/context-providers/descriptions.d.ts +15 -0
  24. package/dist/context-providers/descriptions.d.ts.map +1 -0
  25. package/dist/context-providers/descriptions.js +23 -0
  26. package/dist/context-providers/descriptions.js.map +1 -0
  27. package/dist/context-providers/descriptions.json +241 -0
  28. package/dist/context-providers/env.d.ts +4 -0
  29. package/dist/context-providers/env.d.ts.map +1 -0
  30. package/dist/context-providers/env.js +29 -0
  31. package/dist/context-providers/env.js.map +1 -0
  32. package/dist/context-providers/events/eventPayloads.d.ts +4 -0
  33. package/dist/context-providers/events/eventPayloads.d.ts.map +1 -0
  34. package/dist/context-providers/events/eventPayloads.js +111 -0
  35. package/dist/context-providers/events/eventPayloads.js.map +1 -0
  36. package/dist/context-providers/events/objects.json +26220 -0
  37. package/dist/context-providers/events/schedule.json +102 -0
  38. package/dist/context-providers/events/webhooks.json +124811 -0
  39. package/dist/context-providers/events/workflow_call.json +134 -0
  40. package/dist/context-providers/github.d.ts +5 -0
  41. package/dist/context-providers/github.d.ts.map +1 -0
  42. package/dist/context-providers/github.js +139 -0
  43. package/dist/context-providers/github.js.map +1 -0
  44. package/dist/context-providers/inputs.d.ts +4 -0
  45. package/dist/context-providers/inputs.d.ts.map +1 -0
  46. package/dist/context-providers/inputs.js +52 -0
  47. package/dist/context-providers/inputs.js.map +1 -0
  48. package/dist/context-providers/job.d.ts +4 -0
  49. package/dist/context-providers/job.d.ts.map +1 -0
  50. package/dist/context-providers/job.js +61 -0
  51. package/dist/context-providers/job.js.map +1 -0
  52. package/dist/context-providers/jobs.d.ts +4 -0
  53. package/dist/context-providers/jobs.d.ts.map +1 -0
  54. package/dist/context-providers/jobs.js +30 -0
  55. package/dist/context-providers/jobs.js.map +1 -0
  56. package/dist/context-providers/matrix.d.ts +4 -0
  57. package/dist/context-providers/matrix.d.ts.map +1 -0
  58. package/dist/context-providers/matrix.js +163 -0
  59. package/dist/context-providers/matrix.js.map +1 -0
  60. package/dist/context-providers/needs.d.ts +4 -0
  61. package/dist/context-providers/needs.d.ts.map +1 -0
  62. package/dist/context-providers/needs.js +56 -0
  63. package/dist/context-providers/needs.js.map +1 -0
  64. package/dist/context-providers/secrets.d.ts +5 -0
  65. package/dist/context-providers/secrets.d.ts.map +1 -0
  66. package/dist/context-providers/secrets.js +23 -0
  67. package/dist/context-providers/secrets.js.map +1 -0
  68. package/dist/context-providers/steps.d.ts +4 -0
  69. package/dist/context-providers/steps.d.ts.map +1 -0
  70. package/dist/context-providers/steps.js +35 -0
  71. package/dist/context-providers/steps.js.map +1 -0
  72. package/dist/context-providers/strategy.d.ts +4 -0
  73. package/dist/context-providers/strategy.d.ts.map +1 -0
  74. package/dist/context-providers/strategy.js +31 -0
  75. package/dist/context-providers/strategy.js.map +1 -0
  76. package/dist/description-providers/reusable-job-inputs.d.ts +5 -0
  77. package/dist/description-providers/reusable-job-inputs.d.ts.map +1 -0
  78. package/dist/description-providers/reusable-job-inputs.js +29 -0
  79. package/dist/description-providers/reusable-job-inputs.js.map +1 -0
  80. package/dist/document-links.d.ts +4 -0
  81. package/dist/document-links.d.ts.map +1 -0
  82. package/dist/document-links.js +73 -0
  83. package/dist/document-links.js.map +1 -0
  84. package/dist/expression-hover/expression-pos.d.ts +13 -0
  85. package/dist/expression-hover/expression-pos.d.ts.map +1 -0
  86. package/dist/expression-hover/expression-pos.js +41 -0
  87. package/dist/expression-hover/expression-pos.js.map +1 -0
  88. package/dist/expression-hover/pos-range.d.ts +3 -0
  89. package/dist/expression-hover/pos-range.d.ts.map +1 -0
  90. package/dist/expression-hover/pos-range.js +7 -0
  91. package/dist/expression-hover/pos-range.js.map +1 -0
  92. package/dist/expression-hover/visitor.d.ts +27 -0
  93. package/dist/expression-hover/visitor.d.ts.map +1 -0
  94. package/dist/expression-hover/visitor.js +116 -0
  95. package/dist/expression-hover/visitor.js.map +1 -0
  96. package/dist/expression-validation/error-dictionary.d.ts +13 -0
  97. package/dist/expression-validation/error-dictionary.d.ts.map +1 -0
  98. package/dist/expression-validation/error-dictionary.js +39 -0
  99. package/dist/expression-validation/error-dictionary.js.map +1 -0
  100. package/dist/expression-validation/functions.d.ts +9 -0
  101. package/dist/expression-validation/functions.d.ts.map +1 -0
  102. package/dist/expression-validation/functions.js +11 -0
  103. package/dist/expression-validation/functions.js.map +1 -0
  104. package/dist/hover.d.ts +16 -0
  105. package/dist/hover.d.ts.map +1 -0
  106. package/dist/hover.js +154 -0
  107. package/dist/hover.js.map +1 -0
  108. package/dist/index.d.ts +8 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +7 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/log.d.ts +39 -0
  113. package/dist/log.d.ts.map +1 -0
  114. package/dist/log.js +48 -0
  115. package/dist/log.js.map +1 -0
  116. package/dist/nulltrace.d.ts +3 -0
  117. package/dist/nulltrace.d.ts.map +1 -0
  118. package/dist/nulltrace.js +3 -0
  119. package/dist/nulltrace.js.map +1 -0
  120. package/dist/utils/expression-detection.d.ts +3 -0
  121. package/dist/utils/expression-detection.d.ts.map +1 -0
  122. package/dist/utils/expression-detection.js +9 -0
  123. package/dist/utils/expression-detection.js.map +1 -0
  124. package/dist/utils/find-token.d.ts +23 -0
  125. package/dist/utils/find-token.d.ts.map +1 -0
  126. package/dist/utils/find-token.js +159 -0
  127. package/dist/utils/find-token.js.map +1 -0
  128. package/dist/utils/indentation-guesser.d.ts +16 -0
  129. package/dist/utils/indentation-guesser.d.ts.map +1 -0
  130. package/dist/utils/indentation-guesser.js +214 -0
  131. package/dist/utils/indentation-guesser.js.map +1 -0
  132. package/dist/utils/range.d.ts +5 -0
  133. package/dist/utils/range.d.ts.map +1 -0
  134. package/dist/utils/range.js +25 -0
  135. package/dist/utils/range.js.map +1 -0
  136. package/dist/utils/rel-char-pos.d.ts +4 -0
  137. package/dist/utils/rel-char-pos.d.ts.map +1 -0
  138. package/dist/utils/rel-char-pos.js +14 -0
  139. package/dist/utils/rel-char-pos.js.map +1 -0
  140. package/dist/utils/scalar-to-data.d.ts +4 -0
  141. package/dist/utils/scalar-to-data.d.ts.map +1 -0
  142. package/dist/utils/scalar-to-data.js +19 -0
  143. package/dist/utils/scalar-to-data.js.map +1 -0
  144. package/dist/utils/transform.d.ts +6 -0
  145. package/dist/utils/transform.d.ts.map +1 -0
  146. package/dist/utils/transform.js +66 -0
  147. package/dist/utils/transform.js.map +1 -0
  148. package/dist/utils/workflow-cache.d.ts +21 -0
  149. package/dist/utils/workflow-cache.d.ts.map +1 -0
  150. package/dist/utils/workflow-cache.js +52 -0
  151. package/dist/utils/workflow-cache.js.map +1 -0
  152. package/dist/validate-action.d.ts +6 -0
  153. package/dist/validate-action.d.ts.map +1 -0
  154. package/dist/validate-action.js +71 -0
  155. package/dist/validate-action.js.map +1 -0
  156. package/dist/validate.d.ts +20 -0
  157. package/dist/validate.d.ts.map +1 -0
  158. package/dist/validate.js +162 -0
  159. package/dist/validate.js.map +1 -0
  160. package/dist/value-providers/config.d.ts +24 -0
  161. package/dist/value-providers/config.d.ts.map +1 -0
  162. package/dist/value-providers/config.js +6 -0
  163. package/dist/value-providers/config.js.map +1 -0
  164. package/dist/value-providers/default.d.ts +4 -0
  165. package/dist/value-providers/default.d.ts.map +1 -0
  166. package/dist/value-providers/default.js +38 -0
  167. package/dist/value-providers/default.js.map +1 -0
  168. package/dist/value-providers/definition.d.ts +4 -0
  169. package/dist/value-providers/definition.d.ts.map +1 -0
  170. package/dist/value-providers/definition.js +82 -0
  171. package/dist/value-providers/definition.js.map +1 -0
  172. package/dist/value-providers/needs.d.ts +4 -0
  173. package/dist/value-providers/needs.d.ts.map +1 -0
  174. package/dist/value-providers/needs.js +10 -0
  175. package/dist/value-providers/needs.js.map +1 -0
  176. package/dist/value-providers/reusable-job-inputs.d.ts +4 -0
  177. package/dist/value-providers/reusable-job-inputs.d.ts.map +1 -0
  178. package/dist/value-providers/reusable-job-inputs.js +29 -0
  179. package/dist/value-providers/reusable-job-inputs.js.map +1 -0
  180. package/dist/value-providers/reusable-job-secrets.d.ts +4 -0
  181. package/dist/value-providers/reusable-job-secrets.d.ts.map +1 -0
  182. package/dist/value-providers/reusable-job-secrets.js +41 -0
  183. package/dist/value-providers/reusable-job-secrets.js.map +1 -0
  184. package/dist/value-providers/strings-to-values.d.ts +3 -0
  185. package/dist/value-providers/strings-to-values.d.ts.map +1 -0
  186. package/dist/value-providers/strings-to-values.js +4 -0
  187. package/dist/value-providers/strings-to-values.js.map +1 -0
  188. package/package.json +77 -0
@@ -0,0 +1,52 @@
1
+ import { convertWorkflowTemplate, parseWorkflow } from "@actions/workflow-parser";
2
+ import { nullTrace } from "../nulltrace";
3
+ const parsedWorkflowCache = new Map();
4
+ const workflowTemplateCache = new Map();
5
+ export function clearCacheEntry(uri) {
6
+ parsedWorkflowCache.delete(uri);
7
+ parsedWorkflowCache.delete(workflowKey(uri, true));
8
+ workflowTemplateCache.delete(uri);
9
+ workflowTemplateCache.delete(workflowKey(uri, true));
10
+ }
11
+ export function clearCache() {
12
+ parsedWorkflowCache.clear();
13
+ workflowTemplateCache.clear();
14
+ }
15
+ /**
16
+ * Parses a workflow file and caches the result
17
+ * @param transformed Indicates whether the workflow has been transformed before parsing
18
+ * @returns the {@link ParseWorkflowResult}
19
+ */
20
+ export function fetchOrParseWorkflow(file, uri, transformed = false) {
21
+ const key = workflowKey(uri, transformed);
22
+ const cachedResult = parsedWorkflowCache.get(key);
23
+ if (cachedResult) {
24
+ return cachedResult;
25
+ }
26
+ const result = parseWorkflow(file, nullTrace);
27
+ parsedWorkflowCache.set(key, result);
28
+ return result;
29
+ }
30
+ /**
31
+ * Converts a workflow template and caches the result
32
+ * @param transformed Indicates whether the workflow has been transformed before parsing
33
+ * @returns the converted {@link WorkflowTemplate}
34
+ */
35
+ export async function fetchOrConvertWorkflowTemplate(context, template, uri, config, options, transformed = false) {
36
+ const key = workflowKey(uri, transformed);
37
+ const cachedTemplate = workflowTemplateCache.get(key);
38
+ if (cachedTemplate) {
39
+ return cachedTemplate;
40
+ }
41
+ const workflowTemplate = await convertWorkflowTemplate(context, template, config?.fileProvider, options);
42
+ workflowTemplateCache.set(key, workflowTemplate);
43
+ return workflowTemplate;
44
+ }
45
+ // Use a separate cache key for transformed workflows
46
+ function workflowKey(uri, transformed) {
47
+ if (transformed) {
48
+ return `transformed-${uri}`;
49
+ }
50
+ return uri;
51
+ }
52
+ //# sourceMappingURL=workflow-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-cache.js","sourceRoot":"","sources":["../../src/utils/workflow-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAE,aAAa,EAAwC,MAAM,0BAA0B,CAAC;AAOvH,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAEvC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAA+B,CAAC;AACnE,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAA4B,CAAC;AAElE,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACnD,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,mBAAmB,CAAC,KAAK,EAAE,CAAC;IAC5B,qBAAqB,CAAC,KAAK,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAU,EAAE,GAAW,EAAE,WAAW,GAAG,KAAK;IAC/E,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,YAAY,EAAE;QAChB,OAAO,YAAY,CAAC;KACrB;IACD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9C,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,OAAwB,EACxB,QAAuB,EACvB,GAAW,EACX,MAAyB,EACzB,OAA0C,EAC1C,WAAW,GAAG,KAAK;IAEnB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,cAAc,EAAE;QAClB,OAAO,cAAc,CAAC;KACvB;IACD,MAAM,gBAAgB,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACzG,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACjD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,qDAAqD;AACrD,SAAS,WAAW,CAAC,GAAW,EAAE,WAAoB;IACpD,IAAI,WAAW,EAAE;QACf,OAAO,eAAe,GAAG,EAAE,CAAC;KAC7B;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Step } from "@actions/workflow-parser/model/workflow-template";
2
+ import { TemplateToken } from "@actions/workflow-parser/templates/tokens/template-token";
3
+ import { Diagnostic } from "vscode-languageserver-types";
4
+ import { ValidationConfig } from "./validate";
5
+ export declare function validateAction(diagnostics: Diagnostic[], stepToken: TemplateToken, step: Step | undefined, config: ValidationConfig | undefined): Promise<void>;
6
+ //# sourceMappingURL=validate-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-action.d.ts","sourceRoot":"","sources":["../src/validate-action.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,IAAI,EAAC,MAAM,kDAAkD,CAAC;AAEtE,OAAO,EAAC,aAAa,EAAC,MAAM,0DAA0D,CAAC;AACvF,OAAO,EAAC,UAAU,EAAqB,MAAM,6BAA6B,CAAC;AAG3E,OAAO,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAE5C,wBAAsB,cAAc,CAClC,WAAW,EAAE,UAAU,EAAE,EACzB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,IAAI,GAAG,SAAS,EACtB,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,OAAO,CAAC,IAAI,CAAC,CA4Ef"}
@@ -0,0 +1,71 @@
1
+ import { isMapping } from "@actions/workflow-parser";
2
+ import { isActionStep } from "@actions/workflow-parser/model/type-guards";
3
+ import { DiagnosticSeverity } from "vscode-languageserver-types";
4
+ import { parseActionReference } from "./action";
5
+ import { mapRange } from "./utils/range";
6
+ export async function validateAction(diagnostics, stepToken, step, config) {
7
+ if (!isMapping(stepToken) || !step || !isActionStep(step) || !config?.fetchActionMetadata) {
8
+ return;
9
+ }
10
+ const action = parseActionReference(step.uses.value);
11
+ if (!action) {
12
+ return;
13
+ }
14
+ const actionMetadata = await config.fetchActionMetadata(action);
15
+ if (actionMetadata === undefined) {
16
+ diagnostics.push({
17
+ severity: DiagnosticSeverity.Error,
18
+ range: mapRange(step.uses.range),
19
+ message: `Unable to resolve action \`${step.uses.value}\`, repository or version not found`
20
+ });
21
+ return;
22
+ }
23
+ let withKey;
24
+ let withToken;
25
+ for (const { key, value } of stepToken) {
26
+ if (key.toString() === "with") {
27
+ withKey = key;
28
+ withToken = value;
29
+ break;
30
+ }
31
+ }
32
+ const stepInputs = new Map();
33
+ if (withToken && isMapping(withToken)) {
34
+ for (const { key } of withToken) {
35
+ stepInputs.set(key.toString(), key);
36
+ }
37
+ }
38
+ const actionInputs = actionMetadata.inputs;
39
+ if (actionInputs === undefined) {
40
+ return;
41
+ }
42
+ for (const [input, inputToken] of stepInputs) {
43
+ if (!actionInputs[input]) {
44
+ diagnostics.push({
45
+ severity: DiagnosticSeverity.Error,
46
+ range: mapRange(inputToken.range),
47
+ message: `Invalid action input '${input}'`
48
+ });
49
+ }
50
+ const deprecationMessage = actionInputs[input]?.deprecationMessage;
51
+ if (deprecationMessage) {
52
+ diagnostics.push({
53
+ severity: DiagnosticSeverity.Warning,
54
+ range: mapRange(inputToken.range),
55
+ message: deprecationMessage
56
+ });
57
+ }
58
+ }
59
+ const missingRequiredInputs = Object.entries(actionInputs).filter(([inputName, input]) => input.required && !stepInputs.has(inputName) && input.default === undefined);
60
+ if (missingRequiredInputs.length > 0) {
61
+ const message = missingRequiredInputs.length === 1
62
+ ? `Missing required input \`${missingRequiredInputs[0][0]}\``
63
+ : `Missing required inputs: ${missingRequiredInputs.map(input => `\`${input[0]}\``).join(", ")}`;
64
+ diagnostics.push({
65
+ severity: DiagnosticSeverity.Error,
66
+ range: mapRange((withKey || stepToken).range),
67
+ message: message
68
+ });
69
+ }
70
+ }
71
+ //# sourceMappingURL=validate-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-action.js","sourceRoot":"","sources":["../src/validate-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { FileProvider } from "@actions/workflow-parser/workflows/file-provider";
2
+ import { TextDocument } from "vscode-languageserver-textdocument";
3
+ import { Diagnostic } from "vscode-languageserver-types";
4
+ import { ActionMetadata, ActionReference } from "./action";
5
+ import { ContextProviderConfig } from "./context-providers/config";
6
+ import { ValueProviderConfig } from "./value-providers/config";
7
+ export type ValidationConfig = {
8
+ valueProviderConfig?: ValueProviderConfig;
9
+ contextProviderConfig?: ContextProviderConfig;
10
+ fetchActionMetadata?(action: ActionReference): Promise<ActionMetadata | undefined>;
11
+ fileProvider?: FileProvider;
12
+ };
13
+ /**
14
+ * Validates a workflow file
15
+ *
16
+ * @param textDocument Document to validate
17
+ * @returns Array of diagnostics
18
+ */
19
+ export declare function validate(textDocument: TextDocument, config?: ValidationConfig): Promise<Diagnostic[]>;
20
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAUA,OAAO,EAAC,YAAY,EAAC,MAAM,kDAAkD,CAAC;AAC9E,OAAO,EAAC,YAAY,EAAC,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAC,UAAU,EAA0B,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,UAAU,CAAC;AACzD,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AAUjE,OAAO,EAAC,mBAAmB,EAAoB,MAAM,0BAA0B,CAAC;AAGhF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,mBAAmB,CAAC,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IACnF,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAuC3G"}
@@ -0,0 +1,162 @@
1
+ import { Evaluator, ExpressionEvaluationError, Lexer, Parser } from "@actions/expressions";
2
+ import { isBasicExpression, isString } from "@actions/workflow-parser";
3
+ import { ErrorPolicy } from "@actions/workflow-parser/model/convert";
4
+ import { splitAllowedContext } from "@actions/workflow-parser/templates/allowed-context";
5
+ import { TemplateToken } from "@actions/workflow-parser/templates/tokens/template-token";
6
+ import { DiagnosticSeverity } from "vscode-languageserver-types";
7
+ import { getContext, Mode } from "./context-providers/default";
8
+ import { getWorkflowContext } from "./context/workflow-context";
9
+ import { AccessError, wrapDictionary } from "./expression-validation/error-dictionary";
10
+ import { validatorFunctions } from "./expression-validation/functions";
11
+ import { error } from "./log";
12
+ import { findToken } from "./utils/find-token";
13
+ import { mapRange } from "./utils/range";
14
+ import { fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow } from "./utils/workflow-cache";
15
+ import { validateAction } from "./validate-action";
16
+ import { ValueProviderKind } from "./value-providers/config";
17
+ import { defaultValueProviders } from "./value-providers/default";
18
+ /**
19
+ * Validates a workflow file
20
+ *
21
+ * @param textDocument Document to validate
22
+ * @returns Array of diagnostics
23
+ */
24
+ export async function validate(textDocument, config) {
25
+ const file = {
26
+ name: textDocument.uri,
27
+ content: textDocument.getText()
28
+ };
29
+ const diagnostics = [];
30
+ try {
31
+ const result = fetchOrParseWorkflow(file, textDocument.uri);
32
+ if (!result) {
33
+ return [];
34
+ }
35
+ if (result.value) {
36
+ // Errors will be updated in the context. Attempt to do the conversion anyway in order to give the user more information
37
+ const template = await fetchOrConvertWorkflowTemplate(result.context, result.value, textDocument.uri, config, {
38
+ fetchReusableWorkflowDepth: config?.fileProvider ? 1 : 0,
39
+ errorPolicy: ErrorPolicy.TryConversion
40
+ });
41
+ // Validate expressions and value providers
42
+ await additionalValidations(diagnostics, textDocument.uri, template, result.value, config);
43
+ }
44
+ // For now map parser errors directly to diagnostics
45
+ for (const error of result.context.errors.getErrors()) {
46
+ const range = mapRange(error.range);
47
+ diagnostics.push({
48
+ message: error.rawMessage,
49
+ range
50
+ });
51
+ }
52
+ }
53
+ catch (e) {
54
+ error(`Unhandled error while validating: ${e.message}`);
55
+ }
56
+ return diagnostics;
57
+ }
58
+ async function additionalValidations(diagnostics, documentUri, template, root, config) {
59
+ for (const [parent, token, key] of TemplateToken.traverse(root)) {
60
+ // If the token is a value in a pair, use the key definition for validation
61
+ // If the token has a parent (map, sequence, etc), use this definition for validation
62
+ const validationToken = key || parent || token;
63
+ const validationDefinition = validationToken.definition;
64
+ // If this is an expression, validate it
65
+ if (isBasicExpression(token) && token.range) {
66
+ await validateExpression(diagnostics, token, validationToken.definitionInfo?.allowedContext || [], config?.contextProviderConfig, getProviderContext(documentUri, template, root, token.range));
67
+ }
68
+ if (token.definition?.key === "regular-step" && token.range) {
69
+ const context = getProviderContext(documentUri, template, root, token.range);
70
+ await validateAction(diagnostics, token, context.step, config);
71
+ }
72
+ // Allowed values coming from the schema have already been validated. Only check if
73
+ // a value provider is defined for a token and if it is, validate the values match.
74
+ if (token.range && validationDefinition) {
75
+ const defKey = validationDefinition.key;
76
+ if (defKey === "step-with") {
77
+ // Action inputs should be validated already in validateAction
78
+ continue;
79
+ }
80
+ if (defKey === "workflow-job-with") {
81
+ // Reusable workflow job inputs are validated by the parser
82
+ continue;
83
+ }
84
+ // Try a custom value provider first
85
+ let valueProvider = config?.valueProviderConfig?.[defKey];
86
+ if (!valueProvider) {
87
+ // fall back to default
88
+ valueProvider = defaultValueProviders[defKey];
89
+ }
90
+ if (valueProvider) {
91
+ const customValues = await valueProvider.get(getProviderContext(documentUri, template, root, token.range));
92
+ const caseInsensitive = valueProvider.caseInsensitive ?? false;
93
+ const customValuesMap = new Set(customValues.map(x => (caseInsensitive ? x.label.toLowerCase() : x.label)));
94
+ if (isString(token)) {
95
+ if (!customValuesMap.has(caseInsensitive ? token.value.toLowerCase() : token.value)) {
96
+ invalidValue(diagnostics, token, valueProvider.kind);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ function invalidValue(diagnostics, token, kind) {
104
+ switch (kind) {
105
+ case ValueProviderKind.AllowedValues:
106
+ diagnostics.push({
107
+ message: `Value '${token.value}' is not valid`,
108
+ severity: DiagnosticSeverity.Error,
109
+ range: mapRange(token.range)
110
+ });
111
+ break;
112
+ // no messages for SuggestedValues
113
+ }
114
+ }
115
+ function getProviderContext(documentUri, template, root, tokenRange) {
116
+ const { path } = findToken({
117
+ line: tokenRange.start.line - 1,
118
+ character: tokenRange.start.column - 1
119
+ }, root);
120
+ return getWorkflowContext(documentUri, template, path);
121
+ }
122
+ async function validateExpression(diagnostics, token, allowedContext, contextProviderConfig, workflowContext) {
123
+ // Validate the expression
124
+ for (const expression of token.originalExpressions || [token]) {
125
+ const { namedContexts, functions } = splitAllowedContext(allowedContext);
126
+ let expr;
127
+ try {
128
+ const l = new Lexer(expression.expression);
129
+ const lr = l.lex();
130
+ const p = new Parser(lr.tokens, namedContexts, functions);
131
+ expr = p.parse();
132
+ }
133
+ catch {
134
+ // Ignore any error here, we should've caught this earlier in the parsing process
135
+ continue;
136
+ }
137
+ try {
138
+ const context = await getContext(namedContexts, contextProviderConfig, workflowContext, Mode.Validation);
139
+ const e = new Evaluator(expr, wrapDictionary(context), validatorFunctions);
140
+ e.evaluate();
141
+ // Any invalid context access would've thrown an error via the `ErrorDictionary`, for now we don't have to check the actual
142
+ // result of the evaluation.
143
+ }
144
+ catch (e) {
145
+ if (e instanceof AccessError) {
146
+ diagnostics.push({
147
+ message: `Context access might be invalid: ${e.keyName}`,
148
+ severity: DiagnosticSeverity.Warning,
149
+ range: mapRange(expression.range)
150
+ });
151
+ }
152
+ else if (e instanceof ExpressionEvaluationError) {
153
+ diagnostics.push({
154
+ message: `Expression might be invalid: ${e.message}`,
155
+ severity: DiagnosticSeverity.Error,
156
+ range: mapRange(expression.range)
157
+ });
158
+ }
159
+ }
160
+ }
161
+ }
162
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { WorkflowContext } from "../context/workflow-context";
2
+ export interface Value {
3
+ /** Label of this value */
4
+ label: string;
5
+ /** Optional description to show when auto-completing */
6
+ description?: string;
7
+ /** Whether this value is deprecated */
8
+ deprecated?: boolean;
9
+ /** Alternative insert text, if not given `label` will be used */
10
+ insertText?: string;
11
+ }
12
+ export declare enum ValueProviderKind {
13
+ AllowedValues = 0,
14
+ SuggestedValues = 1
15
+ }
16
+ export type ValueProvider = {
17
+ kind: ValueProviderKind;
18
+ caseInsensitive?: boolean;
19
+ get: (context: WorkflowContext, existingValues?: Set<string>) => Promise<Value[]>;
20
+ };
21
+ export interface ValueProviderConfig {
22
+ [definitionKey: string]: ValueProvider;
23
+ }
24
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/value-providers/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAE5D,MAAM,WAAW,KAAK;IACpB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IAEd,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,oBAAY,iBAAiB;IAC3B,aAAa,IAAA;IACb,eAAe,IAAA;CAChB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,GAAG,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;CACnF,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,CAAC;CACxC"}
@@ -0,0 +1,6 @@
1
+ export var ValueProviderKind;
2
+ (function (ValueProviderKind) {
3
+ ValueProviderKind[ValueProviderKind["AllowedValues"] = 0] = "AllowedValues";
4
+ ValueProviderKind[ValueProviderKind["SuggestedValues"] = 1] = "SuggestedValues";
5
+ })(ValueProviderKind || (ValueProviderKind = {}));
6
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/value-providers/config.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,2EAAa,CAAA;IACb,+EAAe,CAAA;AACjB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B"}
@@ -0,0 +1,4 @@
1
+ import { ValueProviderConfig } from "./config";
2
+ export declare const DEFAULT_RUNNER_LABELS: string[];
3
+ export declare const defaultValueProviders: ValueProviderConfig;
4
+ //# sourceMappingURL=default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../src/value-providers/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAoB,MAAM,UAAU,CAAC;AAMhE,eAAO,MAAM,qBAAqB,UAajC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,mBAiBnC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { ValueProviderKind } from "./config";
2
+ import { needs } from "./needs";
3
+ import { reusableJobInputs } from "./reusable-job-inputs";
4
+ import { reusableJobSecrets } from "./reusable-job-secrets";
5
+ import { stringsToValues } from "./strings-to-values";
6
+ export const DEFAULT_RUNNER_LABELS = [
7
+ "ubuntu-latest",
8
+ "ubuntu-22.04",
9
+ "ubuntu-20.04",
10
+ "ubuntu-18.04",
11
+ "windows-latest",
12
+ "windows-2022",
13
+ "windows-2019",
14
+ "macos-latest",
15
+ "macos-12",
16
+ "macos-11",
17
+ "macos-10.15",
18
+ "self-hosted"
19
+ ];
20
+ export const defaultValueProviders = {
21
+ needs: {
22
+ kind: ValueProviderKind.AllowedValues,
23
+ get: context => Promise.resolve(needs(context))
24
+ },
25
+ "workflow-job-with": {
26
+ kind: ValueProviderKind.AllowedValues,
27
+ get: context => Promise.resolve(reusableJobInputs(context))
28
+ },
29
+ "workflow-job-secrets": {
30
+ kind: ValueProviderKind.SuggestedValues,
31
+ get: (context, existingValues) => Promise.resolve(reusableJobSecrets(context, existingValues))
32
+ },
33
+ "runs-on": {
34
+ kind: ValueProviderKind.SuggestedValues,
35
+ get: () => Promise.resolve(stringsToValues(DEFAULT_RUNNER_LABELS))
36
+ }
37
+ };
38
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/value-providers/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,iBAAiB,EAAC,MAAM,UAAU,CAAC;AAChE,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,eAAe;IACf,cAAc;IACd,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,cAAc;IACd,cAAc;IACd,UAAU;IACV,UAAU;IACV,aAAa;IACb,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAwB;IACxD,KAAK,EAAE;QACL,IAAI,EAAE,iBAAiB,CAAC,aAAa;QACrC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KAChD;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,iBAAiB,CAAC,aAAa;QACrC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;KAC5D;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,iBAAiB,CAAC,eAAe;QACvC,GAAG,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;KAC/F;IACD,SAAS,EAAE;QACT,IAAI,EAAE,iBAAiB,CAAC,eAAe;QACvC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;KACnE;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Definition } from "@actions/workflow-parser/templates/schema/definition";
2
+ import { Value } from "./config";
3
+ export declare function definitionValues(def: Definition, indentation: string): Value[];
4
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/value-providers/definition.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,sDAAsD,CAAC;AAOhF,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAC;AAG/B,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,EAAE,CAgC9E"}
@@ -0,0 +1,82 @@
1
+ import { BooleanDefinition } from "@actions/workflow-parser/templates/schema/boolean-definition";
2
+ import { DefinitionType } from "@actions/workflow-parser/templates/schema/definition-type";
3
+ import { MappingDefinition } from "@actions/workflow-parser/templates/schema/mapping-definition";
4
+ import { OneOfDefinition } from "@actions/workflow-parser/templates/schema/one-of-definition";
5
+ import { SequenceDefinition } from "@actions/workflow-parser/templates/schema/sequence-definition";
6
+ import { StringDefinition } from "@actions/workflow-parser/templates/schema/string-definition";
7
+ import { getWorkflowSchema } from "@actions/workflow-parser/workflows/workflow-schema";
8
+ import { stringsToValues } from "./strings-to-values";
9
+ export function definitionValues(def, indentation) {
10
+ const schema = getWorkflowSchema();
11
+ if (def instanceof MappingDefinition) {
12
+ return mappingValues(def, schema.definitions, indentation);
13
+ }
14
+ if (def instanceof OneOfDefinition) {
15
+ return oneOfValues(def, schema.definitions, indentation);
16
+ }
17
+ if (def instanceof BooleanDefinition) {
18
+ return stringsToValues(["true", "false"]);
19
+ }
20
+ if (def instanceof StringDefinition && def.constant) {
21
+ return [
22
+ {
23
+ label: def.constant,
24
+ description: def.description
25
+ }
26
+ ];
27
+ }
28
+ if (def instanceof SequenceDefinition) {
29
+ const itemDef = schema.getDefinition(def.itemType);
30
+ if (itemDef) {
31
+ return definitionValues(itemDef, indentation);
32
+ }
33
+ }
34
+ return [];
35
+ }
36
+ function mappingValues(mappingDefinition, definitions, indentation) {
37
+ const properties = [];
38
+ for (const [key, value] of Object.entries(mappingDefinition.properties)) {
39
+ let insertText;
40
+ let description;
41
+ if (value.type) {
42
+ const typeDef = definitions[value.type];
43
+ description = typeDef?.description;
44
+ if (typeDef) {
45
+ switch (typeDef.definitionType) {
46
+ case DefinitionType.Sequence:
47
+ insertText = `${key}:\n${indentation}- `;
48
+ break;
49
+ case DefinitionType.Mapping:
50
+ insertText = `${key}:\n${indentation}`;
51
+ break;
52
+ case DefinitionType.OneOf:
53
+ // No special insertText in this case
54
+ break;
55
+ default:
56
+ insertText = `${key}: `;
57
+ }
58
+ }
59
+ }
60
+ properties.push({
61
+ label: key,
62
+ description,
63
+ insertText
64
+ });
65
+ }
66
+ return properties;
67
+ }
68
+ function oneOfValues(oneOfDefinition, definitions, indentation) {
69
+ const values = [];
70
+ for (const key of oneOfDefinition.oneOf) {
71
+ values.push(...definitionValues(definitions[key], indentation));
72
+ }
73
+ return distinctValues(values);
74
+ }
75
+ function distinctValues(values) {
76
+ const map = new Map();
77
+ for (const value of values) {
78
+ map.set(value.label, value);
79
+ }
80
+ return Array.from(map.values());
81
+ }
82
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/value-providers/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,8DAA8D,CAAC;AAE/F,OAAO,EAAC,cAAc,EAAC,MAAM,2DAA2D,CAAC;AACzF,OAAO,EAAC,iBAAiB,EAAC,MAAM,8DAA8D,CAAC;AAC/F,OAAO,EAAC,eAAe,EAAC,MAAM,6DAA6D,CAAC;AAC5F,OAAO,EAAC,kBAAkB,EAAC,MAAM,+DAA+D,CAAC;AACjG,OAAO,EAAC,gBAAgB,EAAC,MAAM,6DAA6D,CAAC;AAC7F,OAAO,EAAC,iBAAiB,EAAC,MAAM,oDAAoD,CAAC;AAErF,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEpD,MAAM,UAAU,gBAAgB,CAAC,GAAe,EAAE,WAAmB;IACnE,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAEnC,IAAI,GAAG,YAAY,iBAAiB,EAAE;QACpC,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;KAC5D;IAED,IAAI,GAAG,YAAY,eAAe,EAAE;QAClC,OAAO,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;KAC1D;IAED,IAAI,GAAG,YAAY,iBAAiB,EAAE;QACpC,OAAO,eAAe,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KAC3C;IAED,IAAI,GAAG,YAAY,gBAAgB,IAAI,GAAG,CAAC,QAAQ,EAAE;QACnD,OAAO;YACL;gBACE,KAAK,EAAE,GAAG,CAAC,QAAQ;gBACnB,WAAW,EAAE,GAAG,CAAC,WAAW;aAC7B;SACF,CAAC;KACH;IAED,IAAI,GAAG,YAAY,kBAAkB,EAAE;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE;YACX,OAAO,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;SAC/C;KACF;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CACpB,iBAAoC,EACpC,WAAwC,EACxC,WAAmB;IAEnB,MAAM,UAAU,GAAY,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;QACvE,IAAI,UAA8B,CAAC;QAEnC,IAAI,WAA+B,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,EAAE;YACd,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC;YAEnC,IAAI,OAAO,EAAE;gBACX,QAAQ,OAAO,CAAC,cAAc,EAAE;oBAC9B,KAAK,cAAc,CAAC,QAAQ;wBAC1B,UAAU,GAAG,GAAG,GAAG,MAAM,WAAW,IAAI,CAAC;wBACzC,MAAM;oBAER,KAAK,cAAc,CAAC,OAAO;wBACzB,UAAU,GAAG,GAAG,GAAG,MAAM,WAAW,EAAE,CAAC;wBACvC,MAAM;oBAER,KAAK,cAAc,CAAC,KAAK;wBACvB,qCAAqC;wBACrC,MAAM;oBAER;wBACE,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC;iBAC3B;aACF;SACF;QAED,UAAU,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,GAAG;YACV,WAAW;YACX,UAAU;SACX,CAAC,CAAC;KACJ;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAClB,eAAgC,EAChC,WAAwC,EACxC,WAAmB;IAEnB,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,EAAE;QACvC,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;KACjE;IACD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,cAAc,CAAC,MAAe;IACrC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiB,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KAC7B;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { WorkflowContext } from "../context/workflow-context";
2
+ import { Value } from "./config";
3
+ export declare function needs(context: WorkflowContext): Value[];
4
+ //# sourceMappingURL=needs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"needs.d.ts","sourceRoot":"","sources":["../../src/value-providers/needs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAC;AAE/B,wBAAgB,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,KAAK,EAAE,CASvD"}
@@ -0,0 +1,10 @@
1
+ export function needs(context) {
2
+ if (!context.template) {
3
+ return [];
4
+ }
5
+ const uniquejobIDs = new Set(context.template.jobs.map(j => j.id)).values();
6
+ return Array.from(uniquejobIDs)
7
+ .filter(x => x.value !== context.job?.id.value)
8
+ .map(x => ({ label: x.value }));
9
+ }
10
+ //# sourceMappingURL=needs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"needs.js","sourceRoot":"","sources":["../../src/value-providers/needs.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,KAAK,CAAC,OAAwB;IAC5C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QACrB,OAAO,EAAE,CAAC;KACX;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5E,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC;SAC9C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { WorkflowContext } from "../context/workflow-context";
2
+ import { Value } from "./config";
3
+ export declare function reusableJobInputs(context: WorkflowContext): Value[];
4
+ //# sourceMappingURL=reusable-job-inputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reusable-job-inputs.d.ts","sourceRoot":"","sources":["../../src/value-providers/reusable-job-inputs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAC;AAE/B,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,KAAK,EAAE,CAoBnE"}
@@ -0,0 +1,29 @@
1
+ import { isMapping, isString } from "@actions/workflow-parser/templates/tokens/type-guards";
2
+ export function reusableJobInputs(context) {
3
+ if (!context.reusableWorkflowJob?.["input-definitions"]) {
4
+ return [];
5
+ }
6
+ const values = [];
7
+ for (const { key, value } of context.reusableWorkflowJob["input-definitions"]) {
8
+ if (!isString(key)) {
9
+ continue;
10
+ }
11
+ values.push({
12
+ label: key.value,
13
+ description: inputDescription(value),
14
+ insertText: `${key.value}: `
15
+ });
16
+ }
17
+ return values;
18
+ }
19
+ function inputDescription(inputDef) {
20
+ if (!isMapping(inputDef)) {
21
+ return undefined;
22
+ }
23
+ const descriptionToken = inputDef.find("description");
24
+ if (!descriptionToken || !isString(descriptionToken)) {
25
+ return undefined;
26
+ }
27
+ return descriptionToken.value;
28
+ }
29
+ //# sourceMappingURL=reusable-job-inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reusable-job-inputs.js","sourceRoot":"","sources":["../../src/value-providers/reusable-job-inputs.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,uDAAuD,CAAC;AAI1F,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACxD,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,mBAAmB,CAAC,EAAE;QACvD,OAAO,EAAE,CAAC;KACX;IAED,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,KAAK,MAAM,EAAC,GAAG,EAAE,KAAK,EAAC,IAAI,OAAO,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,EAAE;QAC3E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAClB,SAAS;SACV;QAED,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC;YACpC,UAAU,EAAE,GAAG,GAAG,CAAC,KAAK,IAAI;SAC7B,CAAC,CAAC;KACJ;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAuB;IAC/C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;QACxB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtD,IAAI,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QACpD,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,gBAAgB,CAAC,KAAK,CAAC;AAChC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { WorkflowContext } from "../context/workflow-context";
2
+ import { Value } from "./config";
3
+ export declare function reusableJobSecrets(context: WorkflowContext, existingValues?: Set<string>): Value[];
4
+ //# sourceMappingURL=reusable-job-secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reusable-job-secrets.d.ts","sourceRoot":"","sources":["../../src/value-providers/reusable-job-secrets.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAC;AAE/B,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAkClG"}