2023-03-03 12:28:29 -08:00
|
|
|
import {convertWorkflowTemplate, parseWorkflow} from "@github/actions-workflow-parser";
|
|
|
|
|
import {WorkflowTemplateConverterOptions} from "@github/actions-workflow-parser/model/convert";
|
|
|
|
|
import {File} from "@github/actions-workflow-parser/workflows/file";
|
|
|
|
|
import {ParseWorkflowResult} from "@github/actions-workflow-parser";
|
|
|
|
|
import {WorkflowTemplate} from "@github/actions-workflow-parser";
|
|
|
|
|
import {nullTrace} from "../nulltrace";
|
2023-03-03 12:49:25 -08:00
|
|
|
import {CompletionConfig} from "../complete";
|
2023-03-03 12:28:29 -08:00
|
|
|
|
|
|
|
|
const parsedWorkflowCache = new Map<string, ParseWorkflowResult>();
|
|
|
|
|
const workflowTemplateCache = new Map<string, WorkflowTemplate>();
|
|
|
|
|
|
2023-03-06 15:16:26 -08:00
|
|
|
export function clearCacheEntry(uri: string) {
|
2023-03-03 12:28:29 -08:00
|
|
|
parsedWorkflowCache.delete(uri);
|
|
|
|
|
workflowTemplateCache.delete(uri);
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-06 15:16:26 -08:00
|
|
|
export function clearCache() {
|
|
|
|
|
parsedWorkflowCache.clear();
|
2023-03-03 12:28:29 -08:00
|
|
|
workflowTemplateCache.clear();
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-03 12:39:40 -08:00
|
|
|
export function fetchOrParseWorkflow(file: File, uri: string): ParseWorkflowResult | undefined {
|
2023-03-14 11:43:28 -04:00
|
|
|
const cachedResult = parsedWorkflowCache.get(uri);
|
|
|
|
|
if (cachedResult) {
|
|
|
|
|
return cachedResult;
|
2023-03-03 12:28:29 -08:00
|
|
|
}
|
2023-03-14 11:43:28 -04:00
|
|
|
const result = parseWorkflow(file, nullTrace);
|
|
|
|
|
parsedWorkflowCache.set(uri, result);
|
2023-03-03 12:28:29 -08:00
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-03 12:49:25 -08:00
|
|
|
export async function fetchOrConvertWorkflowTemplate(
|
|
|
|
|
parsedWorkflow: ParseWorkflowResult,
|
|
|
|
|
uri: string,
|
|
|
|
|
config?: CompletionConfig,
|
|
|
|
|
options?: WorkflowTemplateConverterOptions
|
|
|
|
|
): Promise<WorkflowTemplate> {
|
2023-03-03 12:39:40 -08:00
|
|
|
let template = workflowTemplateCache.get(uri);
|
2023-03-03 12:28:29 -08:00
|
|
|
if (!template) {
|
2023-03-03 12:49:25 -08:00
|
|
|
template = await convertWorkflowTemplate(
|
|
|
|
|
parsedWorkflow.context,
|
2023-03-15 16:52:56 -04:00
|
|
|
// TODO: @joshmgross We can't assume that the value is non-null here
|
|
|
|
|
parsedWorkflow.value!, // eslint-disable-line @typescript-eslint/no-non-null-assertion
|
2023-03-03 12:49:25 -08:00
|
|
|
config?.fileProvider,
|
|
|
|
|
options
|
|
|
|
|
);
|
2023-03-03 12:39:40 -08:00
|
|
|
workflowTemplateCache.set(uri, template);
|
2023-03-03 12:28:29 -08:00
|
|
|
}
|
|
|
|
|
return template;
|
2023-03-03 12:49:25 -08:00
|
|
|
}
|