Compare commits

...

12 Commits

Author SHA1 Message Date
Dmitry Shibanov
1432569335 update dependencies 2023-10-23 13:40:48 +02:00
Dmitry Shibanov
6cf1d17ac0 Update index.js 2023-10-23 13:30:53 +02:00
Dmitry Shibanov
92309f6248 Merge branch 'main' into v-dmshib/action-to-node20 2023-10-23 13:29:35 +02:00
Dmitry Shibanov
f785ab5716 update dependencies 2023-10-23 13:26:12 +02:00
Dmitry Shibanov
1a4442cacd
Update toolkit cache and core (#875) 2023-10-23 12:20:07 +02:00
Dmitry Shibanov
5209434f1a update dependency and merge main 2023-10-23 10:22:40 +02:00
Nikolai Laevskii
6e9e44895f
Merge pull request #872 from akv-platform/add-notice-about-binaries-not-being-updated
Add notice about binaries not being updated yet
2023-10-19 17:20:27 +02:00
Nikolai Laevskii
e52912ef25 Update tests 2023-10-19 17:12:39 +02:00
Nikolai Laevskii
ac16ae42d7 Update message to use waning instead of info 2023-10-19 16:59:10 +02:00
Nikolai Laevskii
5a8d9111e3 Update build 2023-10-19 14:31:08 +02:00
Nikolai Laevskii
9e956a555c Add notice about binaries not being updated yet 2023-10-19 13:43:56 +02:00
dependabot[bot]
7da2a7eb0c
Bump @babel/traverse from 7.15.4 to 7.23.2 (#870) 2023-10-19 10:40:59 +02:00
11 changed files with 463 additions and 285 deletions

View File

@ -98,8 +98,8 @@ jobs:
run: __tests__/verify-node.sh "${{ matrix.node-version }}" run: __tests__/verify-node.sh "${{ matrix.node-version }}"
shell: bash shell: bash
node-yarn2-depencies-caching: node-yarn3-depencies-caching:
name: Test yarn 2 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) name: Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }})
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
env: env:
YARN_ENABLE_IMMUTABLE_INSTALLS: false YARN_ENABLE_IMMUTABLE_INSTALLS: false
@ -111,7 +111,7 @@ jobs:
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Update yarn - name: Update yarn
run: yarn set version berry run: yarn set version 3.6.4
- name: Yarn version - name: Yarn version
run: yarn --version run: yarn --version
- name: Generate simple .yarnrc.yml - name: Generate simple .yarnrc.yml

Binary file not shown.

Binary file not shown.

BIN
.licenses/npm/undici-types.dep.yml generated Normal file

Binary file not shown.

Binary file not shown.

View File

@ -357,6 +357,41 @@ describe('setup-node', () => {
expect(cnSpy).toHaveBeenCalledWith(`::error::${errMsg}${osm.EOL}`); expect(cnSpy).toHaveBeenCalledWith(`::error::${errMsg}${osm.EOL}`);
}); });
it('reports when download failed but version exists', async () => {
os.platform = 'linux';
os.arch = 'x64';
// a version which is not in the manifest but is in node dist
const versionSpec = '11.15.0';
inputs['node-version'] = versionSpec;
inputs['always-auth'] = false;
inputs['token'] = 'faketoken';
// ... but not in the local cache
findSpy.mockImplementation(() => '');
dlSpy.mockImplementationOnce(async () => {
throw new tc.HTTPError(404);
});
await main.run();
expect(getManifestSpy).toHaveBeenCalled();
expect(logSpy).toHaveBeenCalledWith(
`Attempting to download ${versionSpec}...`
);
expect(logSpy).toHaveBeenCalledWith(
'Not found in manifest. Falling back to download directly from Node'
);
expect(dlSpy).toHaveBeenCalled();
expect(warningSpy).toHaveBeenCalledWith(
`Node version ${versionSpec} for platform ${os.platform} and architecture ${os.arch} was found but failed to download. ` +
'This usually happens when downloadable binaries are not fully updated at https://nodejs.org/. ' +
'To resolve this issue you may either fall back to the older version or try again later.'
);
});
it('acquires specified architecture of node', async () => { it('acquires specified architecture of node', async () => {
for (const {arch, version, osSpec} of [ for (const {arch, version, osSpec} of [
{arch: 'x86', version: '12.16.2', osSpec: 'win32'}, {arch: 'x86', version: '12.16.2', osSpec: 'win32'},

View File

@ -55567,6 +55567,10 @@ class StreamHandler extends AsyncResource {
{ callback, body: res, contentType, statusCode, statusMessage, headers } { callback, body: res, contentType, statusCode, statusMessage, headers }
) )
} else { } else {
if (factory === null) {
return
}
res = this.runInAsyncScope(factory, null, { res = this.runInAsyncScope(factory, null, {
statusCode, statusCode,
headers, headers,
@ -55615,7 +55619,7 @@ class StreamHandler extends AsyncResource {
onData (chunk) { onData (chunk) {
const { res } = this const { res } = this
return res.write(chunk) return res ? res.write(chunk) : true
} }
onComplete (trailers) { onComplete (trailers) {
@ -55623,6 +55627,10 @@ class StreamHandler extends AsyncResource {
removeSignal(this) removeSignal(this)
if (!res) {
return
}
this.trailers = util.parseHeaders(trailers) this.trailers = util.parseHeaders(trailers)
res.end() res.end()
@ -56079,7 +56087,7 @@ function consumeEnd (consume) {
pos += buf.byteLength pos += buf.byteLength
} }
resolve(dst) resolve(dst.buffer)
} else if (type === 'blob') { } else if (type === 'blob') {
if (!Blob) { if (!Blob) {
Blob = (__nccwpck_require__(4300).Blob) Blob = (__nccwpck_require__(4300).Blob)
@ -57451,6 +57459,7 @@ module.exports = {
const assert = __nccwpck_require__(9491) const assert = __nccwpck_require__(9491)
const net = __nccwpck_require__(1808) const net = __nccwpck_require__(1808)
const http = __nccwpck_require__(3685)
const { pipeline } = __nccwpck_require__(2781) const { pipeline } = __nccwpck_require__(2781)
const util = __nccwpck_require__(3983) const util = __nccwpck_require__(3983)
const timers = __nccwpck_require__(9459) const timers = __nccwpck_require__(9459)
@ -57538,6 +57547,7 @@ const {
HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_AUTHORITY,
HTTP2_HEADER_METHOD, HTTP2_HEADER_METHOD,
HTTP2_HEADER_PATH, HTTP2_HEADER_PATH,
HTTP2_HEADER_SCHEME,
HTTP2_HEADER_CONTENT_LENGTH, HTTP2_HEADER_CONTENT_LENGTH,
HTTP2_HEADER_EXPECT, HTTP2_HEADER_EXPECT,
HTTP2_HEADER_STATUS HTTP2_HEADER_STATUS
@ -57714,7 +57724,7 @@ class Client extends DispatcherBase {
this[kConnector] = connect this[kConnector] = connect
this[kSocket] = null this[kSocket] = null
this[kPipelining] = pipelining != null ? pipelining : 1 this[kPipelining] = pipelining != null ? pipelining : 1
this[kMaxHeadersSize] = maxHeaderSize || 16384 this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize
this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout
this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout
this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1e3 : keepAliveTimeoutThreshold this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1e3 : keepAliveTimeoutThreshold
@ -58513,7 +58523,9 @@ function onParserTimeout (parser) {
function onSocketReadable () { function onSocketReadable () {
const { [kParser]: parser } = this const { [kParser]: parser } = this
parser.readMore() if (parser) {
parser.readMore()
}
} }
function onSocketError (err) { function onSocketError (err) {
@ -59134,7 +59146,7 @@ function writeH2 (client, session, request) {
const h2State = client[kHTTP2SessionState] const h2State = client[kHTTP2SessionState]
headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost] headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost]
headers[HTTP2_HEADER_PATH] = path headers[HTTP2_HEADER_METHOD] = method
if (method === 'CONNECT') { if (method === 'CONNECT') {
session.ref() session.ref()
@ -59161,10 +59173,14 @@ function writeH2 (client, session, request) {
}) })
return true return true
} else {
headers[HTTP2_HEADER_METHOD] = method
} }
// https://tools.ietf.org/html/rfc7540#section-8.3
// :path and :scheme headers must be omited when sending CONNECT
headers[HTTP2_HEADER_PATH] = path
headers[HTTP2_HEADER_SCHEME] = 'https'
// https://tools.ietf.org/html/rfc7231#section-4.3.1 // https://tools.ietf.org/html/rfc7231#section-4.3.1
// https://tools.ietf.org/html/rfc7231#section-4.3.2 // https://tools.ietf.org/html/rfc7231#section-4.3.2
// https://tools.ietf.org/html/rfc7231#section-4.3.5 // https://tools.ietf.org/html/rfc7231#section-4.3.5
@ -59301,6 +59317,7 @@ function writeH2 (client, session, request) {
stream.cork() stream.cork()
stream.write(body) stream.write(body)
stream.uncork() stream.uncork()
stream.end()
request.onBodySent(body) request.onBodySent(body)
request.onRequestSent() request.onRequestSent()
} else if (util.isBlobLike(body)) { } else if (util.isBlobLike(body)) {
@ -59535,13 +59552,17 @@ async function writeIterable ({ h2stream, body, client, request, socket, content
throw socket[kError] throw socket[kError]
} }
if (!h2stream.write(chunk)) { const res = h2stream.write(chunk)
request.onBodySent(chunk)
if (!res) {
await waitForDrain() await waitForDrain()
} }
} }
} catch (err) { } catch (err) {
h2stream.destroy(err) h2stream.destroy(err)
} finally { } finally {
request.onRequestSent()
h2stream.end()
h2stream h2stream
.off('close', onDrain) .off('close', onDrain)
.off('drain', onDrain) .off('drain', onDrain)
@ -59754,11 +59775,13 @@ class CompatFinalizer {
} }
register (dispatcher, key) { register (dispatcher, key) {
dispatcher.on('disconnect', () => { if (dispatcher.on) {
if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { dispatcher.on('disconnect', () => {
this.finalizer(key) if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) {
} this.finalizer(key)
}) }
})
}
} }
} }
@ -61424,7 +61447,8 @@ function processHeader (request, key, val, skipAppend = false) {
key.toLowerCase() === 'content-type' key.toLowerCase() === 'content-type'
) { ) {
request.contentType = val request.contentType = val
request.headers += processHeaderValue(key, val) if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend)
else request.headers += processHeaderValue(key, val)
} else if ( } else if (
key.length === 17 && key.length === 17 &&
key.toLowerCase() === 'transfer-encoding' key.toLowerCase() === 'transfer-encoding'
@ -65035,7 +65059,7 @@ class Fetch extends EE {
} }
// https://fetch.spec.whatwg.org/#fetch-method // https://fetch.spec.whatwg.org/#fetch-method
async function fetch (input, init = {}) { function fetch (input, init = {}) {
webidl.argumentLengthCheck(arguments, 1, { header: 'globalThis.fetch' }) webidl.argumentLengthCheck(arguments, 1, { header: 'globalThis.fetch' })
// 1. Let p be a new promise. // 1. Let p be a new promise.
@ -65118,7 +65142,7 @@ async function fetch (input, init = {}) {
const processResponse = (response) => { const processResponse = (response) => {
// 1. If locallyAborted is true, terminate these substeps. // 1. If locallyAborted is true, terminate these substeps.
if (locallyAborted) { if (locallyAborted) {
return return Promise.resolve()
} }
// 2. If responses aborted flag is set, then: // 2. If responses aborted flag is set, then:
@ -65131,7 +65155,7 @@ async function fetch (input, init = {}) {
// deserializedError. // deserializedError.
abortFetch(p, request, responseObject, controller.serializedAbortReason) abortFetch(p, request, responseObject, controller.serializedAbortReason)
return return Promise.resolve()
} }
// 3. If response is a network error, then reject p with a TypeError // 3. If response is a network error, then reject p with a TypeError
@ -65140,7 +65164,7 @@ async function fetch (input, init = {}) {
p.reject( p.reject(
Object.assign(new TypeError('fetch failed'), { cause: response.error }) Object.assign(new TypeError('fetch failed'), { cause: response.error })
) )
return return Promise.resolve()
} }
// 4. Set responseObject to the result of creating a Response object, // 4. Set responseObject to the result of creating a Response object,
@ -65690,13 +65714,13 @@ async function mainFetch (fetchParams, recursive = false) {
// https://fetch.spec.whatwg.org/#concept-scheme-fetch // https://fetch.spec.whatwg.org/#concept-scheme-fetch
// given a fetch params fetchParams // given a fetch params fetchParams
async function schemeFetch (fetchParams) { function schemeFetch (fetchParams) {
// Note: since the connection is destroyed on redirect, which sets fetchParams to a // Note: since the connection is destroyed on redirect, which sets fetchParams to a
// cancelled state, we do not want this condition to trigger *unless* there have been // cancelled state, we do not want this condition to trigger *unless* there have been
// no redirects. See https://github.com/nodejs/undici/issues/1776 // no redirects. See https://github.com/nodejs/undici/issues/1776
// 1. If fetchParams is canceled, then return the appropriate network error for fetchParams. // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.
if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {
return makeAppropriateNetworkError(fetchParams) return Promise.resolve(makeAppropriateNetworkError(fetchParams))
} }
// 2. Let request be fetchParamss request. // 2. Let request be fetchParamss request.
@ -65712,7 +65736,7 @@ async function schemeFetch (fetchParams) {
// and body is the empty byte sequence as a body. // and body is the empty byte sequence as a body.
// Otherwise, return a network error. // Otherwise, return a network error.
return makeNetworkError('about scheme is not supported') return Promise.resolve(makeNetworkError('about scheme is not supported'))
} }
case 'blob:': { case 'blob:': {
if (!resolveObjectURL) { if (!resolveObjectURL) {
@ -65725,7 +65749,7 @@ async function schemeFetch (fetchParams) {
// https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56 // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56
// Buffer.resolveObjectURL does not ignore URL queries. // Buffer.resolveObjectURL does not ignore URL queries.
if (blobURLEntry.search.length !== 0) { if (blobURLEntry.search.length !== 0) {
return makeNetworkError('NetworkError when attempting to fetch resource.') return Promise.resolve(makeNetworkError('NetworkError when attempting to fetch resource.'))
} }
const blobURLEntryObject = resolveObjectURL(blobURLEntry.toString()) const blobURLEntryObject = resolveObjectURL(blobURLEntry.toString())
@ -65733,7 +65757,7 @@ async function schemeFetch (fetchParams) {
// 2. If requests method is not `GET`, blobURLEntry is null, or blobURLEntrys // 2. If requests method is not `GET`, blobURLEntry is null, or blobURLEntrys
// object is not a Blob object, then return a network error. // object is not a Blob object, then return a network error.
if (request.method !== 'GET' || !isBlobLike(blobURLEntryObject)) { if (request.method !== 'GET' || !isBlobLike(blobURLEntryObject)) {
return makeNetworkError('invalid method') return Promise.resolve(makeNetworkError('invalid method'))
} }
// 3. Let bodyWithType be the result of safely extracting blobURLEntrys object. // 3. Let bodyWithType be the result of safely extracting blobURLEntrys object.
@ -65760,7 +65784,7 @@ async function schemeFetch (fetchParams) {
response.body = body response.body = body
return response return Promise.resolve(response)
} }
case 'data:': { case 'data:': {
// 1. Let dataURLStruct be the result of running the // 1. Let dataURLStruct be the result of running the
@ -65771,7 +65795,7 @@ async function schemeFetch (fetchParams) {
// 2. If dataURLStruct is failure, then return a // 2. If dataURLStruct is failure, then return a
// network error. // network error.
if (dataURLStruct === 'failure') { if (dataURLStruct === 'failure') {
return makeNetworkError('failed to fetch the data URL') return Promise.resolve(makeNetworkError('failed to fetch the data URL'))
} }
// 3. Let mimeType be dataURLStructs MIME type, serialized. // 3. Let mimeType be dataURLStructs MIME type, serialized.
@ -65780,28 +65804,28 @@ async function schemeFetch (fetchParams) {
// 4. Return a response whose status message is `OK`, // 4. Return a response whose status message is `OK`,
// header list is « (`Content-Type`, mimeType) », // header list is « (`Content-Type`, mimeType) »,
// and body is dataURLStructs body as a body. // and body is dataURLStructs body as a body.
return makeResponse({ return Promise.resolve(makeResponse({
statusText: 'OK', statusText: 'OK',
headersList: [ headersList: [
['content-type', { name: 'Content-Type', value: mimeType }] ['content-type', { name: 'Content-Type', value: mimeType }]
], ],
body: safelyExtractBody(dataURLStruct.body)[0] body: safelyExtractBody(dataURLStruct.body)[0]
}) }))
} }
case 'file:': { case 'file:': {
// For now, unfortunate as it is, file URLs are left as an exercise for the reader. // For now, unfortunate as it is, file URLs are left as an exercise for the reader.
// When in doubt, return a network error. // When in doubt, return a network error.
return makeNetworkError('not implemented... yet...') return Promise.resolve(makeNetworkError('not implemented... yet...'))
} }
case 'http:': case 'http:':
case 'https:': { case 'https:': {
// Return the result of running HTTP fetch given fetchParams. // Return the result of running HTTP fetch given fetchParams.
return await httpFetch(fetchParams) return httpFetch(fetchParams)
.catch((err) => makeNetworkError(err)) .catch((err) => makeNetworkError(err))
} }
default: { default: {
return makeNetworkError('unknown scheme') return Promise.resolve(makeNetworkError('unknown scheme'))
} }
} }
} }
@ -65820,7 +65844,7 @@ function finalizeResponse (fetchParams, response) {
} }
// https://fetch.spec.whatwg.org/#fetch-finale // https://fetch.spec.whatwg.org/#fetch-finale
async function fetchFinale (fetchParams, response) { function fetchFinale (fetchParams, response) {
// 1. If response is a network error, then: // 1. If response is a network error, then:
if (response.type === 'error') { if (response.type === 'error') {
// 1. Set responses URL list to « fetchParamss requests URL list[0] ». // 1. Set responses URL list to « fetchParamss requests URL list[0] ».
@ -65904,8 +65928,9 @@ async function fetchFinale (fetchParams, response) {
} else { } else {
// 4. Otherwise, fully read responses body given processBody, processBodyError, // 4. Otherwise, fully read responses body given processBody, processBodyError,
// and fetchParamss task destination. // and fetchParamss task destination.
await fullyReadBody(response.body, processBody, processBodyError) return fullyReadBody(response.body, processBody, processBodyError)
} }
return Promise.resolve()
} }
} }
@ -66013,7 +66038,7 @@ async function httpFetch (fetchParams) {
} }
// https://fetch.spec.whatwg.org/#http-redirect-fetch // https://fetch.spec.whatwg.org/#http-redirect-fetch
async function httpRedirectFetch (fetchParams, response) { function httpRedirectFetch (fetchParams, response) {
// 1. Let request be fetchParamss request. // 1. Let request be fetchParamss request.
const request = fetchParams.request const request = fetchParams.request
@ -66039,18 +66064,18 @@ async function httpRedirectFetch (fetchParams, response) {
} }
} catch (err) { } catch (err) {
// 5. If locationURL is failure, then return a network error. // 5. If locationURL is failure, then return a network error.
return makeNetworkError(err) return Promise.resolve(makeNetworkError(err))
} }
// 6. If locationURLs scheme is not an HTTP(S) scheme, then return a network // 6. If locationURLs scheme is not an HTTP(S) scheme, then return a network
// error. // error.
if (!urlIsHttpHttpsScheme(locationURL)) { if (!urlIsHttpHttpsScheme(locationURL)) {
return makeNetworkError('URL scheme must be a HTTP(S) scheme') return Promise.resolve(makeNetworkError('URL scheme must be a HTTP(S) scheme'))
} }
// 7. If requests redirect count is 20, then return a network error. // 7. If requests redirect count is 20, then return a network error.
if (request.redirectCount === 20) { if (request.redirectCount === 20) {
return makeNetworkError('redirect count exceeded') return Promise.resolve(makeNetworkError('redirect count exceeded'))
} }
// 8. Increase requests redirect count by 1. // 8. Increase requests redirect count by 1.
@ -66064,7 +66089,7 @@ async function httpRedirectFetch (fetchParams, response) {
(locationURL.username || locationURL.password) && (locationURL.username || locationURL.password) &&
!sameOrigin(request, locationURL) !sameOrigin(request, locationURL)
) { ) {
return makeNetworkError('cross origin not allowed for request mode "cors"') return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"'))
} }
// 10. If requests response tainting is "cors" and locationURL includes // 10. If requests response tainting is "cors" and locationURL includes
@ -66073,9 +66098,9 @@ async function httpRedirectFetch (fetchParams, response) {
request.responseTainting === 'cors' && request.responseTainting === 'cors' &&
(locationURL.username || locationURL.password) (locationURL.username || locationURL.password)
) { ) {
return makeNetworkError( return Promise.resolve(makeNetworkError(
'URL cannot contain credentials for request mode "cors"' 'URL cannot contain credentials for request mode "cors"'
) ))
} }
// 11. If actualResponses status is not 303, requests body is non-null, // 11. If actualResponses status is not 303, requests body is non-null,
@ -66085,7 +66110,7 @@ async function httpRedirectFetch (fetchParams, response) {
request.body != null && request.body != null &&
request.body.source == null request.body.source == null
) { ) {
return makeNetworkError() return Promise.resolve(makeNetworkError())
} }
// 12. If one of the following is true // 12. If one of the following is true
@ -66114,6 +66139,10 @@ async function httpRedirectFetch (fetchParams, response) {
if (!sameOrigin(requestCurrentURL(request), locationURL)) { if (!sameOrigin(requestCurrentURL(request), locationURL)) {
// https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name
request.headersList.delete('authorization') request.headersList.delete('authorization')
// "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement.
request.headersList.delete('cookie')
request.headersList.delete('host')
} }
// 14. If requests body is non-null, then set requests body to the first return // 14. If requests body is non-null, then set requests body to the first return
@ -66258,7 +66287,7 @@ async function httpNetworkOrCacheFetch (
// user agents should append `User-Agent`/default `User-Agent` value to // user agents should append `User-Agent`/default `User-Agent` value to
// httpRequests header list. // httpRequests header list.
if (!httpRequest.headersList.contains('user-agent')) { if (!httpRequest.headersList.contains('user-agent')) {
httpRequest.headersList.append('user-agent', 'undici') httpRequest.headersList.append('user-agent', typeof esbuildDetection === 'undefined' ? 'undici' : 'node')
} }
// 15. If httpRequests cache mode is "default" and httpRequests header // 15. If httpRequests cache mode is "default" and httpRequests header
@ -66320,6 +66349,8 @@ async function httpNetworkOrCacheFetch (
} }
} }
httpRequest.headersList.delete('host')
// 20. If includeCredentials is true, then: // 20. If includeCredentials is true, then:
if (includeCredentials) { if (includeCredentials) {
// 1. If the user agent is not configured to block cookies for httpRequest // 1. If the user agent is not configured to block cookies for httpRequest

203
dist/setup/index.js vendored
View File

@ -64350,6 +64350,10 @@ class StreamHandler extends AsyncResource {
{ callback, body: res, contentType, statusCode, statusMessage, headers } { callback, body: res, contentType, statusCode, statusMessage, headers }
) )
} else { } else {
if (factory === null) {
return
}
res = this.runInAsyncScope(factory, null, { res = this.runInAsyncScope(factory, null, {
statusCode, statusCode,
headers, headers,
@ -64398,7 +64402,7 @@ class StreamHandler extends AsyncResource {
onData (chunk) { onData (chunk) {
const { res } = this const { res } = this
return res.write(chunk) return res ? res.write(chunk) : true
} }
onComplete (trailers) { onComplete (trailers) {
@ -64406,6 +64410,10 @@ class StreamHandler extends AsyncResource {
removeSignal(this) removeSignal(this)
if (!res) {
return
}
this.trailers = util.parseHeaders(trailers) this.trailers = util.parseHeaders(trailers)
res.end() res.end()
@ -64862,7 +64870,7 @@ function consumeEnd (consume) {
pos += buf.byteLength pos += buf.byteLength
} }
resolve(dst) resolve(dst.buffer)
} else if (type === 'blob') { } else if (type === 'blob') {
if (!Blob) { if (!Blob) {
Blob = (__nccwpck_require__(4300).Blob) Blob = (__nccwpck_require__(4300).Blob)
@ -66234,6 +66242,7 @@ module.exports = {
const assert = __nccwpck_require__(9491) const assert = __nccwpck_require__(9491)
const net = __nccwpck_require__(1808) const net = __nccwpck_require__(1808)
const http = __nccwpck_require__(3685)
const { pipeline } = __nccwpck_require__(2781) const { pipeline } = __nccwpck_require__(2781)
const util = __nccwpck_require__(3983) const util = __nccwpck_require__(3983)
const timers = __nccwpck_require__(9459) const timers = __nccwpck_require__(9459)
@ -66321,6 +66330,7 @@ const {
HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_AUTHORITY,
HTTP2_HEADER_METHOD, HTTP2_HEADER_METHOD,
HTTP2_HEADER_PATH, HTTP2_HEADER_PATH,
HTTP2_HEADER_SCHEME,
HTTP2_HEADER_CONTENT_LENGTH, HTTP2_HEADER_CONTENT_LENGTH,
HTTP2_HEADER_EXPECT, HTTP2_HEADER_EXPECT,
HTTP2_HEADER_STATUS HTTP2_HEADER_STATUS
@ -66497,7 +66507,7 @@ class Client extends DispatcherBase {
this[kConnector] = connect this[kConnector] = connect
this[kSocket] = null this[kSocket] = null
this[kPipelining] = pipelining != null ? pipelining : 1 this[kPipelining] = pipelining != null ? pipelining : 1
this[kMaxHeadersSize] = maxHeaderSize || 16384 this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize
this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout
this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout
this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1e3 : keepAliveTimeoutThreshold this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1e3 : keepAliveTimeoutThreshold
@ -67296,7 +67306,9 @@ function onParserTimeout (parser) {
function onSocketReadable () { function onSocketReadable () {
const { [kParser]: parser } = this const { [kParser]: parser } = this
parser.readMore() if (parser) {
parser.readMore()
}
} }
function onSocketError (err) { function onSocketError (err) {
@ -67917,7 +67929,7 @@ function writeH2 (client, session, request) {
const h2State = client[kHTTP2SessionState] const h2State = client[kHTTP2SessionState]
headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost] headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost]
headers[HTTP2_HEADER_PATH] = path headers[HTTP2_HEADER_METHOD] = method
if (method === 'CONNECT') { if (method === 'CONNECT') {
session.ref() session.ref()
@ -67944,10 +67956,14 @@ function writeH2 (client, session, request) {
}) })
return true return true
} else {
headers[HTTP2_HEADER_METHOD] = method
} }
// https://tools.ietf.org/html/rfc7540#section-8.3
// :path and :scheme headers must be omited when sending CONNECT
headers[HTTP2_HEADER_PATH] = path
headers[HTTP2_HEADER_SCHEME] = 'https'
// https://tools.ietf.org/html/rfc7231#section-4.3.1 // https://tools.ietf.org/html/rfc7231#section-4.3.1
// https://tools.ietf.org/html/rfc7231#section-4.3.2 // https://tools.ietf.org/html/rfc7231#section-4.3.2
// https://tools.ietf.org/html/rfc7231#section-4.3.5 // https://tools.ietf.org/html/rfc7231#section-4.3.5
@ -68084,6 +68100,7 @@ function writeH2 (client, session, request) {
stream.cork() stream.cork()
stream.write(body) stream.write(body)
stream.uncork() stream.uncork()
stream.end()
request.onBodySent(body) request.onBodySent(body)
request.onRequestSent() request.onRequestSent()
} else if (util.isBlobLike(body)) { } else if (util.isBlobLike(body)) {
@ -68318,13 +68335,17 @@ async function writeIterable ({ h2stream, body, client, request, socket, content
throw socket[kError] throw socket[kError]
} }
if (!h2stream.write(chunk)) { const res = h2stream.write(chunk)
request.onBodySent(chunk)
if (!res) {
await waitForDrain() await waitForDrain()
} }
} }
} catch (err) { } catch (err) {
h2stream.destroy(err) h2stream.destroy(err)
} finally { } finally {
request.onRequestSent()
h2stream.end()
h2stream h2stream
.off('close', onDrain) .off('close', onDrain)
.off('drain', onDrain) .off('drain', onDrain)
@ -68537,11 +68558,13 @@ class CompatFinalizer {
} }
register (dispatcher, key) { register (dispatcher, key) {
dispatcher.on('disconnect', () => { if (dispatcher.on) {
if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { dispatcher.on('disconnect', () => {
this.finalizer(key) if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) {
} this.finalizer(key)
}) }
})
}
} }
} }
@ -70207,7 +70230,8 @@ function processHeader (request, key, val, skipAppend = false) {
key.toLowerCase() === 'content-type' key.toLowerCase() === 'content-type'
) { ) {
request.contentType = val request.contentType = val
request.headers += processHeaderValue(key, val) if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend)
else request.headers += processHeaderValue(key, val)
} else if ( } else if (
key.length === 17 && key.length === 17 &&
key.toLowerCase() === 'transfer-encoding' key.toLowerCase() === 'transfer-encoding'
@ -73818,7 +73842,7 @@ class Fetch extends EE {
} }
// https://fetch.spec.whatwg.org/#fetch-method // https://fetch.spec.whatwg.org/#fetch-method
async function fetch (input, init = {}) { function fetch (input, init = {}) {
webidl.argumentLengthCheck(arguments, 1, { header: 'globalThis.fetch' }) webidl.argumentLengthCheck(arguments, 1, { header: 'globalThis.fetch' })
// 1. Let p be a new promise. // 1. Let p be a new promise.
@ -73901,7 +73925,7 @@ async function fetch (input, init = {}) {
const processResponse = (response) => { const processResponse = (response) => {
// 1. If locallyAborted is true, terminate these substeps. // 1. If locallyAborted is true, terminate these substeps.
if (locallyAborted) { if (locallyAborted) {
return return Promise.resolve()
} }
// 2. If responses aborted flag is set, then: // 2. If responses aborted flag is set, then:
@ -73914,7 +73938,7 @@ async function fetch (input, init = {}) {
// deserializedError. // deserializedError.
abortFetch(p, request, responseObject, controller.serializedAbortReason) abortFetch(p, request, responseObject, controller.serializedAbortReason)
return return Promise.resolve()
} }
// 3. If response is a network error, then reject p with a TypeError // 3. If response is a network error, then reject p with a TypeError
@ -73923,7 +73947,7 @@ async function fetch (input, init = {}) {
p.reject( p.reject(
Object.assign(new TypeError('fetch failed'), { cause: response.error }) Object.assign(new TypeError('fetch failed'), { cause: response.error })
) )
return return Promise.resolve()
} }
// 4. Set responseObject to the result of creating a Response object, // 4. Set responseObject to the result of creating a Response object,
@ -74473,13 +74497,13 @@ async function mainFetch (fetchParams, recursive = false) {
// https://fetch.spec.whatwg.org/#concept-scheme-fetch // https://fetch.spec.whatwg.org/#concept-scheme-fetch
// given a fetch params fetchParams // given a fetch params fetchParams
async function schemeFetch (fetchParams) { function schemeFetch (fetchParams) {
// Note: since the connection is destroyed on redirect, which sets fetchParams to a // Note: since the connection is destroyed on redirect, which sets fetchParams to a
// cancelled state, we do not want this condition to trigger *unless* there have been // cancelled state, we do not want this condition to trigger *unless* there have been
// no redirects. See https://github.com/nodejs/undici/issues/1776 // no redirects. See https://github.com/nodejs/undici/issues/1776
// 1. If fetchParams is canceled, then return the appropriate network error for fetchParams. // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.
if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {
return makeAppropriateNetworkError(fetchParams) return Promise.resolve(makeAppropriateNetworkError(fetchParams))
} }
// 2. Let request be fetchParamss request. // 2. Let request be fetchParamss request.
@ -74495,7 +74519,7 @@ async function schemeFetch (fetchParams) {
// and body is the empty byte sequence as a body. // and body is the empty byte sequence as a body.
// Otherwise, return a network error. // Otherwise, return a network error.
return makeNetworkError('about scheme is not supported') return Promise.resolve(makeNetworkError('about scheme is not supported'))
} }
case 'blob:': { case 'blob:': {
if (!resolveObjectURL) { if (!resolveObjectURL) {
@ -74508,7 +74532,7 @@ async function schemeFetch (fetchParams) {
// https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56 // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56
// Buffer.resolveObjectURL does not ignore URL queries. // Buffer.resolveObjectURL does not ignore URL queries.
if (blobURLEntry.search.length !== 0) { if (blobURLEntry.search.length !== 0) {
return makeNetworkError('NetworkError when attempting to fetch resource.') return Promise.resolve(makeNetworkError('NetworkError when attempting to fetch resource.'))
} }
const blobURLEntryObject = resolveObjectURL(blobURLEntry.toString()) const blobURLEntryObject = resolveObjectURL(blobURLEntry.toString())
@ -74516,7 +74540,7 @@ async function schemeFetch (fetchParams) {
// 2. If requests method is not `GET`, blobURLEntry is null, or blobURLEntrys // 2. If requests method is not `GET`, blobURLEntry is null, or blobURLEntrys
// object is not a Blob object, then return a network error. // object is not a Blob object, then return a network error.
if (request.method !== 'GET' || !isBlobLike(blobURLEntryObject)) { if (request.method !== 'GET' || !isBlobLike(blobURLEntryObject)) {
return makeNetworkError('invalid method') return Promise.resolve(makeNetworkError('invalid method'))
} }
// 3. Let bodyWithType be the result of safely extracting blobURLEntrys object. // 3. Let bodyWithType be the result of safely extracting blobURLEntrys object.
@ -74543,7 +74567,7 @@ async function schemeFetch (fetchParams) {
response.body = body response.body = body
return response return Promise.resolve(response)
} }
case 'data:': { case 'data:': {
// 1. Let dataURLStruct be the result of running the // 1. Let dataURLStruct be the result of running the
@ -74554,7 +74578,7 @@ async function schemeFetch (fetchParams) {
// 2. If dataURLStruct is failure, then return a // 2. If dataURLStruct is failure, then return a
// network error. // network error.
if (dataURLStruct === 'failure') { if (dataURLStruct === 'failure') {
return makeNetworkError('failed to fetch the data URL') return Promise.resolve(makeNetworkError('failed to fetch the data URL'))
} }
// 3. Let mimeType be dataURLStructs MIME type, serialized. // 3. Let mimeType be dataURLStructs MIME type, serialized.
@ -74563,28 +74587,28 @@ async function schemeFetch (fetchParams) {
// 4. Return a response whose status message is `OK`, // 4. Return a response whose status message is `OK`,
// header list is « (`Content-Type`, mimeType) », // header list is « (`Content-Type`, mimeType) »,
// and body is dataURLStructs body as a body. // and body is dataURLStructs body as a body.
return makeResponse({ return Promise.resolve(makeResponse({
statusText: 'OK', statusText: 'OK',
headersList: [ headersList: [
['content-type', { name: 'Content-Type', value: mimeType }] ['content-type', { name: 'Content-Type', value: mimeType }]
], ],
body: safelyExtractBody(dataURLStruct.body)[0] body: safelyExtractBody(dataURLStruct.body)[0]
}) }))
} }
case 'file:': { case 'file:': {
// For now, unfortunate as it is, file URLs are left as an exercise for the reader. // For now, unfortunate as it is, file URLs are left as an exercise for the reader.
// When in doubt, return a network error. // When in doubt, return a network error.
return makeNetworkError('not implemented... yet...') return Promise.resolve(makeNetworkError('not implemented... yet...'))
} }
case 'http:': case 'http:':
case 'https:': { case 'https:': {
// Return the result of running HTTP fetch given fetchParams. // Return the result of running HTTP fetch given fetchParams.
return await httpFetch(fetchParams) return httpFetch(fetchParams)
.catch((err) => makeNetworkError(err)) .catch((err) => makeNetworkError(err))
} }
default: { default: {
return makeNetworkError('unknown scheme') return Promise.resolve(makeNetworkError('unknown scheme'))
} }
} }
} }
@ -74603,7 +74627,7 @@ function finalizeResponse (fetchParams, response) {
} }
// https://fetch.spec.whatwg.org/#fetch-finale // https://fetch.spec.whatwg.org/#fetch-finale
async function fetchFinale (fetchParams, response) { function fetchFinale (fetchParams, response) {
// 1. If response is a network error, then: // 1. If response is a network error, then:
if (response.type === 'error') { if (response.type === 'error') {
// 1. Set responses URL list to « fetchParamss requests URL list[0] ». // 1. Set responses URL list to « fetchParamss requests URL list[0] ».
@ -74687,8 +74711,9 @@ async function fetchFinale (fetchParams, response) {
} else { } else {
// 4. Otherwise, fully read responses body given processBody, processBodyError, // 4. Otherwise, fully read responses body given processBody, processBodyError,
// and fetchParamss task destination. // and fetchParamss task destination.
await fullyReadBody(response.body, processBody, processBodyError) return fullyReadBody(response.body, processBody, processBodyError)
} }
return Promise.resolve()
} }
} }
@ -74796,7 +74821,7 @@ async function httpFetch (fetchParams) {
} }
// https://fetch.spec.whatwg.org/#http-redirect-fetch // https://fetch.spec.whatwg.org/#http-redirect-fetch
async function httpRedirectFetch (fetchParams, response) { function httpRedirectFetch (fetchParams, response) {
// 1. Let request be fetchParamss request. // 1. Let request be fetchParamss request.
const request = fetchParams.request const request = fetchParams.request
@ -74822,18 +74847,18 @@ async function httpRedirectFetch (fetchParams, response) {
} }
} catch (err) { } catch (err) {
// 5. If locationURL is failure, then return a network error. // 5. If locationURL is failure, then return a network error.
return makeNetworkError(err) return Promise.resolve(makeNetworkError(err))
} }
// 6. If locationURLs scheme is not an HTTP(S) scheme, then return a network // 6. If locationURLs scheme is not an HTTP(S) scheme, then return a network
// error. // error.
if (!urlIsHttpHttpsScheme(locationURL)) { if (!urlIsHttpHttpsScheme(locationURL)) {
return makeNetworkError('URL scheme must be a HTTP(S) scheme') return Promise.resolve(makeNetworkError('URL scheme must be a HTTP(S) scheme'))
} }
// 7. If requests redirect count is 20, then return a network error. // 7. If requests redirect count is 20, then return a network error.
if (request.redirectCount === 20) { if (request.redirectCount === 20) {
return makeNetworkError('redirect count exceeded') return Promise.resolve(makeNetworkError('redirect count exceeded'))
} }
// 8. Increase requests redirect count by 1. // 8. Increase requests redirect count by 1.
@ -74847,7 +74872,7 @@ async function httpRedirectFetch (fetchParams, response) {
(locationURL.username || locationURL.password) && (locationURL.username || locationURL.password) &&
!sameOrigin(request, locationURL) !sameOrigin(request, locationURL)
) { ) {
return makeNetworkError('cross origin not allowed for request mode "cors"') return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"'))
} }
// 10. If requests response tainting is "cors" and locationURL includes // 10. If requests response tainting is "cors" and locationURL includes
@ -74856,9 +74881,9 @@ async function httpRedirectFetch (fetchParams, response) {
request.responseTainting === 'cors' && request.responseTainting === 'cors' &&
(locationURL.username || locationURL.password) (locationURL.username || locationURL.password)
) { ) {
return makeNetworkError( return Promise.resolve(makeNetworkError(
'URL cannot contain credentials for request mode "cors"' 'URL cannot contain credentials for request mode "cors"'
) ))
} }
// 11. If actualResponses status is not 303, requests body is non-null, // 11. If actualResponses status is not 303, requests body is non-null,
@ -74868,7 +74893,7 @@ async function httpRedirectFetch (fetchParams, response) {
request.body != null && request.body != null &&
request.body.source == null request.body.source == null
) { ) {
return makeNetworkError() return Promise.resolve(makeNetworkError())
} }
// 12. If one of the following is true // 12. If one of the following is true
@ -74897,6 +74922,10 @@ async function httpRedirectFetch (fetchParams, response) {
if (!sameOrigin(requestCurrentURL(request), locationURL)) { if (!sameOrigin(requestCurrentURL(request), locationURL)) {
// https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name
request.headersList.delete('authorization') request.headersList.delete('authorization')
// "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement.
request.headersList.delete('cookie')
request.headersList.delete('host')
} }
// 14. If requests body is non-null, then set requests body to the first return // 14. If requests body is non-null, then set requests body to the first return
@ -75041,7 +75070,7 @@ async function httpNetworkOrCacheFetch (
// user agents should append `User-Agent`/default `User-Agent` value to // user agents should append `User-Agent`/default `User-Agent` value to
// httpRequests header list. // httpRequests header list.
if (!httpRequest.headersList.contains('user-agent')) { if (!httpRequest.headersList.contains('user-agent')) {
httpRequest.headersList.append('user-agent', 'undici') httpRequest.headersList.append('user-agent', typeof esbuildDetection === 'undefined' ? 'undici' : 'node')
} }
// 15. If httpRequests cache mode is "default" and httpRequests header // 15. If httpRequests cache mode is "default" and httpRequests header
@ -75103,6 +75132,8 @@ async function httpNetworkOrCacheFetch (
} }
} }
httpRequest.headersList.delete('host')
// 20. If includeCredentials is true, then: // 20. If includeCredentials is true, then:
if (includeCredentials) { if (includeCredentials) {
// 1. If the user agent is not configured to block cookies for httpRequest // 1. If the user agent is not configured to block cookies for httpRequest
@ -93378,45 +93409,38 @@ class OfficialBuilds extends base_distribution_1.default {
let toolPath = this.findVersionInHostedToolCacheDirectory(); let toolPath = this.findVersionInHostedToolCacheDirectory();
if (toolPath) { if (toolPath) {
core.info(`Found in cache @ ${toolPath}`); core.info(`Found in cache @ ${toolPath}`);
this.addToolPath(toolPath);
return;
} }
else { let downloadPath = '';
let downloadPath = ''; try {
try { core.info(`Attempting to download ${this.nodeInfo.versionSpec}...`);
core.info(`Attempting to download ${this.nodeInfo.versionSpec}...`); const versionInfo = yield this.getInfoFromManifest(this.nodeInfo.versionSpec, this.nodeInfo.stable, osArch, manifest);
const versionInfo = yield this.getInfoFromManifest(this.nodeInfo.versionSpec, this.nodeInfo.stable, osArch, manifest); if (versionInfo) {
if (versionInfo) { core.info(`Acquiring ${versionInfo.resolvedVersion} - ${versionInfo.arch} from ${versionInfo.downloadUrl}`);
core.info(`Acquiring ${versionInfo.resolvedVersion} - ${versionInfo.arch} from ${versionInfo.downloadUrl}`); downloadPath = yield tc.downloadTool(versionInfo.downloadUrl, undefined, this.nodeInfo.auth);
downloadPath = yield tc.downloadTool(versionInfo.downloadUrl, undefined, this.nodeInfo.auth); if (downloadPath) {
if (downloadPath) { toolPath = yield this.extractArchive(downloadPath, versionInfo);
toolPath = yield this.extractArchive(downloadPath, versionInfo);
}
}
else {
core.info('Not found in manifest. Falling back to download directly from Node');
} }
} }
catch (err) { else {
// Rate limit? core.info('Not found in manifest. Falling back to download directly from Node');
if (err instanceof tc.HTTPError &&
(err.httpStatusCode === 403 || err.httpStatusCode === 429)) {
core.info(`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`);
}
else {
core.info(err.message);
}
core.debug((_a = err.stack) !== null && _a !== void 0 ? _a : 'No stack trace');
core.info('Falling back to download directly from Node');
} }
if (!toolPath) { }
const nodeJsVersions = yield this.getNodeJsVersions(); catch (err) {
const versions = this.filterVersions(nodeJsVersions); // Rate limit?
const evaluatedVersion = this.evaluateVersions(versions); if (err instanceof tc.HTTPError &&
if (!evaluatedVersion) { (err.httpStatusCode === 403 || err.httpStatusCode === 429)) {
throw new Error(`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`); core.info(`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`);
}
const toolName = this.getNodejsDistInfo(evaluatedVersion);
toolPath = yield this.downloadNodejs(toolName);
} }
else {
core.info(err.message);
}
core.debug((_a = err.stack) !== null && _a !== void 0 ? _a : 'empty stack');
core.info('Falling back to download directly from Node');
}
if (!toolPath) {
toolPath = yield this.downloadDirectlyFromNode();
} }
if (this.osPlat != 'win32') { if (this.osPlat != 'win32') {
toolPath = path_1.default.join(toolPath, 'bin'); toolPath = path_1.default.join(toolPath, 'bin');
@ -93424,6 +93448,35 @@ class OfficialBuilds extends base_distribution_1.default {
core.addPath(toolPath); core.addPath(toolPath);
}); });
} }
addToolPath(toolPath) {
if (this.osPlat != 'win32') {
toolPath = path_1.default.join(toolPath, 'bin');
}
core.addPath(toolPath);
}
downloadDirectlyFromNode() {
return __awaiter(this, void 0, void 0, function* () {
const nodeJsVersions = yield this.getNodeJsVersions();
const versions = this.filterVersions(nodeJsVersions);
const evaluatedVersion = this.evaluateVersions(versions);
if (!evaluatedVersion) {
throw new Error(`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`);
}
const toolName = this.getNodejsDistInfo(evaluatedVersion);
try {
const toolPath = yield this.downloadNodejs(toolName);
return toolPath;
}
catch (error) {
if (error instanceof tc.HTTPError && error.httpStatusCode === 404) {
core.warning(`Node version ${this.nodeInfo.versionSpec} for platform ${this.osPlat} and architecture ${this.nodeInfo.arch} was found but failed to download. ` +
'This usually happens when downloadable binaries are not fully updated at https://nodejs.org/. ' +
'To resolve this issue you may either fall back to the older version or try again later.');
}
throw error;
}
});
}
evaluateVersions(versions) { evaluateVersions(versions) {
let version = ''; let version = '';
if (this.isLatestSyntax(this.nodeInfo.versionSpec)) { if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {

255
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "setup-node", "name": "setup-node",
"version": "3.4.1", "version": "4.0.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "setup-node", "name": "setup-node",
"version": "3.4.1", "version": "4.0.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/cache": "^3.0.4", "@actions/cache": "^3.0.4",
@ -453,18 +453,18 @@
} }
}, },
"node_modules/@babel/compat-data": { "node_modules/@babel/compat-data": {
"version": "7.22.20", "version": "7.23.2",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz",
"integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/core": { "node_modules/@babel/core": {
"version": "7.23.0", "version": "7.23.2",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz",
"integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@ampproject/remapping": "^2.2.0", "@ampproject/remapping": "^2.2.0",
@ -472,10 +472,10 @@
"@babel/generator": "^7.23.0", "@babel/generator": "^7.23.0",
"@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-compilation-targets": "^7.22.15",
"@babel/helper-module-transforms": "^7.23.0", "@babel/helper-module-transforms": "^7.23.0",
"@babel/helpers": "^7.23.0", "@babel/helpers": "^7.23.2",
"@babel/parser": "^7.23.0", "@babel/parser": "^7.23.0",
"@babel/template": "^7.22.15", "@babel/template": "^7.22.15",
"@babel/traverse": "^7.23.0", "@babel/traverse": "^7.23.2",
"@babel/types": "^7.23.0", "@babel/types": "^7.23.0",
"convert-source-map": "^2.0.0", "convert-source-map": "^2.0.0",
"debug": "^4.1.0", "debug": "^4.1.0",
@ -666,13 +666,13 @@
} }
}, },
"node_modules/@babel/helpers": { "node_modules/@babel/helpers": {
"version": "7.23.1", "version": "7.23.2",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz",
"integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/template": "^7.22.15", "@babel/template": "^7.22.15",
"@babel/traverse": "^7.23.0", "@babel/traverse": "^7.23.2",
"@babel/types": "^7.23.0" "@babel/types": "^7.23.0"
}, },
"engines": { "engines": {
@ -968,9 +968,9 @@
} }
}, },
"node_modules/@babel/traverse": { "node_modules/@babel/traverse": {
"version": "7.23.0", "version": "7.23.2",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
"integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.22.13", "@babel/code-frame": "^7.22.13",
@ -1065,9 +1065,9 @@
} }
}, },
"node_modules/@eslint/js": { "node_modules/@eslint/js": {
"version": "8.51.0", "version": "8.52.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz",
"integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@ -1082,12 +1082,12 @@
} }
}, },
"node_modules/@humanwhocodes/config-array": { "node_modules/@humanwhocodes/config-array": {
"version": "0.11.11", "version": "0.11.13",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
"integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@humanwhocodes/object-schema": "^1.2.1", "@humanwhocodes/object-schema": "^2.0.1",
"debug": "^4.1.1", "debug": "^4.1.1",
"minimatch": "^3.0.5" "minimatch": "^3.0.5"
}, },
@ -1109,9 +1109,9 @@
} }
}, },
"node_modules/@humanwhocodes/object-schema": { "node_modules/@humanwhocodes/object-schema": {
"version": "1.2.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
"dev": true "dev": true
}, },
"node_modules/@istanbuljs/load-nyc-config": { "node_modules/@istanbuljs/load-nyc-config": {
@ -1539,9 +1539,9 @@
"dev": true "dev": true
}, },
"node_modules/@jridgewell/trace-mapping": { "node_modules/@jridgewell/trace-mapping": {
"version": "0.3.19", "version": "0.3.20",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
"integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/resolve-uri": "^3.1.0",
@ -1717,9 +1717,9 @@
} }
}, },
"node_modules/@types/babel__core": { "node_modules/@types/babel__core": {
"version": "7.20.2", "version": "7.20.3",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz",
"integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/parser": "^7.20.7", "@babel/parser": "^7.20.7",
@ -1730,18 +1730,18 @@
} }
}, },
"node_modules/@types/babel__generator": { "node_modules/@types/babel__generator": {
"version": "7.6.5", "version": "7.6.6",
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz",
"integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/types": "^7.0.0" "@babel/types": "^7.0.0"
} }
}, },
"node_modules/@types/babel__template": { "node_modules/@types/babel__template": {
"version": "7.4.2", "version": "7.4.3",
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz",
"integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/parser": "^7.1.0", "@babel/parser": "^7.1.0",
@ -1749,51 +1749,51 @@
} }
}, },
"node_modules/@types/babel__traverse": { "node_modules/@types/babel__traverse": {
"version": "7.20.2", "version": "7.20.3",
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz",
"integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/types": "^7.20.7" "@babel/types": "^7.20.7"
} }
}, },
"node_modules/@types/graceful-fs": { "node_modules/@types/graceful-fs": {
"version": "4.1.7", "version": "4.1.8",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz",
"integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/istanbul-lib-coverage": { "node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.4", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
"integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==",
"dev": true "dev": true
}, },
"node_modules/@types/istanbul-lib-report": { "node_modules/@types/istanbul-lib-report": {
"version": "3.0.1", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz",
"integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", "integrity": "sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/istanbul-lib-coverage": "*" "@types/istanbul-lib-coverage": "*"
} }
}, },
"node_modules/@types/istanbul-reports": { "node_modules/@types/istanbul-reports": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz",
"integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", "integrity": "sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/istanbul-lib-report": "*" "@types/istanbul-lib-report": "*"
} }
}, },
"node_modules/@types/jest": { "node_modules/@types/jest": {
"version": "29.5.5", "version": "29.5.6",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.6.tgz",
"integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", "integrity": "sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"expect": "^29.0.0", "expect": "^29.0.0",
@ -1801,20 +1801,23 @@
} }
}, },
"node_modules/@types/json-schema": { "node_modules/@types/json-schema": {
"version": "7.0.13", "version": "7.0.14",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz",
"integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==",
"dev": true "dev": true
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "20.8.3", "version": "20.8.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.3.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
"integrity": "sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==" "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
"dependencies": {
"undici-types": "~5.25.1"
}
}, },
"node_modules/@types/node-fetch": { "node_modules/@types/node-fetch": {
"version": "2.6.6", "version": "2.6.7",
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.6.tgz", "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==", "integrity": "sha512-lX17GZVpJ/fuCjguZ5b3TjEbSENxmEk1B2z02yoXSK9WMEWRivhdSY73wWMn6bpcCDAOh6qAdktpKHIlkDk2lg==",
"dependencies": { "dependencies": {
"@types/node": "*", "@types/node": "*",
"form-data": "^4.0.0" "form-data": "^4.0.0"
@ -1834,15 +1837,15 @@
} }
}, },
"node_modules/@types/semver": { "node_modules/@types/semver": {
"version": "7.5.3", "version": "7.5.4",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==",
"dev": true "dev": true
}, },
"node_modules/@types/stack-utils": { "node_modules/@types/stack-utils": {
"version": "2.0.1", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz",
"integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==",
"dev": true "dev": true
}, },
"node_modules/@types/tunnel": { "node_modules/@types/tunnel": {
@ -1854,18 +1857,18 @@
} }
}, },
"node_modules/@types/yargs": { "node_modules/@types/yargs": {
"version": "17.0.28", "version": "17.0.29",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.28.tgz", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz",
"integrity": "sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==", "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/yargs-parser": "*" "@types/yargs-parser": "*"
} }
}, },
"node_modules/@types/yargs-parser": { "node_modules/@types/yargs-parser": {
"version": "21.0.1", "version": "21.0.2",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz",
"integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==",
"dev": true "dev": true
}, },
"node_modules/@typescript-eslint/eslint-plugin": { "node_modules/@typescript-eslint/eslint-plugin": {
@ -2056,10 +2059,16 @@
"url": "https://opencollective.com/typescript-eslint" "url": "https://opencollective.com/typescript-eslint"
} }
}, },
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
"dev": true
},
"node_modules/@vercel/ncc": { "node_modules/@vercel/ncc": {
"version": "0.38.0", "version": "0.38.1",
"resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.0.tgz", "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.1.tgz",
"integrity": "sha512-B4YKZMm/EqMptKSFyAq4q2SlgJe+VCmEH6Y8gf/E1pTlWbsUJpuH1ymik2Ex3aYO5mCWwV1kaSYHSQOT8+4vHA==", "integrity": "sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw==",
"dev": true, "dev": true,
"bin": { "bin": {
"ncc": "dist/ncc/cli.js" "ncc": "dist/ncc/cli.js"
@ -2422,9 +2431,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001546", "version": "1.0.30001553",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001553.tgz",
"integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", "integrity": "sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2694,9 +2703,9 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.544", "version": "1.4.563",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.563.tgz",
"integrity": "sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w==", "integrity": "sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==",
"dev": true "dev": true
}, },
"node_modules/emittery": { "node_modules/emittery": {
@ -2748,18 +2757,19 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "8.51.0", "version": "8.52.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz",
"integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1", "@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.2", "@eslint/eslintrc": "^2.1.2",
"@eslint/js": "8.51.0", "@eslint/js": "8.52.0",
"@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
"@ungap/structured-clone": "^1.2.0",
"ajv": "^6.12.4", "ajv": "^6.12.4",
"chalk": "^4.0.0", "chalk": "^4.0.0",
"cross-spawn": "^7.0.2", "cross-spawn": "^7.0.2",
@ -2833,9 +2843,9 @@
} }
}, },
"node_modules/eslint-plugin-jest": { "node_modules/eslint-plugin-jest": {
"version": "27.4.2", "version": "27.4.3",
"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.4.2.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.4.3.tgz",
"integrity": "sha512-3Nfvv3wbq2+PZlRTf2oaAWXWwbdBejFRBR2O8tAO67o+P8zno+QGbcDYaAXODlreXVg+9gvWhKKmG2rgfb8GEg==", "integrity": "sha512-7S6SmmsHsgIm06BAGCAxL+ABd9/IB3MWkz2pudj6Qqor2y1qQpWPfuFU4SG9pWj4xDjF0e+D7Llh5useuSzAZw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/utils": "^5.10.0" "@typescript-eslint/utils": "^5.10.0"
@ -3271,6 +3281,15 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0" "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
} }
}, },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gensync": { "node_modules/gensync": {
"version": "1.0.0-beta.2", "version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@ -3389,15 +3408,6 @@
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true "dev": true
}, },
"node_modules/has": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
"integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
"dev": true,
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/has-flag": { "node_modules/has-flag": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@ -3407,6 +3417,18 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/hasown": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
"integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/html-escaper": { "node_modules/html-escaper": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@ -3498,12 +3520,12 @@
"dev": true "dev": true
}, },
"node_modules/is-core-module": { "node_modules/is-core-module": {
"version": "2.13.0", "version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
"integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"has": "^1.0.3" "hasown": "^2.0.0"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
@ -4914,9 +4936,9 @@
} }
}, },
"node_modules/resolve": { "node_modules/resolve": {
"version": "1.22.6", "version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
"integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"is-core-module": "^2.13.0", "is-core-module": "^2.13.0",
@ -5409,9 +5431,9 @@
} }
}, },
"node_modules/undici": { "node_modules/undici": {
"version": "5.25.4", "version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici/-/undici-5.25.4.tgz", "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz",
"integrity": "sha512-450yJxT29qKMf3aoudzFpIciqpx6Pji3hEWaXqXmanbXF58LTAGCKxcJjxMXWu3iG+Mudgo3ZUfDB6YDFd/dAw==", "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==",
"dependencies": { "dependencies": {
"@fastify/busboy": "^2.0.0" "@fastify/busboy": "^2.0.0"
}, },
@ -5419,6 +5441,11 @@
"node": ">=14.0" "node": ">=14.0"
} }
}, },
"node_modules/undici-types": {
"version": "5.25.3",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA=="
},
"node_modules/universal-user-agent": { "node_modules/universal-user-agent": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",

View File

@ -1,6 +1,6 @@
{ {
"name": "setup-node", "name": "setup-node",
"version": "3.4.1", "version": "4.0.0",
"private": true, "private": true,
"description": "setup node action", "description": "setup node action",
"main": "lib/setup-node.js", "main": "lib/setup-node.js",

View File

@ -18,6 +18,7 @@ export default class OfficialBuilds extends BaseDistribution {
let manifest: tc.IToolRelease[] | undefined; let manifest: tc.IToolRelease[] | undefined;
let nodeJsVersions: INodeVersion[] | undefined; let nodeJsVersions: INodeVersion[] | undefined;
const osArch = this.translateArchToDistUrl(this.nodeInfo.arch); const osArch = this.translateArchToDistUrl(this.nodeInfo.arch);
if (this.isLtsAlias(this.nodeInfo.versionSpec)) { if (this.isLtsAlias(this.nodeInfo.versionSpec)) {
core.info('Attempt to resolve LTS alias from manifest...'); core.info('Attempt to resolve LTS alias from manifest...');
@ -61,63 +62,57 @@ export default class OfficialBuilds extends BaseDistribution {
if (toolPath) { if (toolPath) {
core.info(`Found in cache @ ${toolPath}`); core.info(`Found in cache @ ${toolPath}`);
} else { this.addToolPath(toolPath);
let downloadPath = ''; return;
try { }
core.info(`Attempting to download ${this.nodeInfo.versionSpec}...`);
const versionInfo = await this.getInfoFromManifest( let downloadPath = '';
this.nodeInfo.versionSpec, try {
this.nodeInfo.stable, core.info(`Attempting to download ${this.nodeInfo.versionSpec}...`);
osArch,
manifest const versionInfo = await this.getInfoFromManifest(
this.nodeInfo.versionSpec,
this.nodeInfo.stable,
osArch,
manifest
);
if (versionInfo) {
core.info(
`Acquiring ${versionInfo.resolvedVersion} - ${versionInfo.arch} from ${versionInfo.downloadUrl}`
);
downloadPath = await tc.downloadTool(
versionInfo.downloadUrl,
undefined,
this.nodeInfo.auth
); );
if (versionInfo) {
core.info(
`Acquiring ${versionInfo.resolvedVersion} - ${versionInfo.arch} from ${versionInfo.downloadUrl}`
);
downloadPath = await tc.downloadTool(
versionInfo.downloadUrl,
undefined,
this.nodeInfo.auth
);
if (downloadPath) { if (downloadPath) {
toolPath = await this.extractArchive(downloadPath, versionInfo); toolPath = await this.extractArchive(downloadPath, versionInfo);
}
} else {
core.info(
'Not found in manifest. Falling back to download directly from Node'
);
} }
} catch (err) { } else {
// Rate limit? core.info(
if ( 'Not found in manifest. Falling back to download directly from Node'
err instanceof tc.HTTPError && );
(err.httpStatusCode === 403 || err.httpStatusCode === 429)
) {
core.info(
`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`
);
} else {
core.info((err as Error).message);
}
core.debug((err as Error).stack ?? 'No stack trace');
core.info('Falling back to download directly from Node');
} }
} catch (err) {
// Rate limit?
if (
err instanceof tc.HTTPError &&
(err.httpStatusCode === 403 || err.httpStatusCode === 429)
) {
core.info(
`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`
);
} else {
core.info((err as Error).message);
}
core.debug((err as Error).stack ?? 'empty stack');
core.info('Falling back to download directly from Node');
}
if (!toolPath) { if (!toolPath) {
const nodeJsVersions = await this.getNodeJsVersions(); toolPath = await this.downloadDirectlyFromNode();
const versions = this.filterVersions(nodeJsVersions);
const evaluatedVersion = this.evaluateVersions(versions);
if (!evaluatedVersion) {
throw new Error(
`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`
);
}
const toolName = this.getNodejsDistInfo(evaluatedVersion);
toolPath = await this.downloadNodejs(toolName);
}
} }
if (this.osPlat != 'win32') { if (this.osPlat != 'win32') {
@ -127,6 +122,43 @@ export default class OfficialBuilds extends BaseDistribution {
core.addPath(toolPath); core.addPath(toolPath);
} }
protected addToolPath(toolPath: string) {
if (this.osPlat != 'win32') {
toolPath = path.join(toolPath, 'bin');
}
core.addPath(toolPath);
}
protected async downloadDirectlyFromNode() {
const nodeJsVersions = await this.getNodeJsVersions();
const versions = this.filterVersions(nodeJsVersions);
const evaluatedVersion = this.evaluateVersions(versions);
if (!evaluatedVersion) {
throw new Error(
`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`
);
}
const toolName = this.getNodejsDistInfo(evaluatedVersion);
try {
const toolPath = await this.downloadNodejs(toolName);
return toolPath;
} catch (error) {
if (error instanceof tc.HTTPError && error.httpStatusCode === 404) {
core.warning(
`Node version ${this.nodeInfo.versionSpec} for platform ${this.osPlat} and architecture ${this.nodeInfo.arch} was found but failed to download. ` +
'This usually happens when downloadable binaries are not fully updated at https://nodejs.org/. ' +
'To resolve this issue you may either fall back to the older version or try again later.'
);
}
throw error;
}
}
protected evaluateVersions(versions: string[]): string { protected evaluateVersions(versions: string[]): string {
let version = ''; let version = '';