mirror of
				https://github.com/actions/setup-node.git
				synced 2025-10-31 08:04:00 +08:00 
			
		
		
		
	Add auth and ci
This commit is contained in:
		
							
								
								
									
										21
									
								
								.github/main.workflow
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								.github/main.workflow
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | workflow "CI" { | ||||||
|  |   on = "push" | ||||||
|  |   resolves = ["Format", "Build"] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | action "Dependencies" { | ||||||
|  |   uses = "actions/npm@v2.0.0" | ||||||
|  |   args = "ci" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | action "Build" { | ||||||
|  |   needs = "Dependencies" | ||||||
|  |   uses = "actions/npm@v2.0.0" | ||||||
|  |   args = "run build" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | action "Format" { | ||||||
|  |   needs = "Dependencies" | ||||||
|  |   uses = "actions/npm@v2.0.0" | ||||||
|  |   args = "run format-check" | ||||||
|  | } | ||||||
							
								
								
									
										13
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								README.md
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ This action sets by node environment for use in actions by: | |||||||
|  |  | ||||||
| - optionally downloading and caching a version of node - npm by version spec and add to PATH | - optionally downloading and caching a version of node - npm by version spec and add to PATH | ||||||
| - TODO: registering problem matchers for error output  | - TODO: registering problem matchers for error output  | ||||||
| - TODO: configuring authentication for npm packages  | - optionally configuring authentication for npm packages  | ||||||
| - TODO: configuring proxy if the runner is configured to use a proxy (coming with private runners) | - TODO: configuring proxy if the runner is configured to use a proxy (coming with private runners) | ||||||
|  |  | ||||||
| # Usage | # Usage | ||||||
| @@ -38,6 +38,17 @@ workflow: | |||||||
|       - run: npm test |       - run: npm test | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | Auth: | ||||||
|  | ```yaml | ||||||
|  | actions: | ||||||
|  | - uses: actions/setup-node@latest | ||||||
|  |   with: | ||||||
|  |     registryUrl: 'https://mycustomregistry.example.org' | ||||||
|  |     registryToken: $ {{ token }} | ||||||
|  |     authFile: 'optional/path/to/.npmrc/file' | ||||||
|  | - run: npm publish | ||||||
|  | ``` | ||||||
|  |  | ||||||
| # License | # License | ||||||
|  |  | ||||||
| The scripts and documentation in this project are released under the [MIT License](LICENSE) | The scripts and documentation in this project are released under the [MIT License](LICENSE) | ||||||
|   | |||||||
							
								
								
									
										40
									
								
								lib/auth.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								lib/auth.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | |||||||
|  | "use strict"; | ||||||
|  | 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(require("@actions/core")); | ||||||
|  | const path = __importStar(require("path")); | ||||||
|  | const fs = __importStar(require("fs")); | ||||||
|  | const os = __importStar(require("os")); | ||||||
|  | function setNpmrc(registryUrl, registryToken, authFile) { | ||||||
|  |     let projectNpmrc = path.resolve(process.cwd(), '.npmrc'); | ||||||
|  |     if (authFile) { | ||||||
|  |         projectNpmrc = path.resolve(process.cwd(), authFile); | ||||||
|  |     } | ||||||
|  |     let newContents = ''; | ||||||
|  |     if (fs.existsSync(projectNpmrc)) { | ||||||
|  |         const curContents = fs.readFileSync(projectNpmrc, 'utf8'); | ||||||
|  |         curContents.split(os.EOL).forEach(line => { | ||||||
|  |             // Add current contents unless they are setting the registry | ||||||
|  |             if (!line.startsWith('registry')) { | ||||||
|  |                 newContents += line + os.EOL; | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     newContents += | ||||||
|  |         'registry=' + | ||||||
|  |             registryUrl + | ||||||
|  |             os.EOL + | ||||||
|  |             'always-auth=true' + | ||||||
|  |             os.EOL + | ||||||
|  |             registryUrl + | ||||||
|  |             ':_authToken=${NPM_TOKEN}'; | ||||||
|  |     fs.writeFileSync(projectNpmrc, newContents); | ||||||
|  |     core.exportSecret('NPM_TOKEN', registryToken); | ||||||
|  | } | ||||||
|  | exports.setNpmrc = setNpmrc; | ||||||
| @@ -63,8 +63,7 @@ function getNode(versionSpec) { | |||||||
|         // |         // | ||||||
|         // prepend the tools path. instructs the agent to prepend for future tasks |         // prepend the tools path. instructs the agent to prepend for future tasks | ||||||
|         // |         // | ||||||
|         // TODO - addPath not implemented yet (this should probably actually be in core) |         core.addPath(toolPath); | ||||||
|         // tc.addPath(toolPath); |  | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.getNode = getNode; | exports.getNode = getNode; | ||||||
|   | |||||||
| @@ -16,6 +16,7 @@ var __importStar = (this && this.__importStar) || function (mod) { | |||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const core = __importStar(require("@actions/core")); | const core = __importStar(require("@actions/core")); | ||||||
|  | const auth = __importStar(require("./auth")); | ||||||
| const installer = __importStar(require("./installer")); | const installer = __importStar(require("./installer")); | ||||||
| function run() { | function run() { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
| @@ -29,6 +30,12 @@ function run() { | |||||||
|                 // TODO: installer doesn't support proxy |                 // TODO: installer doesn't support proxy | ||||||
|                 yield installer.getNode(version); |                 yield installer.getNode(version); | ||||||
|             } |             } | ||||||
|  |             const registryUrl = core.getInput('registryUrl'); | ||||||
|  |             if (registryUrl) { | ||||||
|  |                 const registryToken = core.getInput('registryToken', { required: true }); | ||||||
|  |                 const authFile = core.getInput('authFile'); | ||||||
|  |                 auth.setNpmrc(registryUrl, registryToken, authFile); | ||||||
|  |             } | ||||||
|             // TODO: setup proxy from runner proxy config |             // TODO: setup proxy from runner proxy config | ||||||
|             // TODO: problem matchers registered |             // TODO: problem matchers registered | ||||||
|         } |         } | ||||||
|   | |||||||
							
								
								
									
										24
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										24
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -5,34 +5,34 @@ | |||||||
|   "requires": true, |   "requires": true, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/core": { |     "@actions/core": { | ||||||
|       "version": "file:toolkit/actions-core-0.1.0.tgz", |       "version": "file:../../../bryan/Projects/setup-node/toolkit/actions-core-0.1.0.tgz", | ||||||
|       "integrity": "sha512-1I2vFY5r80QcbM1R8Ika5Ke9uWGrF8nl33oQuP3bXVG47wMIw1DdAVK0A17CHJe5ObHU4gpwTuQakUdZaOlg0w==", |       "integrity": "sha512-1I2vFY5r80QcbM1R8Ika5Ke9uWGrF8nl33oQuP3bXVG47wMIw1DdAVK0A17CHJe5ObHU4gpwTuQakUdZaOlg0w==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@actions/exit": "file:toolkit/actions-exit-0.0.0.tgz" |         "@actions/exit": "^0.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "@actions/exec": { |     "@actions/exec": { | ||||||
|       "version": "file:toolkit/actions-exec-1.0.0.tgz", |       "version": "file:../../../bryan/Projects/setup-node/toolkit/actions-exec-1.0.0.tgz", | ||||||
|       "integrity": "sha512-AxtupsjQceVIf6nEECts5a1pDpWO4r3yq5lpTA73g1FXA0awDdTW3r9NFn8NGF6UaydkIN0BEOasQlS5qS30zg==" |       "integrity": "sha512-AxtupsjQceVIf6nEECts5a1pDpWO4r3yq5lpTA73g1FXA0awDdTW3r9NFn8NGF6UaydkIN0BEOasQlS5qS30zg==" | ||||||
|     }, |     }, | ||||||
|     "@actions/exit": { |     "@actions/exit": { | ||||||
|       "version": "file:toolkit/actions-exit-0.0.0.tgz", |       "version": "file:../../../bryan/Projects/setup-node/toolkit/actions-exit-0.0.0.tgz", | ||||||
|       "integrity": "sha512-vQdxFWM0/AERkC79mQ886SqPmV4joWhrSF7hiSTiJoKkE9eTjrKV5WQtp7SXv6OntrQkKX+ZjgdGpv+0rvJRCw==" |       "integrity": "sha512-vQdxFWM0/AERkC79mQ886SqPmV4joWhrSF7hiSTiJoKkE9eTjrKV5WQtp7SXv6OntrQkKX+ZjgdGpv+0rvJRCw==" | ||||||
|     }, |     }, | ||||||
|     "@actions/io": { |     "@actions/io": { | ||||||
|       "version": "file:toolkit/actions-io-1.0.0.tgz", |       "version": "file:../../../bryan/Projects/setup-node/toolkit/actions-io-1.0.0.tgz", | ||||||
|       "integrity": "sha512-Dox3bRCdyxoG0o1mSHt/uINbyQ2SfbhtJmmMuUQny6ARB1hU8ZUi+XR0cHUfd/SrwdzLUrxX4dV8x8ylNSBQpA==" |       "integrity": "sha512-Dox3bRCdyxoG0o1mSHt/uINbyQ2SfbhtJmmMuUQny6ARB1hU8ZUi+XR0cHUfd/SrwdzLUrxX4dV8x8ylNSBQpA==" | ||||||
|     }, |     }, | ||||||
|     "@actions/tool-cache": { |     "@actions/tool-cache": { | ||||||
|       "version": "file:toolkit/actions-tool-cache-1.0.0.tgz", |       "version": "file:../../../bryan/Projects/setup-node/toolkit/actions-tool-cache-1.0.0.tgz", | ||||||
|       "integrity": "sha512-OfhQEpxnVfuaeBL2kbD+GfpoY1pOuBEIDKZowE/R0vPsJB/pML1VezhvBDbP8D8IBZA46aeQDA3l4iOsB69Hlw==", |       "integrity": "sha512-OfhQEpxnVfuaeBL2kbD+GfpoY1pOuBEIDKZowE/R0vPsJB/pML1VezhvBDbP8D8IBZA46aeQDA3l4iOsB69Hlw==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@actions/core": "file:toolkit/actions-core-0.1.0.tgz", |         "@actions/core": "^0.1.0", | ||||||
|         "@actions/exec": "file:toolkit/actions-exec-1.0.0.tgz", |         "@actions/exec": "^1.0.0", | ||||||
|         "@actions/io": "file:toolkit/actions-io-1.0.0.tgz", |         "@actions/io": "^1.0.0", | ||||||
|         "semver": "6.1.1", |         "semver": "^6.1.0", | ||||||
|         "typed-rest-client": "1.4.0", |         "typed-rest-client": "^1.4.0", | ||||||
|         "uuid": "3.3.2" |         "uuid": "^3.3.2" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "@types/node": { |     "@types/node": { | ||||||
|   | |||||||
							
								
								
									
										37
									
								
								src/auth.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/auth.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | import * as core from '@actions/core'; | ||||||
|  | import * as path from 'path'; | ||||||
|  | import * as fs from 'fs'; | ||||||
|  | import * as os from 'os'; | ||||||
|  |  | ||||||
|  | export function setNpmrc( | ||||||
|  |   registryUrl: string, | ||||||
|  |   registryToken: string, | ||||||
|  |   authFile?: string | ||||||
|  | ) { | ||||||
|  |   let projectNpmrc: string = path.resolve(process.cwd(), '.npmrc'); | ||||||
|  |   if (authFile) { | ||||||
|  |     projectNpmrc = path.resolve(process.cwd(), authFile); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   let newContents = ''; | ||||||
|  |   if (fs.existsSync(projectNpmrc)) { | ||||||
|  |     const curContents = fs.readFileSync(projectNpmrc, 'utf8'); | ||||||
|  |     curContents.split(os.EOL).forEach(line => { | ||||||
|  |       // Add current contents unless they are setting the registry | ||||||
|  |       if (!line.startsWith('registry')) { | ||||||
|  |         newContents += line + os.EOL; | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  |   newContents += | ||||||
|  |     'registry=' + | ||||||
|  |     registryUrl + | ||||||
|  |     os.EOL + | ||||||
|  |     'always-auth=true' + | ||||||
|  |     os.EOL + | ||||||
|  |     registryUrl + | ||||||
|  |     ':_authToken=${NPM_TOKEN}'; | ||||||
|  |   fs.writeFileSync(projectNpmrc, newContents); | ||||||
|  |  | ||||||
|  |   core.exportSecret('NPM_TOKEN', registryToken); | ||||||
|  | } | ||||||
| @@ -62,8 +62,7 @@ export async function getNode(versionSpec: string) { | |||||||
|   // |   // | ||||||
|   // prepend the tools path. instructs the agent to prepend for future tasks |   // prepend the tools path. instructs the agent to prepend for future tasks | ||||||
|   // |   // | ||||||
|   // TODO - addPath not implemented yet (this should probably actually be in core) |   core.addPath(toolPath); | ||||||
|   // tc.addPath(toolPath); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| async function queryLatestMatch(versionSpec: string): Promise<string> { | async function queryLatestMatch(versionSpec: string): Promise<string> { | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| import * as core from '@actions/core'; | import * as core from '@actions/core'; | ||||||
|  | import * as auth from './auth'; | ||||||
| import * as installer from './installer'; | import * as installer from './installer'; | ||||||
|  |  | ||||||
| async function run() { | async function run() { | ||||||
| @@ -13,6 +14,13 @@ async function run() { | |||||||
|       await installer.getNode(version); |       await installer.getNode(version); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     const registryUrl = core.getInput('registryUrl'); | ||||||
|  |     if (registryUrl) { | ||||||
|  |       const registryToken = core.getInput('registryToken', {required: true}); | ||||||
|  |       const authFile = core.getInput('authFile'); | ||||||
|  |       auth.setNpmrc(registryUrl, registryToken, authFile); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // TODO: setup proxy from runner proxy config |     // TODO: setup proxy from runner proxy config | ||||||
|     // TODO: problem matchers registered |     // TODO: problem matchers registered | ||||||
|   } catch (error) { |   } catch (error) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Danny McCormick
					Danny McCormick