Convert secrets, complete secrets in called workflow

This commit is contained in:
Beth Brennan
2023-03-07 15:11:16 -05:00
parent 94e537e072
commit 87e3131958
11 changed files with 226 additions and 14 deletions
@@ -15,6 +15,7 @@ import {
} from "../workflow-template";
import {isValidCron} from "./cron";
import {convertStringList} from "./string-list";
import {convertEventWorkflowCall} from "./workflow-call";
import {convertEventWorkflowDispatchInputs} from "./workflow-dispatch";
export function convertOn(context: TemplateContext, token: TemplateToken): EventsConfig {
@@ -66,8 +67,9 @@ export function convertOn(context: TemplateContext, token: TemplateToken): Event
...convertPatternFilter("paths", eventToken),
...convertFilter("types", eventToken),
...convertFilter("workflows", eventToken),
// TODO - share input parsing for now, but workflow_call also needs outputs and secrets
...convertEventWorkflowDispatchInputs(context, eventToken)
// workflow_call and workflow_dispatch share input parsing
...convertEventWorkflowDispatchInputs(context, eventToken),
...convertEventWorkflowCall(context, eventToken)
};
}
@@ -0,0 +1,65 @@
import {TemplateContext} from "../../templates/template-context";
import {MappingToken, TemplateToken} from "../../templates/tokens";
import {isMapping} from "../../templates/tokens/type-guards";
import {SecretConfig, WorkflowCallConfig} from "../workflow-template";
export function convertEventWorkflowCall(context: TemplateContext, token: MappingToken): WorkflowCallConfig {
const result: WorkflowCallConfig = {};
for (const item of token) {
const key = item.key.assertString("workflow dispatch input key");
switch (key.value) {
case "inputs":
// Ignore, these are handled by convertEventWorkflowDispatchInputs
break;
case "secrets":
result.secrets = convertWorkflowCallSecrets(context, item.value.assertMapping("workflow dispatch inputs"));
break;
case "outputs":
// TODO - outputs
break;
}
}
return result;
}
function convertWorkflowCallSecrets(
context: TemplateContext,
token: MappingToken
): {[secretName: string]: SecretConfig} {
const result: {[secretName: string]: SecretConfig} = {};
for (const item of token) {
const secretName = item.key.assertString("secret name");
result[secretName.value] = convertWorkflowCallSecret(context, item.value);
}
return result;
}
function convertWorkflowCallSecret(context: TemplateContext, token: TemplateToken): SecretConfig {
const result: SecretConfig = {};
if (isMapping(token)) {
for (const item of token) {
const key = item.key.assertString("workflow call secret key");
switch (key.value) {
case "description":
result.description = item.value.assertString("secret description").value;
break;
case "required":
result.required = item.value.assertBoolean("secret required").value;
break;
}
}
}
return result;
}