@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.
- package/LICENSE +21 -0
- package/README.md +131 -0
- package/dist/action.d.ts +28 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +36 -0
- package/dist/action.js.map +1 -0
- package/dist/complete.d.ts +15 -0
- package/dist/complete.d.ts.map +1 -0
- package/dist/complete.js +203 -0
- package/dist/complete.js.map +1 -0
- package/dist/context/workflow-context.d.ts +15 -0
- package/dist/context/workflow-context.d.ts.map +1 -0
- package/dist/context/workflow-context.js +64 -0
- package/dist/context/workflow-context.js.map +1 -0
- package/dist/context-providers/config.d.ts +7 -0
- package/dist/context-providers/config.d.ts.map +1 -0
- package/dist/context-providers/config.js +2 -0
- package/dist/context-providers/config.js.map +1 -0
- package/dist/context-providers/default.d.ts +11 -0
- package/dist/context-providers/default.d.ts.map +1 -0
- package/dist/context-providers/default.js +88 -0
- package/dist/context-providers/default.js.map +1 -0
- package/dist/context-providers/descriptions.d.ts +15 -0
- package/dist/context-providers/descriptions.d.ts.map +1 -0
- package/dist/context-providers/descriptions.js +23 -0
- package/dist/context-providers/descriptions.js.map +1 -0
- package/dist/context-providers/descriptions.json +241 -0
- package/dist/context-providers/env.d.ts +4 -0
- package/dist/context-providers/env.d.ts.map +1 -0
- package/dist/context-providers/env.js +29 -0
- package/dist/context-providers/env.js.map +1 -0
- package/dist/context-providers/events/eventPayloads.d.ts +4 -0
- package/dist/context-providers/events/eventPayloads.d.ts.map +1 -0
- package/dist/context-providers/events/eventPayloads.js +111 -0
- package/dist/context-providers/events/eventPayloads.js.map +1 -0
- package/dist/context-providers/events/objects.json +26220 -0
- package/dist/context-providers/events/schedule.json +102 -0
- package/dist/context-providers/events/webhooks.json +124811 -0
- package/dist/context-providers/events/workflow_call.json +134 -0
- package/dist/context-providers/github.d.ts +5 -0
- package/dist/context-providers/github.d.ts.map +1 -0
- package/dist/context-providers/github.js +139 -0
- package/dist/context-providers/github.js.map +1 -0
- package/dist/context-providers/inputs.d.ts +4 -0
- package/dist/context-providers/inputs.d.ts.map +1 -0
- package/dist/context-providers/inputs.js +52 -0
- package/dist/context-providers/inputs.js.map +1 -0
- package/dist/context-providers/job.d.ts +4 -0
- package/dist/context-providers/job.d.ts.map +1 -0
- package/dist/context-providers/job.js +61 -0
- package/dist/context-providers/job.js.map +1 -0
- package/dist/context-providers/jobs.d.ts +4 -0
- package/dist/context-providers/jobs.d.ts.map +1 -0
- package/dist/context-providers/jobs.js +30 -0
- package/dist/context-providers/jobs.js.map +1 -0
- package/dist/context-providers/matrix.d.ts +4 -0
- package/dist/context-providers/matrix.d.ts.map +1 -0
- package/dist/context-providers/matrix.js +163 -0
- package/dist/context-providers/matrix.js.map +1 -0
- package/dist/context-providers/needs.d.ts +4 -0
- package/dist/context-providers/needs.d.ts.map +1 -0
- package/dist/context-providers/needs.js +56 -0
- package/dist/context-providers/needs.js.map +1 -0
- package/dist/context-providers/secrets.d.ts +5 -0
- package/dist/context-providers/secrets.d.ts.map +1 -0
- package/dist/context-providers/secrets.js +23 -0
- package/dist/context-providers/secrets.js.map +1 -0
- package/dist/context-providers/steps.d.ts +4 -0
- package/dist/context-providers/steps.d.ts.map +1 -0
- package/dist/context-providers/steps.js +35 -0
- package/dist/context-providers/steps.js.map +1 -0
- package/dist/context-providers/strategy.d.ts +4 -0
- package/dist/context-providers/strategy.d.ts.map +1 -0
- package/dist/context-providers/strategy.js +31 -0
- package/dist/context-providers/strategy.js.map +1 -0
- package/dist/description-providers/reusable-job-inputs.d.ts +5 -0
- package/dist/description-providers/reusable-job-inputs.d.ts.map +1 -0
- package/dist/description-providers/reusable-job-inputs.js +29 -0
- package/dist/description-providers/reusable-job-inputs.js.map +1 -0
- package/dist/document-links.d.ts +4 -0
- package/dist/document-links.d.ts.map +1 -0
- package/dist/document-links.js +73 -0
- package/dist/document-links.js.map +1 -0
- package/dist/expression-hover/expression-pos.d.ts +13 -0
- package/dist/expression-hover/expression-pos.d.ts.map +1 -0
- package/dist/expression-hover/expression-pos.js +41 -0
- package/dist/expression-hover/expression-pos.js.map +1 -0
- package/dist/expression-hover/pos-range.d.ts +3 -0
- package/dist/expression-hover/pos-range.d.ts.map +1 -0
- package/dist/expression-hover/pos-range.js +7 -0
- package/dist/expression-hover/pos-range.js.map +1 -0
- package/dist/expression-hover/visitor.d.ts +27 -0
- package/dist/expression-hover/visitor.d.ts.map +1 -0
- package/dist/expression-hover/visitor.js +116 -0
- package/dist/expression-hover/visitor.js.map +1 -0
- package/dist/expression-validation/error-dictionary.d.ts +13 -0
- package/dist/expression-validation/error-dictionary.d.ts.map +1 -0
- package/dist/expression-validation/error-dictionary.js +39 -0
- package/dist/expression-validation/error-dictionary.js.map +1 -0
- package/dist/expression-validation/functions.d.ts +9 -0
- package/dist/expression-validation/functions.d.ts.map +1 -0
- package/dist/expression-validation/functions.js +11 -0
- package/dist/expression-validation/functions.js.map +1 -0
- package/dist/hover.d.ts +16 -0
- package/dist/hover.d.ts.map +1 -0
- package/dist/hover.js +154 -0
- package/dist/hover.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/log.d.ts +39 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +48 -0
- package/dist/log.js.map +1 -0
- package/dist/nulltrace.d.ts +3 -0
- package/dist/nulltrace.d.ts.map +1 -0
- package/dist/nulltrace.js +3 -0
- package/dist/nulltrace.js.map +1 -0
- package/dist/utils/expression-detection.d.ts +3 -0
- package/dist/utils/expression-detection.d.ts.map +1 -0
- package/dist/utils/expression-detection.js +9 -0
- package/dist/utils/expression-detection.js.map +1 -0
- package/dist/utils/find-token.d.ts +23 -0
- package/dist/utils/find-token.d.ts.map +1 -0
- package/dist/utils/find-token.js +159 -0
- package/dist/utils/find-token.js.map +1 -0
- package/dist/utils/indentation-guesser.d.ts +16 -0
- package/dist/utils/indentation-guesser.d.ts.map +1 -0
- package/dist/utils/indentation-guesser.js +214 -0
- package/dist/utils/indentation-guesser.js.map +1 -0
- package/dist/utils/range.d.ts +5 -0
- package/dist/utils/range.d.ts.map +1 -0
- package/dist/utils/range.js +25 -0
- package/dist/utils/range.js.map +1 -0
- package/dist/utils/rel-char-pos.d.ts +4 -0
- package/dist/utils/rel-char-pos.d.ts.map +1 -0
- package/dist/utils/rel-char-pos.js +14 -0
- package/dist/utils/rel-char-pos.js.map +1 -0
- package/dist/utils/scalar-to-data.d.ts +4 -0
- package/dist/utils/scalar-to-data.d.ts.map +1 -0
- package/dist/utils/scalar-to-data.js +19 -0
- package/dist/utils/scalar-to-data.js.map +1 -0
- package/dist/utils/transform.d.ts +6 -0
- package/dist/utils/transform.d.ts.map +1 -0
- package/dist/utils/transform.js +66 -0
- package/dist/utils/transform.js.map +1 -0
- package/dist/utils/workflow-cache.d.ts +21 -0
- package/dist/utils/workflow-cache.d.ts.map +1 -0
- package/dist/utils/workflow-cache.js +52 -0
- package/dist/utils/workflow-cache.js.map +1 -0
- package/dist/validate-action.d.ts +6 -0
- package/dist/validate-action.d.ts.map +1 -0
- package/dist/validate-action.js +71 -0
- package/dist/validate-action.js.map +1 -0
- package/dist/validate.d.ts +20 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +162 -0
- package/dist/validate.js.map +1 -0
- package/dist/value-providers/config.d.ts +24 -0
- package/dist/value-providers/config.d.ts.map +1 -0
- package/dist/value-providers/config.js +6 -0
- package/dist/value-providers/config.js.map +1 -0
- package/dist/value-providers/default.d.ts +4 -0
- package/dist/value-providers/default.d.ts.map +1 -0
- package/dist/value-providers/default.js +38 -0
- package/dist/value-providers/default.js.map +1 -0
- package/dist/value-providers/definition.d.ts +4 -0
- package/dist/value-providers/definition.d.ts.map +1 -0
- package/dist/value-providers/definition.js +82 -0
- package/dist/value-providers/definition.js.map +1 -0
- package/dist/value-providers/needs.d.ts +4 -0
- package/dist/value-providers/needs.d.ts.map +1 -0
- package/dist/value-providers/needs.js +10 -0
- package/dist/value-providers/needs.js.map +1 -0
- package/dist/value-providers/reusable-job-inputs.d.ts +4 -0
- package/dist/value-providers/reusable-job-inputs.d.ts.map +1 -0
- package/dist/value-providers/reusable-job-inputs.js +29 -0
- package/dist/value-providers/reusable-job-inputs.js.map +1 -0
- package/dist/value-providers/reusable-job-secrets.d.ts +4 -0
- package/dist/value-providers/reusable-job-secrets.d.ts.map +1 -0
- package/dist/value-providers/reusable-job-secrets.js +41 -0
- package/dist/value-providers/reusable-job-secrets.js.map +1 -0
- package/dist/value-providers/strings-to-values.d.ts +3 -0
- package/dist/value-providers/strings-to-values.d.ts.map +1 -0
- package/dist/value-providers/strings-to-values.js +4 -0
- package/dist/value-providers/strings-to-values.js.map +1 -0
- 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"}
|
package/dist/validate.js
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|