From 157c6f0672ad540055a9b80d0d2344ec717f980c Mon Sep 17 00:00:00 2001 From: Jacob Wallraff Date: Wed, 15 Feb 2023 17:17:54 -0800 Subject: [PATCH] More different stuff --- .../src/description-provider.ts | 2 +- .../reusable-workflow-input.ts | 32 +++++++++++++------ actions-languageservice/src/hover.ts | 4 +-- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/actions-languageserver/src/description-provider.ts b/actions-languageserver/src/description-provider.ts index 8da4c7f..9173a8e 100644 --- a/actions-languageserver/src/description-provider.ts +++ b/actions-languageserver/src/description-provider.ts @@ -16,7 +16,7 @@ export function descriptionProvider(client: Octokit | undefined, cache: TTLCache } if (context.reusableWorkflowJob && template && parent.definition?.key === "workflow-job-with") { - return await getReusableWorkflowInputDescription(client, cache, context.reusableWorkflowJob, token, template); + return await getReusableWorkflowInputDescription(context.reusableWorkflowJob, token, template); } }; diff --git a/actions-languageserver/src/description-providers/reusable-workflow-input.ts b/actions-languageserver/src/description-providers/reusable-workflow-input.ts index 9c50c90..71eefef 100644 --- a/actions-languageserver/src/description-providers/reusable-workflow-input.ts +++ b/actions-languageserver/src/description-providers/reusable-workflow-input.ts @@ -1,22 +1,36 @@ -import {parseFileReference} from "@github/actions-workflow-parser/workflows/file-reference"; -import {isString} from "@github/actions-workflow-parser"; +import {WorkflowTemplate} from "@github/actions-workflow-parser"; import {isReusableWorkflowJob} from "@github/actions-workflow-parser/model/type-guards"; -import {FileProvider} from "@github/actions-workflow-parser/workflows/file-provider"; import {ReusableWorkflowJob} from "@github/actions-workflow-parser/model/workflow-template"; import {TemplateToken} from "@github/actions-workflow-parser/templates/tokens/template-token"; -import {Octokit} from "@octokit/rest"; -import {TTLCache} from "../utils/cache"; export async function getReusableWorkflowInputDescription( - client: Octokit, - cache: TTLCache, reusableWorkflowJob: ReusableWorkflowJob, token: TemplateToken, - template: FileProvider + template: WorkflowTemplate ): Promise { if (!isReusableWorkflowJob(reusableWorkflowJob)) { return undefined; } - return "here's a description" + // Filter out just reusable jobs + const templateReusableJobs = template.jobs.filter(isReusableWorkflowJob); + + // Find the reusable job in the template that matches the current reusable job + const templateReusableJob = templateReusableJobs.find(job => job.id.value === reusableWorkflowJob.id.value); + + // Set the description on the reusable job to the one from the template, if any + if (templateReusableJob && reusableWorkflowJob["input-definitions"] && templateReusableJob["input-definitions"]) { + // For each input in the reusable job, see if there's one that matches in the template + for (const input of reusableWorkflowJob["input-definitions"]) { + const templateInput = templateReusableJob["input-definitions"].find(templateInput => templateInput.key.value === input.key.value); + if (templateInput) { + return "fuck me" + } + } + + } + + + + return "Didn't find a matching job description!" } diff --git a/actions-languageservice/src/hover.ts b/actions-languageservice/src/hover.ts index 48045ef..b8766a6 100644 --- a/actions-languageservice/src/hover.ts +++ b/actions-languageservice/src/hover.ts @@ -112,7 +112,7 @@ async function getDescription( ) { const defaultDescription = token.description || ""; // TODO fix this check - description provider is null for rusable workflows - if (!result?.value/* || !config?.descriptionProvider*/) { + if (!result?.value || !config?.descriptionProvider) { return defaultDescription; } @@ -126,7 +126,7 @@ async function getDescription( } ); const workflowContext = getWorkflowContext(document.uri, template, path); - const description = await config?.descriptionProvider?.getDescription(workflowContext, token, path, template); + const description = await config.descriptionProvider.getDescription(workflowContext, token, path, template); return description || defaultDescription; }