diff --git a/package.json b/package.json index c1749a5..cb3a4dd 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,18 @@ "markdownDescription": "If this is set to true, use the auth provider for the GitHub Enterprise URL configured in `github-enterprise.uri`", "default": false, "scope": "window" + }, + "github-actions.validation.secrets": { + "type": "string", + "enum": ["auto", "always", "never"], + "enumDescriptions": [ + "Suppresses warnings when repository context is unavailable (e.g., timing issues during initialization) - recommended", + "Always show warnings", + "Never validate secrets/variables access" + ], + "default": "auto", + "description": "Controls validation of secrets and variables context access in workflow files", + "scope": "window" } } }, diff --git a/src/configuration/configuration.ts b/src/configuration/configuration.ts index d12711a..73a4af8 100644 --- a/src/configuration/configuration.ts +++ b/src/configuration/configuration.ts @@ -15,9 +15,11 @@ export function initConfiguration(context: vscode.ExtensionContext) { (useEnterprise() && (e.affectsConfiguration("github-enterprise.uri") || e.affectsConfiguration(getSettingsKey("remote-name")))) ) { - await updateLanguageServerApiUrl(context); + await restartLanguageServer(context); resetGitHubContext(); await vscode.commands.executeCommand("github-actions.explorer.refresh"); + } else if (e.affectsConfiguration(getSettingsKey("validation.secrets"))) { + await restartLanguageServer(context); } }) ); @@ -82,8 +84,7 @@ export function getGitHubApiUri(): string { } } -async function updateLanguageServerApiUrl(context: vscode.ExtensionContext) { +async function restartLanguageServer(context: vscode.ExtensionContext) { await deactivateLanguageServer(); - await initLanguageServer(context); } diff --git a/src/workflow/languageServer.ts b/src/workflow/languageServer.ts index be87dc1..b54653e 100644 --- a/src/workflow/languageServer.ts +++ b/src/workflow/languageServer.ts @@ -2,7 +2,7 @@ import * as path from "path"; import * as vscode from "vscode"; import {Commands} from "@actions/languageserver/commands"; -import {InitializationOptions, LogLevel} from "@actions/languageserver/initializationOptions"; +import {InitializationOptions, LogLevel, SecretsValidationMode} from "@actions/languageserver/initializationOptions"; import {ReadFileRequest, Requests} from "@actions/languageserver/request"; import {BaseLanguageClient, LanguageClientOptions} from "vscode-languageclient"; import {LanguageClient as BrowserLanguageClient} from "vscode-languageclient/browser"; @@ -20,6 +20,10 @@ function isNode(): boolean { return typeof process !== "undefined" && process.versions?.node != null; } +function getSecretsValidationMode(): SecretsValidationMode { + return vscode.workspace.getConfiguration("github-actions").get("validation.secrets", "auto"); +} + export async function initLanguageServer(context: vscode.ExtensionContext) { const session = await getSession(); @@ -35,7 +39,8 @@ export async function initLanguageServer(context: vscode.ExtensionContext) { workspaceUri: repo.workspaceUri.toString(), organizationOwned: repo.organizationOwned })), - logLevel: PRODUCTION ? LogLevel.Warn : LogLevel.Debug + logLevel: PRODUCTION ? LogLevel.Warn : LogLevel.Debug, + secretsValidation: getSecretsValidationMode() }; const clientOptions: LanguageClientOptions = {