From 68d73442fa3b51e5002f7e57f9e34e40024e9420 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Sat, 28 Feb 2026 23:24:41 +0000 Subject: [PATCH 1/2] Remove unused registry types from `LANGUAGE_TO_REGISTRY_TYPE` --- lib/start-proxy-action.js | 9 +++++---- src/start-proxy.ts | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/start-proxy-action.js b/lib/start-proxy-action.js index 13996a08fe..63a6cabe39 100644 --- a/lib/start-proxy-action.js +++ b/lib/start-proxy-action.js @@ -121739,12 +121739,13 @@ function isPAT(value) { ]); } var LANGUAGE_TO_REGISTRY_TYPE = { + actions: [], java: ["maven_repository"], csharp: ["nuget_feed"], - javascript: ["npm_registry"], - python: ["python_index"], - ruby: ["rubygems_server"], - rust: ["cargo_registry"], + javascript: [], + python: [], + ruby: [], + rust: [], go: ["goproxy_server", "git_source"] }; function getRegistryAddress(registry) { diff --git a/src/start-proxy.ts b/src/start-proxy.ts index 7ed466a413..2164776ef6 100644 --- a/src/start-proxy.ts +++ b/src/start-proxy.ts @@ -225,12 +225,13 @@ function isPAT(value: string) { } const LANGUAGE_TO_REGISTRY_TYPE: Partial> = { + actions: [], java: ["maven_repository"], csharp: ["nuget_feed"], - javascript: ["npm_registry"], - python: ["python_index"], - ruby: ["rubygems_server"], - rust: ["cargo_registry"], + javascript: [], + python: [], + ruby: [], + rust: [], go: ["goproxy_server", "git_source"], } as const; From 8a1cd7656d0aa9d153062a6d78c2a950b8eadbce Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Sun, 1 Mar 2026 15:07:47 +0000 Subject: [PATCH 2/2] Put change behind a FF --- lib/analyze-action-post.js | 5 +++++ lib/analyze-action.js | 5 +++++ lib/autobuild-action.js | 5 +++++ lib/init-action-post.js | 5 +++++ lib/init-action.js | 5 +++++ lib/resolve-environment-action.js | 5 +++++ lib/setup-codeql-action.js | 5 +++++ lib/start-proxy-action-post.js | 5 +++++ lib/start-proxy-action.js | 25 ++++++++++++++++++++++--- lib/upload-lib.js | 5 +++++ lib/upload-sarif-action-post.js | 5 +++++ lib/upload-sarif-action.js | 5 +++++ src/feature-flags.ts | 6 ++++++ src/start-proxy-action.ts | 8 +++++++- src/start-proxy.test.ts | 26 ++++++++++++++++++++++++++ src/start-proxy.ts | 20 ++++++++++++++++++-- 16 files changed, 134 insertions(+), 6 deletions(-) diff --git a/lib/analyze-action-post.js b/lib/analyze-action-post.js index aaed462b38..50b46cfa40 100644 --- a/lib/analyze-action-post.js +++ b/lib/analyze-action-post.js @@ -162226,6 +162226,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/lib/analyze-action.js b/lib/analyze-action.js index cf0eef7f64..d676e89e1b 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -107986,6 +107986,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/lib/autobuild-action.js b/lib/autobuild-action.js index a5e822b8ea..e67b31036f 100644 --- a/lib/autobuild-action.js +++ b/lib/autobuild-action.js @@ -104275,6 +104275,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/lib/init-action-post.js b/lib/init-action-post.js index 000e55c0a5..9236f81b0d 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -165723,6 +165723,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/lib/init-action.js b/lib/init-action.js index bce9e2dfcd..b7117603cd 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -105521,6 +105521,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/lib/resolve-environment-action.js b/lib/resolve-environment-action.js index fe419d9104..90f7271554 100644 --- a/lib/resolve-environment-action.js +++ b/lib/resolve-environment-action.js @@ -104266,6 +104266,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/lib/setup-codeql-action.js b/lib/setup-codeql-action.js index e9a5e8dce8..12e7c4d74c 100644 --- a/lib/setup-codeql-action.js +++ b/lib/setup-codeql-action.js @@ -104163,6 +104163,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/lib/start-proxy-action-post.js b/lib/start-proxy-action-post.js index 14fa9fd053..6666bff38a 100644 --- a/lib/start-proxy-action-post.js +++ b/lib/start-proxy-action-post.js @@ -161632,6 +161632,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/lib/start-proxy-action.js b/lib/start-proxy-action.js index 63a6cabe39..e238dd691f 100644 --- a/lib/start-proxy-action.js +++ b/lib/start-proxy-action.js @@ -120955,6 +120955,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", @@ -121739,6 +121744,15 @@ function isPAT(value) { ]); } var LANGUAGE_TO_REGISTRY_TYPE = { + java: ["maven_repository"], + csharp: ["nuget_feed"], + javascript: ["npm_registry"], + python: ["python_index"], + ruby: ["rubygems_server"], + rust: ["cargo_registry"], + go: ["goproxy_server", "git_source"] +}; +var NEW_LANGUAGE_TO_REGISTRY_TYPE = { actions: [], java: ["maven_repository"], csharp: ["nuget_feed"], @@ -121765,8 +121779,9 @@ function getRegistryAddress(registry) { ); } } -function getCredentials(logger, registrySecrets, registriesCredentials, language) { - const registryTypeForLanguage = language ? LANGUAGE_TO_REGISTRY_TYPE[language] : void 0; +function getCredentials(logger, registrySecrets, registriesCredentials, language, skipUnusedRegistries = false) { + const registryMapping = skipUnusedRegistries ? NEW_LANGUAGE_TO_REGISTRY_TYPE : LANGUAGE_TO_REGISTRY_TYPE; + const registryTypeForLanguage = language ? registryMapping[language] : void 0; let credentialsStr; if (registriesCredentials !== void 0) { logger.info(`Using registries_credentials input.`); @@ -122263,11 +122278,15 @@ async function run(startedAt) { ); const languageInput = getOptionalInput("language"); language = languageInput ? parseLanguage(languageInput) : void 0; + const skipUnusedRegistries = await features.getValue( + "start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */ + ); const credentials = getCredentials( logger, getOptionalInput("registry_secrets"), getOptionalInput("registries_credentials"), - language + language, + skipUnusedRegistries ); if (credentials.length === 0) { logger.info("No credentials found, skipping proxy setup."); diff --git a/lib/upload-lib.js b/lib/upload-lib.js index eadfa50638..75d7e6f260 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -107434,6 +107434,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/lib/upload-sarif-action-post.js b/lib/upload-sarif-action-post.js index 103b279d16..167786e844 100644 --- a/lib/upload-sarif-action-post.js +++ b/lib/upload-sarif-action-post.js @@ -161794,6 +161794,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index 91ddb60d51..02c7c0d6ca 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -107147,6 +107147,11 @@ var featureConfig = { // cannot be found when interpreting results. minimumVersion: void 0 }, + ["start_proxy_remove_unused_registries" /* StartProxyRemoveUnusedRegistries */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: void 0 + }, ["start_proxy_use_features_release" /* StartProxyUseFeaturesRelease */]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/src/feature-flags.ts b/src/feature-flags.ts index 546d2e0ff8..f061790e8a 100644 --- a/src/feature-flags.ts +++ b/src/feature-flags.ts @@ -77,6 +77,7 @@ export enum Feature { QaTelemetryEnabled = "qa_telemetry_enabled", /** Note that this currently only disables baseline file coverage information. */ SkipFileCoverageOnPrs = "skip_file_coverage_on_prs", + StartProxyRemoveUnusedRegistries = "start_proxy_remove_unused_registries", StartProxyUseFeaturesRelease = "start_proxy_use_features_release", UploadOverlayDbToApi = "upload_overlay_db_to_api", UseRepositoryProperties = "use_repository_properties_v2", @@ -328,6 +329,11 @@ export const featureConfig = { // cannot be found when interpreting results. minimumVersion: undefined, }, + [Feature.StartProxyRemoveUnusedRegistries]: { + defaultValue: false, + envVar: "CODEQL_ACTION_START_PROXY_REMOVE_UNUSED_REGISTRIES", + minimumVersion: undefined, + }, [Feature.StartProxyUseFeaturesRelease]: { defaultValue: false, envVar: "CODEQL_ACTION_START_PROXY_USE_FEATURES_RELEASE", diff --git a/src/start-proxy-action.ts b/src/start-proxy-action.ts index 438d565ae8..29c76643e3 100644 --- a/src/start-proxy-action.ts +++ b/src/start-proxy-action.ts @@ -5,7 +5,7 @@ import * as core from "@actions/core"; import * as actionsUtil from "./actions-util"; import { getGitHubVersion } from "./api-client"; -import { FeatureEnablement, initFeatures } from "./feature-flags"; +import { Feature, FeatureEnablement, initFeatures } from "./feature-flags"; import { KnownLanguage } from "./languages"; import { getActionsLogger, Logger } from "./logging"; import { getRepositoryNwo } from "./repository"; @@ -58,12 +58,18 @@ async function run(startedAt: Date) { const languageInput = actionsUtil.getOptionalInput("language"); language = languageInput ? parseLanguage(languageInput) : undefined; + // Query the FF for whether we should use the reduced registry mapping. + const skipUnusedRegistries = await features.getValue( + Feature.StartProxyRemoveUnusedRegistries, + ); + // Get the registry configurations from one of the inputs. const credentials = getCredentials( logger, actionsUtil.getOptionalInput("registry_secrets"), actionsUtil.getOptionalInput("registries_credentials"), language, + skipUnusedRegistries, ); if (credentials.length === 0) { diff --git a/src/start-proxy.test.ts b/src/start-proxy.test.ts index b1c4926f8a..52456fe427 100644 --- a/src/start-proxy.test.ts +++ b/src/start-proxy.test.ts @@ -328,6 +328,32 @@ test("getCredentials logs a warning when a PAT is used without a username", asyn ]); }); +test("getCredentials returns all credentials for Actions when using LANGUAGE_TO_REGISTRY_TYPE", async (t) => { + const credentialsInput = toEncodedJSON(mixedCredentials); + + const credentials = startProxyExports.getCredentials( + getRunnerLogger(true), + undefined, + credentialsInput, + KnownLanguage.actions, + false, + ); + t.is(credentials.length, mixedCredentials.length); +}); + +test("getCredentials returns no credentials for Actions when using NEW_LANGUAGE_TO_REGISTRY_TYPE", async (t) => { + const credentialsInput = toEncodedJSON(mixedCredentials); + + const credentials = startProxyExports.getCredentials( + getRunnerLogger(true), + undefined, + credentialsInput, + KnownLanguage.actions, + true, + ); + t.deepEqual(credentials, []); +}); + test("parseLanguage", async (t) => { // Exact matches t.deepEqual(parseLanguage("csharp"), KnownLanguage.csharp); diff --git a/src/start-proxy.ts b/src/start-proxy.ts index 2164776ef6..5aefa7bdfb 100644 --- a/src/start-proxy.ts +++ b/src/start-proxy.ts @@ -224,7 +224,19 @@ function isPAT(value: string) { ]); } -const LANGUAGE_TO_REGISTRY_TYPE: Partial> = { +type RegistryMapping = Partial>; + +const LANGUAGE_TO_REGISTRY_TYPE: RegistryMapping = { + java: ["maven_repository"], + csharp: ["nuget_feed"], + javascript: ["npm_registry"], + python: ["python_index"], + ruby: ["rubygems_server"], + rust: ["cargo_registry"], + go: ["goproxy_server", "git_source"], +} as const; + +const NEW_LANGUAGE_TO_REGISTRY_TYPE: RegistryMapping = { actions: [], java: ["maven_repository"], csharp: ["nuget_feed"], @@ -268,9 +280,13 @@ export function getCredentials( registrySecrets: string | undefined, registriesCredentials: string | undefined, language: KnownLanguage | undefined, + skipUnusedRegistries: boolean = false, ): Credential[] { + const registryMapping = skipUnusedRegistries + ? NEW_LANGUAGE_TO_REGISTRY_TYPE + : LANGUAGE_TO_REGISTRY_TYPE; const registryTypeForLanguage = language - ? LANGUAGE_TO_REGISTRY_TYPE[language] + ? registryMapping[language] : undefined; let credentialsStr: string;