mirror of
https://github.com/cypress-io/cypress.git
synced 2026-03-01 04:19:15 -06:00
fix(cli): Respect NO_PROXY on cypress download (#17702)
Co-authored-by: Zach Bloomquist <git@chary.us>
This commit is contained in:
@@ -9,6 +9,7 @@ const request = require('@cypress/request')
|
||||
const Promise = require('bluebird')
|
||||
const requestProgress = require('request-progress')
|
||||
const { stripIndent } = require('common-tags')
|
||||
const getProxyForUrl = require('proxy-from-env').getProxyForUrl
|
||||
|
||||
const { throwFormErrorText, errors } = require('../errors')
|
||||
const fs = require('../fs')
|
||||
@@ -16,12 +17,9 @@ const util = require('../util')
|
||||
|
||||
const defaultBaseUrl = 'https://download.cypress.io/'
|
||||
|
||||
const getProxyUrl = () => {
|
||||
return process.env.HTTPS_PROXY ||
|
||||
process.env.https_proxy ||
|
||||
const getProxyForUrlWithNpmConfig = (url) => {
|
||||
return getProxyForUrl(url) ||
|
||||
process.env.npm_config_https_proxy ||
|
||||
process.env.HTTP_PROXY ||
|
||||
process.env.http_proxy ||
|
||||
process.env.npm_config_proxy ||
|
||||
null
|
||||
}
|
||||
@@ -205,7 +203,7 @@ const verifyDownloadedFile = (filename, expectedSize, expectedChecksum) => {
|
||||
// {filename: ..., downloaded: true}
|
||||
const downloadFromUrl = ({ url, downloadDestination, progress, ca }) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const proxy = getProxyUrl()
|
||||
const proxy = getProxyForUrlWithNpmConfig(url)
|
||||
|
||||
debug('Downloading package', {
|
||||
url,
|
||||
@@ -357,6 +355,6 @@ const start = (opts) => {
|
||||
module.exports = {
|
||||
start,
|
||||
getUrl,
|
||||
getProxyUrl,
|
||||
getProxyForUrlWithNpmConfig,
|
||||
getCA,
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
"minimist": "^1.2.5",
|
||||
"ospath": "^1.2.2",
|
||||
"pretty-bytes": "^5.6.0",
|
||||
"proxy-from-env": "1.0.0",
|
||||
"ramda": "~0.27.1",
|
||||
"request-progress": "^3.0.0",
|
||||
"supports-color": "^8.1.1",
|
||||
|
||||
@@ -313,28 +313,60 @@ describe('lib/tasks/download', function () {
|
||||
})
|
||||
|
||||
context('with proxy env vars', () => {
|
||||
const testUriHttp = 'http://anything.com'
|
||||
const testUriHttps = 'https://anything.com'
|
||||
|
||||
beforeEach(function () {
|
||||
this.env = _.clone(process.env)
|
||||
// add a default no_proxy which does not match the testUri
|
||||
process.env.NO_PROXY = 'localhost,.org'
|
||||
})
|
||||
|
||||
afterEach(function () {
|
||||
process.env = this.env
|
||||
})
|
||||
|
||||
it('prefers https_proxy over http_proxy', () => {
|
||||
process.env.HTTP_PROXY = 'foo'
|
||||
expect(download.getProxyUrl()).to.eq('foo')
|
||||
process.env.https_proxy = 'bar'
|
||||
expect(download.getProxyUrl()).to.eq('bar')
|
||||
it('uses http_proxy on http request', () => {
|
||||
process.env.http_proxy = 'http://foo'
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttp)).to.eq('http://foo')
|
||||
})
|
||||
|
||||
it('ignores http_proxy on https request', () => {
|
||||
process.env.http_proxy = 'http://foo'
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttps)).to.eq(null)
|
||||
process.env.https_proxy = 'https://bar'
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttps)).to.eq('https://bar')
|
||||
})
|
||||
|
||||
it('falls back to npm_config_proxy', () => {
|
||||
process.env.npm_config_proxy = 'foo'
|
||||
expect(download.getProxyUrl()).to.eq('foo')
|
||||
process.env.npm_config_https_proxy = 'bar'
|
||||
expect(download.getProxyUrl()).to.eq('bar')
|
||||
process.env.https_proxy = 'baz'
|
||||
expect(download.getProxyUrl()).to.eq('baz')
|
||||
process.env.npm_config_proxy = 'http://foo'
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttps)).to.eq('http://foo')
|
||||
process.env.npm_config_https_proxy = 'https://bar'
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttps)).to.eq('https://bar')
|
||||
process.env.https_proxy = 'https://baz'
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttps)).to.eq('https://baz')
|
||||
})
|
||||
|
||||
it('respects no_proxy on http and https requests', () => {
|
||||
process.env.NO_PROXY = 'localhost,.com'
|
||||
|
||||
process.env.http_proxy = 'http://foo'
|
||||
process.env.https_proxy = 'https://bar'
|
||||
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttp)).to.eq(null)
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttps)).to.eq(null)
|
||||
})
|
||||
|
||||
it('ignores no_proxy for npm proxy configs, prefers https over http', () => {
|
||||
process.env.NO_PROXY = 'localhost,.com'
|
||||
|
||||
process.env.npm_config_proxy = 'http://foo'
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttp)).to.eq('http://foo')
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttps)).to.eq('http://foo')
|
||||
|
||||
process.env.npm_config_https_proxy = 'https://bar'
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttp)).to.eq('https://bar')
|
||||
expect(download.getProxyForUrlWithNpmConfig(testUriHttps)).to.eq('https://bar')
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
61
yarn.lock
61
yarn.lock
@@ -3456,7 +3456,7 @@
|
||||
"@types/istanbul-reports" "^1.1.1"
|
||||
"@types/yargs" "^13.0.0"
|
||||
|
||||
"@jest/types@^26.3.0", "@jest/types@^26.6.2":
|
||||
"@jest/types@^26.6.2":
|
||||
version "26.6.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
|
||||
integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
|
||||
@@ -7657,7 +7657,7 @@
|
||||
dependencies:
|
||||
chalk "*"
|
||||
|
||||
"@types/cheerio@*", "@types/cheerio@0.22.21":
|
||||
"@types/cheerio@*":
|
||||
version "0.22.21"
|
||||
resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.21.tgz#5e37887de309ba11b2e19a6e14cad7874b31a8a3"
|
||||
integrity sha512-aGI3DfswwqgKPiEOTaiHV2ZPC9KEhprpgEbJnv0fZl3SGX0cGgEva1126dGrMC6AJM6v/aihlUgJn9M5DbDZ/Q==
|
||||
@@ -7752,7 +7752,7 @@
|
||||
dependencies:
|
||||
"@types/enzyme" "*"
|
||||
|
||||
"@types/enzyme@*", "@types/enzyme@3.10.5":
|
||||
"@types/enzyme@*":
|
||||
version "3.10.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.5.tgz#fe7eeba3550369eed20e7fb565bfb74eec44f1f0"
|
||||
integrity sha512-R+phe509UuUYy9Tk0YlSbipRpfVtIzb/9BHn5pTEtjJTF5LXvUjrIQcZvNyANNEyFrd2YGs196PniNT1fgvOQA==
|
||||
@@ -10160,7 +10160,7 @@ ansi-regex@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
||||
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
|
||||
|
||||
ansi-regex@^4.1.0:
|
||||
ansi-regex@^4.0.0, ansi-regex@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
|
||||
integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
|
||||
@@ -14469,6 +14469,11 @@ component-bind@1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
|
||||
integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
|
||||
|
||||
component-emitter@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
|
||||
integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
|
||||
|
||||
component-emitter@^1.2.0, component-emitter@^1.2.1, component-emitter@^1.3.0, component-emitter@~1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
|
||||
@@ -31563,15 +31568,25 @@ pretty-error@^2.0.2, pretty-error@^2.1.1:
|
||||
lodash "^4.17.20"
|
||||
renderkid "^2.0.4"
|
||||
|
||||
pretty-format@26.4.0, pretty-format@^24.9.0, pretty-format@^26.6.2:
|
||||
version "26.4.0"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.4.0.tgz#c08073f531429e9e5024049446f42ecc9f933a3b"
|
||||
integrity sha512-mEEwwpCseqrUtuMbrJG4b824877pM5xald3AkilJ47Po2YLr97/siejYQHqj2oDQBeJNbu+Q0qUuekJ8F0NAPg==
|
||||
pretty-format@^24.9.0:
|
||||
version "24.9.0"
|
||||
resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
|
||||
integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
|
||||
dependencies:
|
||||
"@jest/types" "^26.3.0"
|
||||
"@jest/types" "^24.9.0"
|
||||
ansi-regex "^4.0.0"
|
||||
ansi-styles "^3.2.0"
|
||||
react-is "^16.8.4"
|
||||
|
||||
pretty-format@^26.6.2:
|
||||
version "26.6.2"
|
||||
resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93"
|
||||
integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==
|
||||
dependencies:
|
||||
"@jest/types" "^26.6.2"
|
||||
ansi-regex "^5.0.0"
|
||||
ansi-styles "^4.0.0"
|
||||
react-is "^16.12.0"
|
||||
react-is "^17.0.1"
|
||||
|
||||
pretty-hrtime@^1.0.0, pretty-hrtime@^1.0.3:
|
||||
version "1.0.3"
|
||||
@@ -32715,12 +32730,12 @@ react-inspector@^5.1.0:
|
||||
is-dom "^1.0.0"
|
||||
prop-types "^15.0.0"
|
||||
|
||||
react-is@16.13.1, react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.6:
|
||||
react-is@16.13.1, react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
|
||||
version "16.13.1"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
|
||||
"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.2:
|
||||
"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1, react-is@^17.0.2:
|
||||
version "17.0.2"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
|
||||
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
|
||||
@@ -35735,7 +35750,25 @@ socket.io-client@4.0.1:
|
||||
parseuri "0.0.6"
|
||||
socket.io-parser "~4.0.4"
|
||||
|
||||
socket.io-parser@4.0.4, socket.io-parser@~3.3.0, socket.io-parser@~3.4.0, socket.io-parser@~4.0.3, socket.io-parser@~4.0.4:
|
||||
socket.io-parser@~3.3.0:
|
||||
version "3.3.2"
|
||||
resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz#ef872009d0adcf704f2fbe830191a14752ad50b6"
|
||||
integrity sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==
|
||||
dependencies:
|
||||
component-emitter "~1.3.0"
|
||||
debug "~3.1.0"
|
||||
isarray "2.0.1"
|
||||
|
||||
socket.io-parser@~3.4.0:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a"
|
||||
integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==
|
||||
dependencies:
|
||||
component-emitter "1.2.1"
|
||||
debug "~4.1.0"
|
||||
isarray "2.0.1"
|
||||
|
||||
socket.io-parser@~4.0.3, socket.io-parser@~4.0.4:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0"
|
||||
integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==
|
||||
@@ -39795,7 +39828,7 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
|
||||
hash-sum "^1.0.2"
|
||||
loader-utils "^1.0.2"
|
||||
|
||||
vue-template-compiler@2.6.12, vue-template-compiler@^2.6.11:
|
||||
vue-template-compiler@^2.6.11:
|
||||
version "2.6.12"
|
||||
resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e"
|
||||
integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==
|
||||
|
||||
Reference in New Issue
Block a user