From eb56401cafb2168b1be1ca2a7982d942d5a0ac49 Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Thu, 16 Mar 2023 17:09:23 -0700 Subject: [PATCH 1/3] Provide links to navigate to reusable-workflows --- languageserver/src/connection.ts | 5 +- languageservice/package.json | 1 + languageservice/src/document-links.test.ts | 53 ++++++++++++++++- languageservice/src/document-links.ts | 67 ++++++++++++++++------ package-lock.json | 12 ++++ 5 files changed, 116 insertions(+), 22 deletions(-) diff --git a/languageserver/src/connection.ts b/languageserver/src/connection.ts index 84b69bf..6188335 100644 --- a/languageserver/src/connection.ts +++ b/languageserver/src/connection.ts @@ -1,5 +1,6 @@ import {documentLinks, hover, validate, ValidationConfig} from "@github/actions-languageservice"; import {registerLogger, setLogLevel} from "@github/actions-languageservice/log"; +import {clearCache, clearCacheEntry} from "@github/actions-languageservice/utils/workflow-cache"; import {Octokit} from "@octokit/rest"; import { CompletionItem, @@ -28,7 +29,6 @@ import {fetchActionMetadata} from "./utils/action-metadata"; import {TTLCache} from "./utils/cache"; import {timeOperation} from "./utils/timer"; import {valueProviders} from "./value-providers"; -import {clearCacheEntry, clearCache} from "@github/actions-languageservice/utils/workflow-cache"; export function initConnection(connection: Connection) { const documents: TextDocuments = new TextDocuments(TextDocument); @@ -165,7 +165,8 @@ export function initConnection(connection: Connection) { }); connection.onDocumentLinks(async ({textDocument}: DocumentLinkParams): Promise => { - return documentLinks(documents.get(textDocument.uri)!); + const repoContext = repos.find(repo => textDocument.uri.startsWith(repo.workspaceUri)); + return documentLinks(documents.get(textDocument.uri)!, repoContext?.workspaceUri); }); // Make the text document manager listen on the connection diff --git a/languageservice/package.json b/languageservice/package.json index 441c756..63ced82 100644 --- a/languageservice/package.json +++ b/languageservice/package.json @@ -45,6 +45,7 @@ "@github/actions-workflow-parser": "^0.1.173", "vscode-languageserver-textdocument": "^1.0.7", "vscode-languageserver-types": "^3.17.2", + "vscode-uri": "^3.0.7", "yaml": "^2.1.1" }, "engines": { diff --git a/languageservice/src/document-links.test.ts b/languageservice/src/document-links.test.ts index 65d249c..4a41a36 100644 --- a/languageservice/src/document-links.test.ts +++ b/languageservice/src/document-links.test.ts @@ -14,7 +14,7 @@ jobs: runs-on: [self-hosted] steps: - run: echo "Hello World"`; - const result = await documentLinks(createDocument("test.yaml", input)); + const result = await documentLinks(createDocument("test.yaml", input), undefined); expect(result).toHaveLength(0); }); @@ -23,7 +23,7 @@ jobs: jobs: build: runs-on: [self-hosted]`; - const result = await documentLinks(createDocument("test.yaml", input)); + const result = await documentLinks(createDocument("test.yaml", input), undefined); expect(result).toHaveLength(0); }); @@ -36,7 +36,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/checkout@v3 - uses: github/codeql-action/init@v2`; - const result = await documentLinks(createDocument("test.yaml", input)); + const result = await documentLinks(createDocument("test.yaml", input), undefined); expect(result).toEqual([ { range: { @@ -82,4 +82,51 @@ jobs: } ]); }); + + it("links for reusable local workflow", async () => { + const input = `on: push +jobs: + build: + uses: ./.github/workflows/reusable-workflow.yml`; + const result = await documentLinks(createDocument("test.yaml", input), "file:///workspace/"); + expect(result).toEqual([ + { + range: { + end: { + character: 51, + line: 3 + }, + start: { + character: 10, + line: 3 + } + }, + target: "file:///workspace/.github/workflows/reusable-workflow.yml" + } + ]); + }); + + it("links for reusable remote workflow", async () => { + const input = `on: push +jobs: + build: + uses: seismis-rainier/workflows/reusable-workflow.yml@main`; + const result = await documentLinks(createDocument("test.yaml", input), "file:///workspace/"); + expect(result).toEqual([ + { + range: { + end: { + character: 62, + line: 3 + }, + start: { + character: 10, + line: 3 + } + }, + target: "https://www.github.com/seismis-rainier/workflows/tree/main/reusable-workflow.yml", + tooltip: "Open reusable workflow on GitHub" + } + ]); + }); }); diff --git a/languageservice/src/document-links.ts b/languageservice/src/document-links.ts index 4eff46f..16df62a 100644 --- a/languageservice/src/document-links.ts +++ b/languageservice/src/document-links.ts @@ -1,13 +1,15 @@ import {ErrorPolicy} from "@github/actions-workflow-parser/model/convert"; -import {isJob} from "@github/actions-workflow-parser/model/type-guards"; +import {isJob, isReusableWorkflowJob} from "@github/actions-workflow-parser/model/type-guards"; import {File} from "@github/actions-workflow-parser/workflows/file"; +import {parseFileReference} from "@github/actions-workflow-parser/workflows/file-reference"; import {TextDocument} from "vscode-languageserver-textdocument"; import {DocumentLink} from "vscode-languageserver-types"; +import vscodeURI from "vscode-uri"; // work around issues with the vscode-uri package import {actionUrl, parseActionReference} from "./action"; import {mapRange} from "./utils/range"; -import {fetchOrParseWorkflow, fetchOrConvertWorkflowTemplate} from "./utils/workflow-cache"; +import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache"; -export async function documentLinks(document: TextDocument): Promise { +export async function documentLinks(document: TextDocument, workspace: string | undefined): Promise { const file: File = { name: document.uri, content: document.getText() @@ -22,30 +24,61 @@ export async function documentLinks(document: TextDocument): Promise Date: Thu, 16 Mar 2023 17:23:40 -0700 Subject: [PATCH 2/3] Work around module import issues --- languageservice/src/document-links.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languageservice/src/document-links.ts b/languageservice/src/document-links.ts index 16df62a..6341cae 100644 --- a/languageservice/src/document-links.ts +++ b/languageservice/src/document-links.ts @@ -4,7 +4,7 @@ import {File} from "@github/actions-workflow-parser/workflows/file"; import {parseFileReference} from "@github/actions-workflow-parser/workflows/file-reference"; import {TextDocument} from "vscode-languageserver-textdocument"; import {DocumentLink} from "vscode-languageserver-types"; -import vscodeURI from "vscode-uri"; // work around issues with the vscode-uri package +import vscodeURI from "vscode-uri/lib/umd"; // work around issues with the vscode-uri package import {actionUrl, parseActionReference} from "./action"; import {mapRange} from "./utils/range"; import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache"; From 371f87ebfe08b0985ad54b1cec5136d86a5ba178 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 17 Mar 2023 16:01:26 +0000 Subject: [PATCH 3/3] v0.1.174 --- browser-playground/package.json | 4 ++-- expressions/package.json | 2 +- languageserver/package.json | 6 +++--- languageservice/package.json | 6 +++--- lerna.json | 2 +- package-lock.json | 34 ++++++++++++++++----------------- workflow-parser/package.json | 4 ++-- 7 files changed, 29 insertions(+), 29 deletions(-) diff --git a/browser-playground/package.json b/browser-playground/package.json index 498b79e..8e3a6bf 100644 --- a/browser-playground/package.json +++ b/browser-playground/package.json @@ -1,12 +1,12 @@ { "name": "browser-playground", - "version": "0.1.173", + "version": "0.1.174", "description": "", "private": true, "main": "index.js", "type": "module", "dependencies": { - "@github/actions-languageserver": "^0.1.173", + "@github/actions-languageserver": "^0.1.174", "monaco-editor-webpack-plugin": "^7.0.1", "monaco-editor-workers": "^0.34.2", "monaco-languageclient": "^4.0.3", diff --git a/expressions/package.json b/expressions/package.json index 2a5a7a9..516946a 100755 --- a/expressions/package.json +++ b/expressions/package.json @@ -1,6 +1,6 @@ { "name": "@github/actions-expressions", - "version": "0.1.173", + "version": "0.1.174", "license": "MIT", "type": "module", "source": "./src/index.ts", diff --git a/languageserver/package.json b/languageserver/package.json index db4d5ec..0d2f426 100644 --- a/languageserver/package.json +++ b/languageserver/package.json @@ -1,6 +1,6 @@ { "name": "@github/actions-languageserver", - "version": "0.1.173", + "version": "0.1.174", "description": "Language server for GitHub Actions", "license": "MIT", "type": "module", @@ -40,8 +40,8 @@ "watch": "tsc --build tsconfig.build.json --watch" }, "dependencies": { - "@github/actions-languageservice": "^0.1.173", - "@github/actions-workflow-parser": "^0.1.173", + "@github/actions-languageservice": "^0.1.174", + "@github/actions-workflow-parser": "^0.1.174", "@octokit/rest": "^19.0.7", "@octokit/types": "^9.0.0", "vscode-languageserver": "^8.0.2", diff --git a/languageservice/package.json b/languageservice/package.json index 63ced82..aec147b 100644 --- a/languageservice/package.json +++ b/languageservice/package.json @@ -1,6 +1,6 @@ { "name": "@github/actions-languageservice", - "version": "0.1.173", + "version": "0.1.174", "description": "Language service for GitHub Actions", "license": "MIT", "type": "module", @@ -41,8 +41,8 @@ "watch": "tsc --build tsconfig.build.json --watch" }, "dependencies": { - "@github/actions-expressions": "^0.1.173", - "@github/actions-workflow-parser": "^0.1.173", + "@github/actions-expressions": "^0.1.174", + "@github/actions-workflow-parser": "^0.1.174", "vscode-languageserver-textdocument": "^1.0.7", "vscode-languageserver-types": "^3.17.2", "vscode-uri": "^3.0.7", diff --git a/lerna.json b/lerna.json index f6a37bd..794de1a 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useWorkspaces": true, - "version": "0.1.173" + "version": "0.1.174" } diff --git a/package-lock.json b/package-lock.json index b05e144..eca187e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -111,10 +111,10 @@ } }, "browser-playground": { - "version": "0.1.173", + "version": "0.1.174", "license": "MIT", "dependencies": { - "@github/actions-languageserver": "^0.1.173", + "@github/actions-languageserver": "^0.1.174", "monaco-editor-webpack-plugin": "^7.0.1", "monaco-editor-workers": "^0.34.2", "monaco-languageclient": "^4.0.3", @@ -135,7 +135,7 @@ }, "expressions": { "name": "@github/actions-expressions", - "version": "0.1.173", + "version": "0.1.174", "license": "MIT", "devDependencies": { "@types/jest": "^29.0.3", @@ -151,11 +151,11 @@ }, "languageserver": { "name": "@github/actions-languageserver", - "version": "0.1.173", + "version": "0.1.174", "license": "MIT", "dependencies": { - "@github/actions-languageservice": "^0.1.173", - "@github/actions-workflow-parser": "^0.1.173", + "@github/actions-languageservice": "^0.1.174", + "@github/actions-workflow-parser": "^0.1.174", "@octokit/rest": "^19.0.7", "@octokit/types": "^9.0.0", "vscode-languageserver": "^8.0.2", @@ -190,11 +190,11 @@ }, "languageservice": { "name": "@github/actions-languageservice", - "version": "0.1.173", + "version": "0.1.174", "license": "MIT", "dependencies": { - "@github/actions-expressions": "^0.1.173", - "@github/actions-workflow-parser": "^0.1.173", + "@github/actions-expressions": "^0.1.174", + "@github/actions-workflow-parser": "^0.1.174", "vscode-languageserver-textdocument": "^1.0.7", "vscode-languageserver-types": "^3.17.2", "vscode-uri": "^3.0.7", @@ -14285,10 +14285,10 @@ }, "workflow-parser": { "name": "@github/actions-workflow-parser", - "version": "0.1.173", + "version": "0.1.174", "license": "MIT", "dependencies": { - "@github/actions-expressions": "^0.1.173", + "@github/actions-expressions": "^0.1.174", "cronstrue": "^2.21.0", "yaml": "^2.0.0-8" }, @@ -14847,8 +14847,8 @@ "@github/actions-languageserver": { "version": "file:languageserver", "requires": { - "@github/actions-languageservice": "^0.1.173", - "@github/actions-workflow-parser": "^0.1.173", + "@github/actions-languageservice": "^0.1.174", + "@github/actions-workflow-parser": "^0.1.174", "@octokit/rest": "^19.0.7", "@octokit/types": "^9.0.0", "@types/jest": "^29.0.3", @@ -14881,8 +14881,8 @@ "@github/actions-languageservice": { "version": "file:languageservice", "requires": { - "@github/actions-expressions": "^0.1.173", - "@github/actions-workflow-parser": "^0.1.173", + "@github/actions-expressions": "^0.1.174", + "@github/actions-workflow-parser": "^0.1.174", "@types/jest": "^29.0.3", "jest": "^29.0.3", "prettier": "^2.8.3", @@ -14900,7 +14900,7 @@ "@github/actions-workflow-parser": { "version": "file:workflow-parser", "requires": { - "@github/actions-expressions": "^0.1.173", + "@github/actions-expressions": "^0.1.174", "@types/jest": "^29.0.3", "@typescript-eslint/eslint-plugin": "^5.40.0", "@typescript-eslint/parser": "^5.40.0", @@ -17894,7 +17894,7 @@ "browser-playground": { "version": "file:browser-playground", "requires": { - "@github/actions-languageserver": "^0.1.173", + "@github/actions-languageserver": "^0.1.174", "css-loader": "^6.7.2", "monaco-editor-webpack-plugin": "^7.0.1", "monaco-editor-workers": "^0.34.2", diff --git a/workflow-parser/package.json b/workflow-parser/package.json index e1a159b..1aeea19 100644 --- a/workflow-parser/package.json +++ b/workflow-parser/package.json @@ -1,6 +1,6 @@ { "name": "@github/actions-workflow-parser", - "version": "0.1.173", + "version": "0.1.174", "license": "MIT", "type": "module", "source": "./src/index.ts", @@ -40,7 +40,7 @@ "watch": "tsc --build tsconfig.build.json --watch" }, "dependencies": { - "@github/actions-expressions": "^0.1.173", + "@github/actions-expressions": "^0.1.174", "cronstrue": "^2.21.0", "yaml": "^2.0.0-8" },