From 2d9734c3dad30b45b9db9eec442ac5f89e766f9b Mon Sep 17 00:00:00 2001
From: jose-ws <80274739+jose-ws@users.noreply.github.com>
Date: Fri, 14 May 2021 11:27:02 -0400
Subject: [PATCH] feat(proxy): proxy environment variables available in
 lowercase for child processes. (#9978)

---
 lib/proxy.spec.ts    | 26 ++++++++++++++++++++++++++
 lib/proxy.ts         |  4 ++++
 lib/util/exec/env.ts |  3 +++
 3 files changed, 33 insertions(+)

diff --git a/lib/proxy.spec.ts b/lib/proxy.spec.ts
index c999ed909f..408b9a275d 100644
--- a/lib/proxy.spec.ts
+++ b/lib/proxy.spec.ts
@@ -7,7 +7,9 @@ describe('proxy', () => {
 
   beforeEach(() => {
     delete process.env.HTTP_PROXY;
+    delete process.env.http_proxy;
     delete process.env.HTTPS_PROXY;
+    delete process.env.https_proxy;
     delete process.env.NO_PROXY;
     delete process.env.no_proxy;
   });
@@ -17,11 +19,35 @@ describe('proxy', () => {
     bootstrap();
     expect(hasProxy()).toBeTrue();
   });
+  it('copies upper case HTTP_PROXY to http_proxy', () => {
+    process.env.HTTP_PROXY = httpProxy;
+    bootstrap();
+    expect(hasProxy()).toBeTrue();
+    expect(process.env.HTTP_PROXY).toBeDefined();
+    expect(process.env.http_proxy).toBeDefined();
+
+    expect(process.env.HTTPS_PROXY).toBeUndefined();
+    expect(process.env.https_proxy).toBeUndefined();
+    expect(process.env.NO_PROXY).toBeUndefined();
+    expect(process.env.no_proxy).toBeUndefined();
+  });
   it('respects HTTPS_PROXY', () => {
     process.env.HTTPS_PROXY = httpsProxy;
     bootstrap();
     expect(hasProxy()).toBeTrue();
   });
+  it('copies upper case HTTPS_PROXY to https_proxy', () => {
+    process.env.HTTPS_PROXY = httpsProxy;
+    bootstrap();
+    expect(hasProxy()).toBeTrue();
+    expect(process.env.HTTPS_PROXY).toBeDefined();
+    expect(process.env.https_proxy).toBeDefined();
+
+    expect(process.env.HTTP_PROXY).toBeUndefined();
+    expect(process.env.http_proxy).toBeUndefined();
+    expect(process.env.NO_PROXY).toBeUndefined();
+    expect(process.env.no_proxy).toBeUndefined();
+  });
   it('does nothing', () => {
     process.env.no_proxy = noProxy;
     bootstrap();
diff --git a/lib/proxy.ts b/lib/proxy.ts
index a1f7ca6d61..cb577b55c3 100644
--- a/lib/proxy.ts
+++ b/lib/proxy.ts
@@ -14,6 +14,10 @@ export function bootstrap(): void {
     ) {
       process.env[envVar] = process.env[envVar.toLowerCase()];
     }
+
+    if (process.env[envVar]) {
+      process.env[envVar.toLowerCase()] = process.env[envVar];
+    }
   });
 
   if (
diff --git a/lib/util/exec/env.ts b/lib/util/exec/env.ts
index faffd61bf8..480338560e 100644
--- a/lib/util/exec/env.ts
+++ b/lib/util/exec/env.ts
@@ -4,6 +4,9 @@ const basicEnvVars = [
   'HTTP_PROXY',
   'HTTPS_PROXY',
   'NO_PROXY',
+  'http_proxy',
+  'https_proxy',
+  'no_proxy',
   'HOME',
   'PATH',
   'LC_ALL',
-- 
GitLab