From f21b1256c23a3fd802c1008bc209f132b0f012a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 16 Jan 2025 14:42:14 +0100 Subject: [PATCH] supoprt undici proxying in the cli MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/wise-apes-juggle.md | 5 ++++ .../config/vocabularies/Backstage/accept.txt | 1 + packages/cli/package.json | 1 + .../cli/src/commands/versions/bump.test.ts | 10 ++++++-- packages/cli/src/commands/versions/bump.ts | 25 +++++++++++-------- yarn.lock | 8 ++++++ 6 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 .changeset/wise-apes-juggle.md diff --git a/.changeset/wise-apes-juggle.md b/.changeset/wise-apes-juggle.md new file mode 100644 index 0000000000..1b027771f9 --- /dev/null +++ b/.changeset/wise-apes-juggle.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Ensure that both global-agent and undici agents are enabled when proxying is enabled. diff --git a/.github/vale/config/vocabularies/Backstage/accept.txt b/.github/vale/config/vocabularies/Backstage/accept.txt index 7dea58e627..34ea8cc894 100644 --- a/.github/vale/config/vocabularies/Backstage/accept.txt +++ b/.github/vale/config/vocabularies/Backstage/accept.txt @@ -468,6 +468,7 @@ typeahead ui unbreak Unconference +undici unicode unmanaged unmount diff --git a/packages/cli/package.json b/packages/cli/package.json index 99c7146fc4..4ebf78ec6f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -147,6 +147,7 @@ "tar": "^6.1.12", "terser-webpack-plugin": "^5.1.3", "ts-morph": "^24.0.0", + "undici": "^7.2.3", "util": "^0.12.3", "webpack": "^5.94.0", "webpack-dev-server": "^5.0.0", diff --git a/packages/cli/src/commands/versions/bump.test.ts b/packages/cli/src/commands/versions/bump.test.ts index 96e8de517b..d3ff0c1fbe 100644 --- a/packages/cli/src/commands/versions/bump.test.ts +++ b/packages/cli/src/commands/versions/bump.test.ts @@ -28,8 +28,14 @@ import { createMockDirectory, } from '@backstage/backend-test-utils'; -// Avoid mutating the global http(s) agent used in other tests -jest.mock('global-agent/bootstrap', () => {}); +// Avoid mutating the global agents used in other tests +jest.mock('global-agent', () => ({ + bootstrap: jest.fn(), +})); +jest.mock('undici', () => ({ + setGlobalDispatcher: jest.fn(), + EnvHttpProxyAgent: class {}, +})); // Remove log coloring to simplify log matching jest.mock('chalk', () => ({ diff --git a/packages/cli/src/commands/versions/bump.ts b/packages/cli/src/commands/versions/bump.ts index 76e6092140..1e1e5deff2 100644 --- a/packages/cli/src/commands/versions/bump.ts +++ b/packages/cli/src/commands/versions/bump.ts @@ -14,11 +14,7 @@ * limitations under the License. */ -import { bootstrap } from 'global-agent'; - -if (shouldUseGlobalAgent()) { - bootstrap(); -} +maybeBootstrapProxy(); import fs from 'fs-extra'; import chalk from 'chalk'; @@ -46,17 +42,24 @@ import { migrateMovedPackages } from './migrate'; import { runYarnInstall } from './utils'; import { run } from '../../lib/run'; -function shouldUseGlobalAgent(): boolean { +function maybeBootstrapProxy() { // see https://www.npmjs.com/package/global-agent - const namespace = + const globalAgentNamespace = process.env.GLOBAL_AGENT_ENVIRONMENT_VARIABLE_NAMESPACE ?? 'GLOBAL_AGENT_'; if ( - process.env[`${namespace}HTTP_PROXY`] || - process.env[`${namespace}HTTPS_PROXY`] + process.env[`${globalAgentNamespace}HTTP_PROXY`] || + process.env[`${globalAgentNamespace}HTTPS_PROXY`] ) { - return true; + const globalAgent = + require('global-agent') as typeof import('global-agent'); + globalAgent.bootstrap(); + } + + if (process.env.HTTP_PROXY || process.env.HTTPS_PROXY) { + const { setGlobalDispatcher, EnvHttpProxyAgent } = + require('undici') as typeof import('undici'); + setGlobalDispatcher(new EnvHttpProxyAgent()); } - return false; } const DEP_TYPES = [ diff --git a/yarn.lock b/yarn.lock index 1be953f509..0f25731334 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4020,6 +4020,7 @@ __metadata: tar: ^6.1.12 terser-webpack-plugin: ^5.1.3 ts-morph: ^24.0.0 + undici: ^7.2.3 util: ^0.12.3 webpack: ^5.94.0 webpack-dev-server: ^5.0.0 @@ -45468,6 +45469,13 @@ __metadata: languageName: node linkType: hard +"undici@npm:^7.2.3": + version: 7.2.3 + resolution: "undici@npm:7.2.3" + checksum: 93bfe6b1f5acc1c7180a2d6a04b22bda8223ee4c683a7f240b261b272eeb3bd46e9514f70afe8ad3e55e82ca06ade19cd7bc590202a0b4118803a75daf776b5d + languageName: node + linkType: hard + "uni-global@npm:^1.0.0": version: 1.0.0 resolution: "uni-global@npm:1.0.0"