mirror of
				https://kkgithub.com/actions/setup-node.git
				synced 2025-10-31 02:11:50 +08:00 
			
		
		
		
	Compare commits
	
		
			18 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4bb8c45053 | |||
| a251a519bf | |||
| 44c9c18728 | |||
| e715d9a456 | |||
| b1f2e78536 | |||
| 55897e37f3 | |||
| 46903d1fb1 | |||
| 28505ad4d3 | |||
| 2d53d29868 | |||
| 1e163ded31 | |||
| ffde538781 | |||
| 339aa41a8d | |||
| 641e88986e | |||
| e99a7e62b2 | |||
| 0dc69b3a71 | |||
| 52eb8a7524 | |||
| 83c9f7a7df | |||
| ada4b782b3 | 
							
								
								
									
										22
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							| @ -28,7 +28,13 @@ jobs: | |||||||
|         run: __tests__/verify-no-unstaged-changes.sh |         run: __tests__/verify-no-unstaged-changes.sh | ||||||
|  |  | ||||||
|   test: |   test: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ${{ matrix.operating-system }} | ||||||
|  |     strategy: | ||||||
|  |       matrix: | ||||||
|  |         operating-system: [ubuntu-latest, windows-latest] | ||||||
|  |     defaults: | ||||||
|  |       run: | ||||||
|  |         shell: bash | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@v2 |       - uses: actions/checkout@v2 | ||||||
|       - name: Clear tool cache |       - name: Clear tool cache | ||||||
| @ -40,6 +46,20 @@ jobs: | |||||||
|       - name: Verify node and npm |       - name: Verify node and npm | ||||||
|         run: __tests__/verify-node.sh 10 |         run: __tests__/verify-node.sh 10 | ||||||
|  |  | ||||||
|  |   test-fallback: | ||||||
|  |     runs-on: windows-latest | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v2 | ||||||
|  |       - name: Clear tool cache | ||||||
|  |         run: mv "${{ runner.tool_cache }}" "${{ runner.tool_cache }}.old" | ||||||
|  |       - name: Setup node 0.12.18 # For non LTS versions of Node, the zip is not always available | ||||||
|  |         uses: ./                 # and falls back to downloading node.exe and node.lib | ||||||
|  |         with: | ||||||
|  |           node-version: 0.12.18 | ||||||
|  |       - name: Verify node | ||||||
|  |         shell: bash | ||||||
|  |         run: __tests__/verify-node.sh 0.12.18 SKIP_NPM | ||||||
|  |  | ||||||
|   test-proxy: |   test-proxy: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     container: |     container: | ||||||
|  | |||||||
							
								
								
									
										76
									
								
								CONDUCT
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								CONDUCT
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | |||||||
|  | # Contributor Covenant Code of Conduct | ||||||
|  |  | ||||||
|  | ## Our Pledge | ||||||
|  |  | ||||||
|  | In the interest of fostering an open and welcoming environment, we as | ||||||
|  | contributors and maintainers pledge to make participation in our project and | ||||||
|  | our community a harassment-free experience for everyone, regardless of age, body | ||||||
|  | size, disability, ethnicity, sex characteristics, gender identity and expression, | ||||||
|  | level of experience, education, socio-economic status, nationality, personal | ||||||
|  | appearance, race, religion, or sexual identity and orientation. | ||||||
|  |  | ||||||
|  | ## Our Standards | ||||||
|  |  | ||||||
|  | Examples of behavior that contributes to creating a positive environment | ||||||
|  | include: | ||||||
|  |  | ||||||
|  | * Using welcoming and inclusive language | ||||||
|  | * Being respectful of differing viewpoints and experiences | ||||||
|  | * Gracefully accepting constructive criticism | ||||||
|  | * Focusing on what is best for the community | ||||||
|  | * Showing empathy towards other community members | ||||||
|  |  | ||||||
|  | Examples of unacceptable behavior by participants include: | ||||||
|  |  | ||||||
|  | * The use of sexualized language or imagery and unwelcome sexual attention or | ||||||
|  |   advances | ||||||
|  | * Trolling, insulting/derogatory comments, and personal or political attacks | ||||||
|  | * Public or private harassment | ||||||
|  | * Publishing others' private information, such as a physical or electronic | ||||||
|  |   address, without explicit permission | ||||||
|  | * Other conduct which could reasonably be considered inappropriate in a | ||||||
|  |   professional setting | ||||||
|  |  | ||||||
|  | ## Our Responsibilities | ||||||
|  |  | ||||||
|  | Project maintainers are responsible for clarifying the standards of acceptable | ||||||
|  | behavior and are expected to take appropriate and fair corrective action in | ||||||
|  | response to any instances of unacceptable behavior. | ||||||
|  |  | ||||||
|  | Project maintainers have the right and responsibility to remove, edit, or | ||||||
|  | reject comments, commits, code, wiki edits, issues, and other contributions | ||||||
|  | that are not aligned to this Code of Conduct, or to ban temporarily or | ||||||
|  | permanently any contributor for other behaviors that they deem inappropriate, | ||||||
|  | threatening, offensive, or harmful. | ||||||
|  |  | ||||||
|  | ## Scope | ||||||
|  |  | ||||||
|  | This Code of Conduct applies within all project spaces, and it also applies when | ||||||
|  | an individual is representing the project or its community in public spaces. | ||||||
|  | Examples of representing a project or community include using an official | ||||||
|  | project e-mail address, posting via an official social media account, or acting | ||||||
|  | as an appointed representative at an online or offline event. Representation of | ||||||
|  | a project may be further defined and clarified by project maintainers. | ||||||
|  |  | ||||||
|  | ## Enforcement | ||||||
|  |  | ||||||
|  | Instances of abusive, harassing, or otherwise unacceptable behavior may be | ||||||
|  | reported by contacting the project team at opensource@github.com. All | ||||||
|  | complaints will be reviewed and investigated and will result in a response that | ||||||
|  | is deemed necessary and appropriate to the circumstances. The project team is | ||||||
|  | obligated to maintain confidentiality with regard to the reporter of an incident. | ||||||
|  | Further details of specific enforcement policies may be posted separately. | ||||||
|  |  | ||||||
|  | Project maintainers who do not follow or enforce the Code of Conduct in good | ||||||
|  | faith may face temporary or permanent repercussions as determined by other | ||||||
|  | members of the project's leadership. | ||||||
|  |  | ||||||
|  | ## Attribution | ||||||
|  |  | ||||||
|  | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, | ||||||
|  | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html | ||||||
|  |  | ||||||
|  | [homepage]: https://www.contributor-covenant.org | ||||||
|  |  | ||||||
|  | For answers to common questions about this code of conduct, see | ||||||
|  | https://www.contributor-covenant.org/faq | ||||||
							
								
								
									
										16
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								README.md
									
									
									
									
									
								
							| @ -1,4 +1,4 @@ | |||||||
| # setup-node | # setup-node servicing v1 | ||||||
|  |  | ||||||
| <p align="left"> | <p align="left"> | ||||||
|   <a href="https://github.com/actions/setup-node"><img alt="GitHub Actions status" src="https://github.com/actions/setup-node/workflows/Main%20workflow/badge.svg"></a> |   <a href="https://github.com/actions/setup-node"><img alt="GitHub Actions status" src="https://github.com/actions/setup-node/workflows/Main%20workflow/badge.svg"></a> | ||||||
| @ -16,7 +16,7 @@ See [action.yml](action.yml) | |||||||
| Basic: | Basic: | ||||||
| ```yaml | ```yaml | ||||||
| steps: | steps: | ||||||
| - uses: actions/checkout@v1 | - uses: actions/checkout@v2 | ||||||
| - uses: actions/setup-node@v1 | - uses: actions/setup-node@v1 | ||||||
|   with: |   with: | ||||||
|     node-version: '10.x' |     node-version: '10.x' | ||||||
| @ -34,7 +34,7 @@ jobs: | |||||||
|         node: [ '10', '8' ] |         node: [ '10', '8' ] | ||||||
|     name: Node ${{ matrix.node }} sample |     name: Node ${{ matrix.node }} sample | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@v1 |       - uses: actions/checkout@v2 | ||||||
|       - name: Setup node |       - name: Setup node | ||||||
|         uses: actions/setup-node@v1 |         uses: actions/setup-node@v1 | ||||||
|         with: |         with: | ||||||
| @ -46,7 +46,7 @@ jobs: | |||||||
| Publish to npmjs and GPR with npm: | Publish to npmjs and GPR with npm: | ||||||
| ```yaml | ```yaml | ||||||
| steps: | steps: | ||||||
| - uses: actions/checkout@v1 | - uses: actions/checkout@v2 | ||||||
| - uses: actions/setup-node@v1 | - uses: actions/setup-node@v1 | ||||||
|   with: |   with: | ||||||
|     node-version: '10.x' |     node-version: '10.x' | ||||||
| @ -66,7 +66,7 @@ steps: | |||||||
| Publish to npmjs and GPR with yarn: | Publish to npmjs and GPR with yarn: | ||||||
| ```yaml | ```yaml | ||||||
| steps: | steps: | ||||||
| - uses: actions/checkout@v1 | - uses: actions/checkout@v2 | ||||||
| - uses: actions/setup-node@v1 | - uses: actions/setup-node@v1 | ||||||
|   with: |   with: | ||||||
|     node-version: '10.x' |     node-version: '10.x' | ||||||
| @ -86,7 +86,7 @@ steps: | |||||||
| Use private packages: | Use private packages: | ||||||
| ```yaml | ```yaml | ||||||
| steps: | steps: | ||||||
| - uses: actions/checkout@v1 | - uses: actions/checkout@v2 | ||||||
| - uses: actions/setup-node@v1 | - uses: actions/setup-node@v1 | ||||||
|   with: |   with: | ||||||
|     node-version: '10.x' |     node-version: '10.x' | ||||||
| @ -108,3 +108,7 @@ The scripts and documentation in this project are released under the [MIT Licens | |||||||
| # Contributions | # Contributions | ||||||
|  |  | ||||||
| Contributions are welcome!  See [Contributor's Guide](docs/contributors.md) | Contributions are welcome!  See [Contributor's Guide](docs/contributors.md) | ||||||
|  |  | ||||||
|  | ## Code of Conduct | ||||||
|  |  | ||||||
|  | :wave: Be nice.  See [our code of conduct](CONDUCT) | ||||||
|  | |||||||
| @ -1,28 +1,27 @@ | |||||||
| import io = require('@actions/io'); | import * as io from '@actions/io'; | ||||||
| import fs = require('fs'); | import * as fs from 'fs'; | ||||||
| import path = require('path'); | import * as path from 'path'; | ||||||
|  |  | ||||||
| const tempDir = path.join( |  | ||||||
|   __dirname, |  | ||||||
|   'runner', |  | ||||||
|   path.join( |  | ||||||
|     Math.random() |  | ||||||
|       .toString(36) |  | ||||||
|       .substring(7) |  | ||||||
|   ), |  | ||||||
|   'temp' |  | ||||||
| ); |  | ||||||
|  |  | ||||||
| const rcFile = path.join(tempDir, '.npmrc'); |  | ||||||
|  |  | ||||||
| process.env['GITHUB_REPOSITORY'] = 'OwnerName/repo'; |  | ||||||
| process.env['RUNNER_TEMP'] = tempDir; |  | ||||||
| import * as auth from '../src/authutil'; | import * as auth from '../src/authutil'; | ||||||
|  |  | ||||||
|  | let rcFile: string; | ||||||
|  |  | ||||||
| describe('installer tests', () => { | describe('installer tests', () => { | ||||||
|   beforeAll(async () => { |   beforeAll(async () => { | ||||||
|  |     const tempDir = path.join( | ||||||
|  |       __dirname, | ||||||
|  |       'runner', | ||||||
|  |       path.join( | ||||||
|  |         Math.random() | ||||||
|  |           .toString(36) | ||||||
|  |           .substring(7) | ||||||
|  |       ), | ||||||
|  |       'temp' | ||||||
|  |     ); | ||||||
|     await io.rmRF(tempDir); |     await io.rmRF(tempDir); | ||||||
|     await io.mkdirP(tempDir); |     await io.mkdirP(tempDir); | ||||||
|  |     process.env['GITHUB_REPOSITORY'] = 'OwnerName/repo'; | ||||||
|  |     process.env['RUNNER_TEMP'] = tempDir; | ||||||
|  |     rcFile = path.join(tempDir, '.npmrc'); | ||||||
|   }, 100000); |   }, 100000); | ||||||
|  |  | ||||||
|   beforeEach(() => { |   beforeEach(() => { | ||||||
|  | |||||||
| @ -1,39 +1,39 @@ | |||||||
| import io = require('@actions/io'); | import * as io from '@actions/io'; | ||||||
| import fs = require('fs'); | import * as tc from '@actions/tool-cache'; | ||||||
| import os = require('os'); | import * as fs from 'fs'; | ||||||
| import path = require('path'); | import * as os from 'os'; | ||||||
|  | import * as path from 'path'; | ||||||
| const toolDir = path.join( |  | ||||||
|   __dirname, |  | ||||||
|   'runner', |  | ||||||
|   path.join( |  | ||||||
|     Math.random() |  | ||||||
|       .toString(36) |  | ||||||
|       .substring(7) |  | ||||||
|   ), |  | ||||||
|   'tools' |  | ||||||
| ); |  | ||||||
| const tempDir = path.join( |  | ||||||
|   __dirname, |  | ||||||
|   'runner', |  | ||||||
|   path.join( |  | ||||||
|     Math.random() |  | ||||||
|       .toString(36) |  | ||||||
|       .substring(7) |  | ||||||
|   ), |  | ||||||
|   'temp' |  | ||||||
| ); |  | ||||||
|  |  | ||||||
| process.env['RUNNER_TOOL_CACHE'] = toolDir; |  | ||||||
| process.env['RUNNER_TEMP'] = tempDir; |  | ||||||
| import * as installer from '../src/installer'; | import * as installer from '../src/installer'; | ||||||
|  |  | ||||||
| const IS_WINDOWS = process.platform === 'win32'; | const isWindows = process.platform === 'win32'; | ||||||
|  | let toolDir: string; | ||||||
|  |  | ||||||
| describe('installer tests', () => { | describe('installer tests', () => { | ||||||
|   beforeAll(async () => { |   beforeAll(async () => { | ||||||
|  |     toolDir = path.join( | ||||||
|  |       __dirname, | ||||||
|  |       'runner', | ||||||
|  |       path.join( | ||||||
|  |         Math.random() | ||||||
|  |           .toString(36) | ||||||
|  |           .substring(7) | ||||||
|  |       ), | ||||||
|  |       'tools' | ||||||
|  |     ); | ||||||
|  |     const tempDir = path.join( | ||||||
|  |       __dirname, | ||||||
|  |       'runner', | ||||||
|  |       path.join( | ||||||
|  |         Math.random() | ||||||
|  |           .toString(36) | ||||||
|  |           .substring(7) | ||||||
|  |       ), | ||||||
|  |       'temp' | ||||||
|  |     ); | ||||||
|     await io.rmRF(toolDir); |     await io.rmRF(toolDir); | ||||||
|     await io.rmRF(tempDir); |     await io.rmRF(tempDir); | ||||||
|  |     process.env['RUNNER_TOOL_CACHE'] = toolDir; | ||||||
|  |     process.env['RUNNER_TEMP'] = tempDir; | ||||||
|   }, 100000); |   }, 100000); | ||||||
|  |  | ||||||
|   it('Acquires version of node if no matching version is installed', async () => { |   it('Acquires version of node if no matching version is installed', async () => { | ||||||
| @ -41,14 +41,14 @@ describe('installer tests', () => { | |||||||
|     const nodeDir = path.join(toolDir, 'node', '10.16.0', os.arch()); |     const nodeDir = path.join(toolDir, 'node', '10.16.0', os.arch()); | ||||||
|  |  | ||||||
|     expect(fs.existsSync(`${nodeDir}.complete`)).toBe(true); |     expect(fs.existsSync(`${nodeDir}.complete`)).toBe(true); | ||||||
|     if (IS_WINDOWS) { |     if (isWindows) { | ||||||
|       expect(fs.existsSync(path.join(nodeDir, 'node.exe'))).toBe(true); |       expect(fs.existsSync(path.join(nodeDir, 'node.exe'))).toBe(true); | ||||||
|     } else { |     } else { | ||||||
|       expect(fs.existsSync(path.join(nodeDir, 'bin', 'node'))).toBe(true); |       expect(fs.existsSync(path.join(nodeDir, 'bin', 'node'))).toBe(true); | ||||||
|     } |     } | ||||||
|   }, 100000); |   }, 100000); | ||||||
|  |  | ||||||
|   if (IS_WINDOWS) { |   if (isWindows) { | ||||||
|     it('Falls back to backup location if first one doesnt contain correct version', async () => { |     it('Falls back to backup location if first one doesnt contain correct version', async () => { | ||||||
|       await installer.getNode('5.10.1'); |       await installer.getNode('5.10.1'); | ||||||
|       const nodeDir = path.join(toolDir, 'node', '5.10.1', os.arch()); |       const nodeDir = path.join(toolDir, 'node', '5.10.1', os.arch()); | ||||||
| @ -81,7 +81,7 @@ describe('installer tests', () => { | |||||||
|     const nodeDir = path.join(toolDir, 'node', '8.8.1', os.arch()); |     const nodeDir = path.join(toolDir, 'node', '8.8.1', os.arch()); | ||||||
|  |  | ||||||
|     expect(fs.existsSync(`${nodeDir}.complete`)).toBe(true); |     expect(fs.existsSync(`${nodeDir}.complete`)).toBe(true); | ||||||
|     if (IS_WINDOWS) { |     if (isWindows) { | ||||||
|       expect(fs.existsSync(path.join(nodeDir, 'node.exe'))).toBe(true); |       expect(fs.existsSync(path.join(nodeDir, 'node.exe'))).toBe(true); | ||||||
|     } else { |     } else { | ||||||
|       expect(fs.existsSync(path.join(nodeDir, 'bin', 'node'))).toBe(true); |       expect(fs.existsSync(path.join(nodeDir, 'bin', 'node'))).toBe(true); | ||||||
|  | |||||||
| @ -7,13 +7,17 @@ fi | |||||||
|  |  | ||||||
| node_version="$(node --version)" | node_version="$(node --version)" | ||||||
| echo "Found node version '$node_version'" | echo "Found node version '$node_version'" | ||||||
| if [ -z "$(echo $node_version | grep v$1)" ]; then | if [ -z "$(echo $node_version | grep --fixed-strings v$1)" ]; then | ||||||
|   echo "Unexpected version" |   echo "Unexpected version" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
|  |  | ||||||
| echo "Testing npm install" | if [ -z "$2" ]; then | ||||||
| mkdir -p test-npm-install |   echo "Testing npm install" | ||||||
| cd test-npm-install |   mkdir -p test-npm-install | ||||||
| npm init -y || exit 1 |   cd test-npm-install | ||||||
| npm install @actions/core || exit 1 |   npm init -y || exit 1 | ||||||
|  |   npm install @actions/core || exit 1 | ||||||
|  | else | ||||||
|  |   echo "Skip testing npm" | ||||||
|  | fi | ||||||
|  | |||||||
							
								
								
									
										276
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										276
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @ -10096,9 +10096,12 @@ const os = __importStar(__webpack_require__(87)); | |||||||
| const path = __importStar(__webpack_require__(622)); | const path = __importStar(__webpack_require__(622)); | ||||||
| const httpm = __importStar(__webpack_require__(539)); | const httpm = __importStar(__webpack_require__(539)); | ||||||
| const semver = __importStar(__webpack_require__(280)); | const semver = __importStar(__webpack_require__(280)); | ||||||
|  | const stream = __importStar(__webpack_require__(794)); | ||||||
|  | const util = __importStar(__webpack_require__(669)); | ||||||
| const v4_1 = __importDefault(__webpack_require__(826)); | const v4_1 = __importDefault(__webpack_require__(826)); | ||||||
| const exec_1 = __webpack_require__(986); | const exec_1 = __webpack_require__(986); | ||||||
| const assert_1 = __webpack_require__(357); | const assert_1 = __webpack_require__(357); | ||||||
|  | const retry_helper_1 = __webpack_require__(979); | ||||||
| class HTTPError extends Error { | class HTTPError extends Error { | ||||||
|     constructor(httpStatusCode) { |     constructor(httpStatusCode) { | ||||||
|         super(`Unexpected HTTP response: ${httpStatusCode}`); |         super(`Unexpected HTTP response: ${httpStatusCode}`); | ||||||
| @ -10109,31 +10112,6 @@ class HTTPError extends Error { | |||||||
| exports.HTTPError = HTTPError; | exports.HTTPError = HTTPError; | ||||||
| const IS_WINDOWS = process.platform === 'win32'; | const IS_WINDOWS = process.platform === 'win32'; | ||||||
| const userAgent = 'actions/tool-cache'; | const userAgent = 'actions/tool-cache'; | ||||||
| // On load grab temp directory and cache directory and remove them from env (currently don't want to expose this) |  | ||||||
| let tempDirectory = process.env['RUNNER_TEMP'] || ''; |  | ||||||
| let cacheRoot = process.env['RUNNER_TOOL_CACHE'] || ''; |  | ||||||
| // If directories not found, place them in common temp locations |  | ||||||
| if (!tempDirectory || !cacheRoot) { |  | ||||||
|     let baseLocation; |  | ||||||
|     if (IS_WINDOWS) { |  | ||||||
|         // On windows use the USERPROFILE env variable |  | ||||||
|         baseLocation = process.env['USERPROFILE'] || 'C:\\'; |  | ||||||
|     } |  | ||||||
|     else { |  | ||||||
|         if (process.platform === 'darwin') { |  | ||||||
|             baseLocation = '/Users'; |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             baseLocation = '/home'; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     if (!tempDirectory) { |  | ||||||
|         tempDirectory = path.join(baseLocation, 'actions', 'temp'); |  | ||||||
|     } |  | ||||||
|     if (!cacheRoot) { |  | ||||||
|         cacheRoot = path.join(baseLocation, 'actions', 'cache'); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| /** | /** | ||||||
|  * Download a tool from an url and stream it into a file |  * Download a tool from an url and stream it into a file | ||||||
|  * |  * | ||||||
| @ -10143,52 +10121,71 @@ if (!tempDirectory || !cacheRoot) { | |||||||
|  */ |  */ | ||||||
| function downloadTool(url, dest) { | function downloadTool(url, dest) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         // Wrap in a promise so that we can resolve from within stream callbacks |         dest = dest || path.join(_getTempDirectory(), v4_1.default()); | ||||||
|         return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { |         yield io.mkdirP(path.dirname(dest)); | ||||||
|             try { |         core.debug(`Downloading ${url}`); | ||||||
|                 const http = new httpm.HttpClient(userAgent, [], { |         core.debug(`Destination ${dest}`); | ||||||
|                     allowRetries: true, |         const maxAttempts = 3; | ||||||
|                     maxRetries: 3 |         const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10); | ||||||
|                 }); |         const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); | ||||||
|                 dest = dest || path.join(tempDirectory, v4_1.default()); |         const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); | ||||||
|                 yield io.mkdirP(path.dirname(dest)); |         return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { | ||||||
|                 core.debug(`Downloading ${url}`); |             return yield downloadToolAttempt(url, dest || ''); | ||||||
|                 core.debug(`Downloading ${dest}`); |         }), (err) => { | ||||||
|                 if (fs.existsSync(dest)) { |             if (err instanceof HTTPError && err.httpStatusCode) { | ||||||
|                     throw new Error(`Destination file path ${dest} already exists`); |                 // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests | ||||||
|  |                 if (err.httpStatusCode < 500 && | ||||||
|  |                     err.httpStatusCode !== 408 && | ||||||
|  |                     err.httpStatusCode !== 429) { | ||||||
|  |                     return false; | ||||||
|                 } |                 } | ||||||
|                 const response = yield http.get(url); |  | ||||||
|                 if (response.message.statusCode !== 200) { |  | ||||||
|                     const err = new HTTPError(response.message.statusCode); |  | ||||||
|                     core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); |  | ||||||
|                     throw err; |  | ||||||
|                 } |  | ||||||
|                 const file = fs.createWriteStream(dest); |  | ||||||
|                 file.on('open', () => __awaiter(this, void 0, void 0, function* () { |  | ||||||
|                     try { |  | ||||||
|                         const stream = response.message.pipe(file); |  | ||||||
|                         stream.on('close', () => { |  | ||||||
|                             core.debug('download complete'); |  | ||||||
|                             resolve(dest); |  | ||||||
|                         }); |  | ||||||
|                     } |  | ||||||
|                     catch (err) { |  | ||||||
|                         core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); |  | ||||||
|                         reject(err); |  | ||||||
|                     } |  | ||||||
|                 })); |  | ||||||
|                 file.on('error', err => { |  | ||||||
|                     file.end(); |  | ||||||
|                     reject(err); |  | ||||||
|                 }); |  | ||||||
|             } |             } | ||||||
|             catch (err) { |             // Otherwise retry | ||||||
|                 reject(err); |             return true; | ||||||
|             } |         }); | ||||||
|         })); |  | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.downloadTool = downloadTool; | exports.downloadTool = downloadTool; | ||||||
|  | function downloadToolAttempt(url, dest) { | ||||||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |         if (fs.existsSync(dest)) { | ||||||
|  |             throw new Error(`Destination file path ${dest} already exists`); | ||||||
|  |         } | ||||||
|  |         // Get the response headers | ||||||
|  |         const http = new httpm.HttpClient(userAgent, [], { | ||||||
|  |             allowRetries: false | ||||||
|  |         }); | ||||||
|  |         const response = yield http.get(url); | ||||||
|  |         if (response.message.statusCode !== 200) { | ||||||
|  |             const err = new HTTPError(response.message.statusCode); | ||||||
|  |             core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); | ||||||
|  |             throw err; | ||||||
|  |         } | ||||||
|  |         // Download the response body | ||||||
|  |         const pipeline = util.promisify(stream.pipeline); | ||||||
|  |         const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message); | ||||||
|  |         const readStream = responseMessageFactory(); | ||||||
|  |         let succeeded = false; | ||||||
|  |         try { | ||||||
|  |             yield pipeline(readStream, fs.createWriteStream(dest)); | ||||||
|  |             core.debug('download complete'); | ||||||
|  |             succeeded = true; | ||||||
|  |             return dest; | ||||||
|  |         } | ||||||
|  |         finally { | ||||||
|  |             // Error, delete dest before retry | ||||||
|  |             if (!succeeded) { | ||||||
|  |                 core.debug('download failed'); | ||||||
|  |                 try { | ||||||
|  |                     yield io.rmRF(dest); | ||||||
|  |                 } | ||||||
|  |                 catch (err) { | ||||||
|  |                     core.debug(`Failed to delete '${dest}'. ${err.message}`); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     }); | ||||||
|  | } | ||||||
| /** | /** | ||||||
|  * Extract a .7z file |  * Extract a .7z file | ||||||
|  * |  * | ||||||
| @ -10278,14 +10275,17 @@ function extractTar(file, dest, flags = 'xz') { | |||||||
|         // Create dest |         // Create dest | ||||||
|         dest = yield _createExtractFolder(dest); |         dest = yield _createExtractFolder(dest); | ||||||
|         // Determine whether GNU tar |         // Determine whether GNU tar | ||||||
|  |         core.debug('Checking tar --version'); | ||||||
|         let versionOutput = ''; |         let versionOutput = ''; | ||||||
|         yield exec_1.exec('tar --version', [], { |         yield exec_1.exec('tar --version', [], { | ||||||
|             ignoreReturnCode: true, |             ignoreReturnCode: true, | ||||||
|  |             silent: true, | ||||||
|             listeners: { |             listeners: { | ||||||
|                 stdout: (data) => (versionOutput += data.toString()), |                 stdout: (data) => (versionOutput += data.toString()), | ||||||
|                 stderr: (data) => (versionOutput += data.toString()) |                 stderr: (data) => (versionOutput += data.toString()) | ||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
|  |         core.debug(versionOutput.trim()); | ||||||
|         const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); |         const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); | ||||||
|         // Initialize args |         // Initialize args | ||||||
|         const args = [flags]; |         const args = [flags]; | ||||||
| @ -10446,7 +10446,7 @@ function find(toolName, versionSpec, arch) { | |||||||
|     let toolPath = ''; |     let toolPath = ''; | ||||||
|     if (versionSpec) { |     if (versionSpec) { | ||||||
|         versionSpec = semver.clean(versionSpec) || ''; |         versionSpec = semver.clean(versionSpec) || ''; | ||||||
|         const cachePath = path.join(cacheRoot, toolName, versionSpec, arch); |         const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch); | ||||||
|         core.debug(`checking cache: ${cachePath}`); |         core.debug(`checking cache: ${cachePath}`); | ||||||
|         if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { |         if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { | ||||||
|             core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); |             core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); | ||||||
| @ -10468,7 +10468,7 @@ exports.find = find; | |||||||
| function findAllVersions(toolName, arch) { | function findAllVersions(toolName, arch) { | ||||||
|     const versions = []; |     const versions = []; | ||||||
|     arch = arch || os.arch(); |     arch = arch || os.arch(); | ||||||
|     const toolPath = path.join(cacheRoot, toolName); |     const toolPath = path.join(_getCacheDirectory(), toolName); | ||||||
|     if (fs.existsSync(toolPath)) { |     if (fs.existsSync(toolPath)) { | ||||||
|         const children = fs.readdirSync(toolPath); |         const children = fs.readdirSync(toolPath); | ||||||
|         for (const child of children) { |         for (const child of children) { | ||||||
| @ -10487,7 +10487,7 @@ function _createExtractFolder(dest) { | |||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         if (!dest) { |         if (!dest) { | ||||||
|             // create a temp dir |             // create a temp dir | ||||||
|             dest = path.join(tempDirectory, v4_1.default()); |             dest = path.join(_getTempDirectory(), v4_1.default()); | ||||||
|         } |         } | ||||||
|         yield io.mkdirP(dest); |         yield io.mkdirP(dest); | ||||||
|         return dest; |         return dest; | ||||||
| @ -10495,7 +10495,7 @@ function _createExtractFolder(dest) { | |||||||
| } | } | ||||||
| function _createToolPath(tool, version, arch) { | function _createToolPath(tool, version, arch) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || ''); |         const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); | ||||||
|         core.debug(`destination ${folderPath}`); |         core.debug(`destination ${folderPath}`); | ||||||
|         const markerPath = `${folderPath}.complete`; |         const markerPath = `${folderPath}.complete`; | ||||||
|         yield io.rmRF(folderPath); |         yield io.rmRF(folderPath); | ||||||
| @ -10505,7 +10505,7 @@ function _createToolPath(tool, version, arch) { | |||||||
|     }); |     }); | ||||||
| } | } | ||||||
| function _completeToolPath(tool, version, arch) { | function _completeToolPath(tool, version, arch) { | ||||||
|     const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || ''); |     const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); | ||||||
|     const markerPath = `${folderPath}.complete`; |     const markerPath = `${folderPath}.complete`; | ||||||
|     fs.writeFileSync(markerPath, ''); |     fs.writeFileSync(markerPath, ''); | ||||||
|     core.debug('finished caching tool'); |     core.debug('finished caching tool'); | ||||||
| @ -10542,6 +10542,31 @@ function _evaluateVersions(versions, versionSpec) { | |||||||
|     } |     } | ||||||
|     return version; |     return version; | ||||||
| } | } | ||||||
|  | /** | ||||||
|  |  * Gets RUNNER_TOOL_CACHE | ||||||
|  |  */ | ||||||
|  | function _getCacheDirectory() { | ||||||
|  |     const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || ''; | ||||||
|  |     assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined'); | ||||||
|  |     return cacheDirectory; | ||||||
|  | } | ||||||
|  | /** | ||||||
|  |  * Gets RUNNER_TEMP | ||||||
|  |  */ | ||||||
|  | function _getTempDirectory() { | ||||||
|  |     const tempDirectory = process.env['RUNNER_TEMP'] || ''; | ||||||
|  |     assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); | ||||||
|  |     return tempDirectory; | ||||||
|  | } | ||||||
|  | /** | ||||||
|  |  * Gets a global variable | ||||||
|  |  */ | ||||||
|  | function _getGlobal(key, defaultValue) { | ||||||
|  |     /* eslint-disable @typescript-eslint/no-explicit-any */ | ||||||
|  |     const value = global[key]; | ||||||
|  |     /* eslint-enable @typescript-eslint/no-explicit-any */ | ||||||
|  |     return value !== undefined ? value : defaultValue; | ||||||
|  | } | ||||||
| //# sourceMappingURL=tool-cache.js.map | //# sourceMappingURL=tool-cache.js.map | ||||||
|  |  | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -12091,8 +12116,7 @@ var __importStar = (this && this.__importStar) || function (mod) { | |||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| // Load tempDirectory before it gets wiped by tool-cache | const assert = __importStar(__webpack_require__(357)); | ||||||
| let tempDirectory = process.env['RUNNER_TEMPDIRECTORY'] || ''; |  | ||||||
| const core = __importStar(__webpack_require__(470)); | const core = __importStar(__webpack_require__(470)); | ||||||
| const hc = __importStar(__webpack_require__(539)); | const hc = __importStar(__webpack_require__(539)); | ||||||
| const io = __importStar(__webpack_require__(1)); | const io = __importStar(__webpack_require__(1)); | ||||||
| @ -12102,22 +12126,6 @@ const path = __importStar(__webpack_require__(622)); | |||||||
| const semver = __importStar(__webpack_require__(280)); | const semver = __importStar(__webpack_require__(280)); | ||||||
| let osPlat = os.platform(); | let osPlat = os.platform(); | ||||||
| let osArch = translateArchToDistUrl(os.arch()); | let osArch = translateArchToDistUrl(os.arch()); | ||||||
| if (!tempDirectory) { |  | ||||||
|     let baseLocation; |  | ||||||
|     if (process.platform === 'win32') { |  | ||||||
|         // On windows use the USERPROFILE env variable |  | ||||||
|         baseLocation = process.env['USERPROFILE'] || 'C:\\'; |  | ||||||
|     } |  | ||||||
|     else { |  | ||||||
|         if (process.platform === 'darwin') { |  | ||||||
|             baseLocation = '/Users'; |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             baseLocation = '/home'; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     tempDirectory = path.join(baseLocation, 'actions', 'temp'); |  | ||||||
| } |  | ||||||
| function getNode(versionSpec) { | function getNode(versionSpec) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         // check cache |         // check cache | ||||||
| @ -12276,8 +12284,10 @@ function acquireNode(version) { | |||||||
| function acquireNodeFromFallbackLocation(version) { | function acquireNodeFromFallbackLocation(version) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         // Create temporary folder to download in to |         // Create temporary folder to download in to | ||||||
|         let tempDownloadFolder = 'temp_' + Math.floor(Math.random() * 2000000000); |         const tempDownloadFolder = 'temp_' + Math.floor(Math.random() * 2000000000); | ||||||
|         let tempDir = path.join(tempDirectory, tempDownloadFolder); |         const tempDirectory = process.env['RUNNER_TEMP'] || ''; | ||||||
|  |         assert.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); | ||||||
|  |         const tempDir = path.join(tempDirectory, tempDownloadFolder); | ||||||
|         yield io.mkdirP(tempDir); |         yield io.mkdirP(tempDir); | ||||||
|         let exeUrl; |         let exeUrl; | ||||||
|         let libUrl; |         let libUrl; | ||||||
| @ -15191,6 +15201,7 @@ var __importStar = (this && this.__importStar) || function (mod) { | |||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const core = __importStar(__webpack_require__(470)); | const core = __importStar(__webpack_require__(470)); | ||||||
|  | const exec = __importStar(__webpack_require__(986)); | ||||||
| const installer = __importStar(__webpack_require__(749)); | const installer = __importStar(__webpack_require__(749)); | ||||||
| const auth = __importStar(__webpack_require__(202)); | const auth = __importStar(__webpack_require__(202)); | ||||||
| const path = __importStar(__webpack_require__(622)); | const path = __importStar(__webpack_require__(622)); | ||||||
| @ -15208,6 +15219,12 @@ function run() { | |||||||
|             if (version) { |             if (version) { | ||||||
|                 yield installer.getNode(version); |                 yield installer.getNode(version); | ||||||
|             } |             } | ||||||
|  |             // Output version of node and npm that are being used | ||||||
|  |             yield exec.exec('node', ['--version']); | ||||||
|  |             // Older versions of Node don't include npm, so don't let this call fail | ||||||
|  |             yield exec.exec('npm', ['--version'], { | ||||||
|  |                 ignoreReturnCode: true | ||||||
|  |             }); | ||||||
|             const registryUrl = core.getInput('registry-url'); |             const registryUrl = core.getInput('registry-url'); | ||||||
|             const alwaysAuth = core.getInput('always-auth'); |             const alwaysAuth = core.getInput('always-auth'); | ||||||
|             if (registryUrl) { |             if (registryUrl) { | ||||||
| @ -15815,6 +15832,83 @@ function onceStrict (fn) { | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /***/ }), | ||||||
|  |  | ||||||
|  | /***/ 979: | ||||||
|  | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
|  |  | ||||||
|  | "use strict"; | ||||||
|  |  | ||||||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|  |     }); | ||||||
|  | }; | ||||||
|  | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|  |     if (mod && mod.__esModule) return mod; | ||||||
|  |     var result = {}; | ||||||
|  |     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||||||
|  |     result["default"] = mod; | ||||||
|  |     return result; | ||||||
|  | }; | ||||||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
|  | const core = __importStar(__webpack_require__(470)); | ||||||
|  | /** | ||||||
|  |  * Internal class for retries | ||||||
|  |  */ | ||||||
|  | class RetryHelper { | ||||||
|  |     constructor(maxAttempts, minSeconds, maxSeconds) { | ||||||
|  |         if (maxAttempts < 1) { | ||||||
|  |             throw new Error('max attempts should be greater than or equal to 1'); | ||||||
|  |         } | ||||||
|  |         this.maxAttempts = maxAttempts; | ||||||
|  |         this.minSeconds = Math.floor(minSeconds); | ||||||
|  |         this.maxSeconds = Math.floor(maxSeconds); | ||||||
|  |         if (this.minSeconds > this.maxSeconds) { | ||||||
|  |             throw new Error('min seconds should be less than or equal to max seconds'); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     execute(action, isRetryable) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             let attempt = 1; | ||||||
|  |             while (attempt < this.maxAttempts) { | ||||||
|  |                 // Try | ||||||
|  |                 try { | ||||||
|  |                     return yield action(); | ||||||
|  |                 } | ||||||
|  |                 catch (err) { | ||||||
|  |                     if (isRetryable && !isRetryable(err)) { | ||||||
|  |                         throw err; | ||||||
|  |                     } | ||||||
|  |                     core.info(err.message); | ||||||
|  |                 } | ||||||
|  |                 // Sleep | ||||||
|  |                 const seconds = this.getSleepAmount(); | ||||||
|  |                 core.info(`Waiting ${seconds} seconds before trying again`); | ||||||
|  |                 yield this.sleep(seconds); | ||||||
|  |                 attempt++; | ||||||
|  |             } | ||||||
|  |             // Last attempt | ||||||
|  |             return yield action(); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     getSleepAmount() { | ||||||
|  |         return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + | ||||||
|  |             this.minSeconds); | ||||||
|  |     } | ||||||
|  |     sleep(seconds) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return new Promise(resolve => setTimeout(resolve, seconds * 1000)); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.RetryHelper = RetryHelper; | ||||||
|  | //# sourceMappingURL=retry-helper.js.map | ||||||
|  |  | ||||||
| /***/ }), | /***/ }), | ||||||
|  |  | ||||||
| /***/ 986: | /***/ 986: | ||||||
|  | |||||||
							
								
								
									
										1278
									
								
								dist/licenses.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1278
									
								
								dist/licenses.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -40,9 +40,9 @@ | |||||||
|       "integrity": "sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==" |       "integrity": "sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==" | ||||||
|     }, |     }, | ||||||
|     "@actions/tool-cache": { |     "@actions/tool-cache": { | ||||||
|       "version": "1.3.1", |       "version": "1.3.3", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.3.1.tgz", |       "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.3.3.tgz", | ||||||
|       "integrity": "sha512-sKoEJv0/c7WzjPEq2PO12Sc8QdEp58XIBHMm3c4lUn/iZWgLz9HBeCuFGpLQjDvXJNfLZ4g+WD+rMjgOmpH4Ag==", |       "integrity": "sha512-AFVyTLcIxusDVI1gMhbZW8m/On7YNJG+xYaxorV+qic+f7lO7h37aT2mfzxqAq7mwHxtP1YlVFNrXe9QDf/bPg==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@actions/core": "^1.2.0", |         "@actions/core": "^1.2.0", | ||||||
|         "@actions/exec": "^1.0.0", |         "@actions/exec": "^1.0.0", | ||||||
| @ -738,9 +738,9 @@ | |||||||
|       }, |       }, | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "acorn": { |         "acorn": { | ||||||
|           "version": "6.1.1", |           "version": "6.4.1", | ||||||
|           "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", |           "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", | ||||||
|           "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", |           "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", | ||||||
|           "dev": true |           "dev": true | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
| @ -3484,9 +3484,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "kind-of": { |     "kind-of": { | ||||||
|       "version": "6.0.2", |       "version": "6.0.3", | ||||||
|       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", |       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", | ||||||
|       "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", |       "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "kleur": { |     "kleur": { | ||||||
|  | |||||||
| @ -24,10 +24,11 @@ | |||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/core": "^1.2.2", |     "@actions/core": "^1.2.2", | ||||||
|  |     "@actions/exec": "^1.0.3", | ||||||
|     "@actions/github": "^1.1.0", |     "@actions/github": "^1.1.0", | ||||||
|     "@actions/http-client": "^1.0.6", |     "@actions/http-client": "^1.0.6", | ||||||
|     "@actions/io": "^1.0.2", |     "@actions/io": "^1.0.2", | ||||||
|     "@actions/tool-cache": "^1.3.1", |     "@actions/tool-cache": "^1.3.3", | ||||||
|     "semver": "^6.1.1" |     "semver": "^6.1.1" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|  | |||||||
| @ -1,5 +1,3 @@ | |||||||
| // Load tempDirectory before it gets wiped by tool-cache |  | ||||||
| let tempDirectory = process.env['RUNNER_TEMPDIRECTORY'] || ''; |  | ||||||
| import * as assert from 'assert'; | import * as assert from 'assert'; | ||||||
| import * as core from '@actions/core'; | import * as core from '@actions/core'; | ||||||
| import * as hc from '@actions/http-client'; | import * as hc from '@actions/http-client'; | ||||||
| @ -12,21 +10,6 @@ import * as semver from 'semver'; | |||||||
| let osPlat: string = os.platform(); | let osPlat: string = os.platform(); | ||||||
| let osArch: string = translateArchToDistUrl(os.arch()); | let osArch: string = translateArchToDistUrl(os.arch()); | ||||||
|  |  | ||||||
| if (!tempDirectory) { |  | ||||||
|   let baseLocation; |  | ||||||
|   if (process.platform === 'win32') { |  | ||||||
|     // On windows use the USERPROFILE env variable |  | ||||||
|     baseLocation = process.env['USERPROFILE'] || 'C:\\'; |  | ||||||
|   } else { |  | ||||||
|     if (process.platform === 'darwin') { |  | ||||||
|       baseLocation = '/Users'; |  | ||||||
|     } else { |  | ||||||
|       baseLocation = '/home'; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   tempDirectory = path.join(baseLocation, 'actions', 'temp'); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // | // | ||||||
| // Node versions interface | // Node versions interface | ||||||
| // see https://nodejs.org/dist/index.json | // see https://nodejs.org/dist/index.json | ||||||
| @ -206,9 +189,11 @@ async function acquireNodeFromFallbackLocation( | |||||||
|   version: string |   version: string | ||||||
| ): Promise<string> { | ): Promise<string> { | ||||||
|   // Create temporary folder to download in to |   // Create temporary folder to download in to | ||||||
|   let tempDownloadFolder: string = |   const tempDownloadFolder: string = | ||||||
|     'temp_' + Math.floor(Math.random() * 2000000000); |     'temp_' + Math.floor(Math.random() * 2000000000); | ||||||
|   let tempDir: string = path.join(tempDirectory, tempDownloadFolder); |   const tempDirectory = process.env['RUNNER_TEMP'] || ''; | ||||||
|  |   assert.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); | ||||||
|  |   const tempDir: string = path.join(tempDirectory, tempDownloadFolder); | ||||||
|   await io.mkdirP(tempDir); |   await io.mkdirP(tempDir); | ||||||
|   let exeUrl: string; |   let exeUrl: string; | ||||||
|   let libUrl: string; |   let libUrl: string; | ||||||
|  | |||||||
| @ -1,4 +1,6 @@ | |||||||
| import * as core from '@actions/core'; | import * as core from '@actions/core'; | ||||||
|  | import * as exec from '@actions/exec'; | ||||||
|  | import * as io from '@actions/io'; | ||||||
| import * as installer from './installer'; | import * as installer from './installer'; | ||||||
| import * as auth from './authutil'; | import * as auth from './authutil'; | ||||||
| import * as path from 'path'; | import * as path from 'path'; | ||||||
| @ -17,6 +19,14 @@ async function run() { | |||||||
|       await installer.getNode(version); |       await installer.getNode(version); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // Output version of node and npm that are being used | ||||||
|  |     await exec.exec('node', ['--version']); | ||||||
|  |  | ||||||
|  |     // Older versions of Node don't include npm, so don't let this call fail | ||||||
|  |     await exec.exec('npm', ['--version'], { | ||||||
|  |       ignoreReturnCode: true | ||||||
|  |     }); | ||||||
|  |  | ||||||
|     const registryUrl: string = core.getInput('registry-url'); |     const registryUrl: string = core.getInput('registry-url'); | ||||||
|     const alwaysAuth: string = core.getInput('always-auth'); |     const alwaysAuth: string = core.getInput('always-auth'); | ||||||
|     if (registryUrl) { |     if (registryUrl) { | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	