mirror of
				https://github.com/actions-rs/toolchain.git
				synced 2025-10-31 03:03:53 +00:00 
			
		
		
		
	Initial version
This commit is contained in:
		
						commit
						644dd49b85
					
				
							
								
								
									
										91
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,91 @@ | ||||
| __tests__/runner/* | ||||
| 
 | ||||
| # Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore | ||||
| # Logs | ||||
| logs | ||||
| *.log | ||||
| npm-debug.log* | ||||
| yarn-debug.log* | ||||
| yarn-error.log* | ||||
| lerna-debug.log* | ||||
| 
 | ||||
| # Diagnostic reports (https://nodejs.org/api/report.html) | ||||
| report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json | ||||
| 
 | ||||
| # Runtime data | ||||
| pids | ||||
| *.pid | ||||
| *.seed | ||||
| *.pid.lock | ||||
| 
 | ||||
| # Directory for instrumented libs generated by jscoverage/JSCover | ||||
| lib-cov | ||||
| 
 | ||||
| # Coverage directory used by tools like istanbul | ||||
| coverage | ||||
| *.lcov | ||||
| 
 | ||||
| # nyc test coverage | ||||
| .nyc_output | ||||
| 
 | ||||
| # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) | ||||
| .grunt | ||||
| 
 | ||||
| # Bower dependency directory (https://bower.io/) | ||||
| bower_components | ||||
| 
 | ||||
| # node-waf configuration | ||||
| .lock-wscript | ||||
| 
 | ||||
| # Compiled binary addons (https://nodejs.org/api/addons.html) | ||||
| build/Release | ||||
| 
 | ||||
| # Dependency directories | ||||
| node_modules/ | ||||
| jspm_packages/ | ||||
| 
 | ||||
| # TypeScript v1 declaration files | ||||
| typings/ | ||||
| 
 | ||||
| # TypeScript cache | ||||
| *.tsbuildinfo | ||||
| 
 | ||||
| # Optional npm cache directory | ||||
| .npm | ||||
| 
 | ||||
| # Optional eslint cache | ||||
| .eslintcache | ||||
| 
 | ||||
| # Optional REPL history | ||||
| .node_repl_history | ||||
| 
 | ||||
| # Output of 'npm pack' | ||||
| *.tgz | ||||
| 
 | ||||
| # Yarn Integrity file | ||||
| .yarn-integrity | ||||
| 
 | ||||
| # dotenv environment variables file | ||||
| .env | ||||
| .env.test | ||||
| 
 | ||||
| # parcel-bundler cache (https://parceljs.org/) | ||||
| .cache | ||||
| 
 | ||||
| # next.js build output | ||||
| .next | ||||
| 
 | ||||
| # nuxt.js build output | ||||
| .nuxt | ||||
| 
 | ||||
| # vuepress build output | ||||
| .vuepress/dist | ||||
| 
 | ||||
| # Serverless directories | ||||
| .serverless/ | ||||
| 
 | ||||
| # FuseBox cache | ||||
| .fusebox/ | ||||
| 
 | ||||
| # DynamoDB Local files | ||||
| .dynamodb/ | ||||
							
								
								
									
										22
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| 
 | ||||
| The MIT License (MIT) | ||||
| 
 | ||||
| Copyright (c) 2019 actions-rs team and contributors | ||||
| 
 | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
| 
 | ||||
| The above copyright notice and this permission notice shall be included in | ||||
| all copies or substantial portions of the Software. | ||||
| 
 | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
| THE SOFTWARE. | ||||
							
								
								
									
										34
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| # `rustup toolchain` Action | ||||
| 
 | ||||
| This GitHub Action installs [Rust toolchain](https://github.com/rust-lang/rustup.rs#toolchain-specification). | ||||
| 
 | ||||
| Optionally it can set installed toolchain as a default and as an override for current directory. | ||||
| 
 | ||||
| ## Example workflow | ||||
| 
 | ||||
| ```yaml | ||||
| on: [push] | ||||
| 
 | ||||
| name: build | ||||
| 
 | ||||
| jobs: | ||||
|   check: | ||||
|     name: Rust project | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@master | ||||
|       - name: Install nightly | ||||
|         uses: actions-rs/toolchain@1 | ||||
|         with: | ||||
|             toolchain: nightly | ||||
|             override: true | ||||
| ``` | ||||
| 
 | ||||
| ## Inputs | ||||
| 
 | ||||
| * `toolchain`: Toolchain name, see [rustup page](https://github.com/rust-lang/rustup.rs#toolchain-specification) for details.\ | ||||
|   Examples: `stable`, `nightly`, `nightly-2019-04-20` | ||||
| * `default`: Set installed toolchain as default (executes `rustup toolchain default {TOOLCHAIN}`) | ||||
| * `override`: Set installed toolchain as an override for current directory | ||||
| 
 | ||||
| Note: `toolchain` input is required. | ||||
							
								
								
									
										22
									
								
								__tests__/args.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								__tests__/args.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| import * as args from '../src/args' | ||||
| 
 | ||||
| const testEnvVars = { | ||||
|     INPUT_TOOLCHAIN: 'nightly-2019-04-20', | ||||
|     INPUT_DEFAULT: 'false', | ||||
|     INPUT_OVERRIDE: 'true' | ||||
| } | ||||
| 
 | ||||
| describe('actions-rs/toolchain', () => { | ||||
|     beforeEach(() => { | ||||
|     for (const key in testEnvVars) | ||||
|         process.env[key] = testEnvVars[key as keyof typeof testEnvVars] | ||||
|     }) | ||||
| 
 | ||||
|     it('Parses action input into toolchain options', async () => { | ||||
|         const result = args.toolchain_args(); | ||||
| 
 | ||||
|         expect(result.name).toBe('nightly-2019-04-20'); | ||||
|         expect(result.default).toBe(false); | ||||
|         expect(result.override).toBe(true); | ||||
|     }); | ||||
| }); | ||||
							
								
								
									
										23
									
								
								action.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								action.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| name: 'rustup toolchain' | ||||
| description: 'Install the Rust toolchain' | ||||
| author: 'actions-rs team' | ||||
| branding: | ||||
|   icon: play-circle | ||||
|   color: black | ||||
| inputs: | ||||
|   toolchain: | ||||
|     description: | | ||||
|       Rust toolchain name. | ||||
| 
 | ||||
|       See https://github.com/rust-lang/rustup.rs#toolchain-specification | ||||
|     required: true | ||||
|   default: | ||||
|     description: Set installed toolchain as default | ||||
|     default: false | ||||
|   override: | ||||
|     description: Set installed toolchain as an override for a directory | ||||
|     default: false | ||||
| 
 | ||||
| runs: | ||||
|   using: 'node12' | ||||
|   main: 'dist/index.js' | ||||
							
								
								
									
										1
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										11
									
								
								jest.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								jest.config.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| module.exports = { | ||||
|   clearMocks: true, | ||||
|   moduleFileExtensions: ['js', 'ts'], | ||||
|   testEnvironment: 'node', | ||||
|   testMatch: ['**/*.test.ts'], | ||||
|   testRunner: 'jest-circus/runner', | ||||
|   transform: { | ||||
|     '^.+\\.ts$': 'ts-jest' | ||||
|   }, | ||||
|   verbose: true | ||||
| } | ||||
							
								
								
									
										4936
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										4936
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										44
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| { | ||||
|     "name": "rustup-toolchain", | ||||
|     "version": "0.1.0", | ||||
|     "private": false, | ||||
|     "description": "Install the Rust toolchain", | ||||
|     "main": "lib/main.js", | ||||
|     "directories": { | ||||
|         "lib": "lib", | ||||
|         "test": "__tests__" | ||||
|     }, | ||||
|     "scripts": { | ||||
|         "build": "ncc build src/main.ts --minify", | ||||
|         "watch": "ncc build src/main.ts --watch --minify", | ||||
|         "test": "jest" | ||||
|     }, | ||||
|     "repository": { | ||||
|         "type": "git", | ||||
|         "url": "git+https://github.com/actions-rs/toolchain.git" | ||||
|     }, | ||||
|     "keywords": [ | ||||
|         "actions", | ||||
|         "rust", | ||||
|         "rustup", | ||||
|         "toolchain" | ||||
|     ], | ||||
|     "author": "actions-rs", | ||||
|     "license": "MIT", | ||||
|     "bugs": { | ||||
|         "url": "https://github.com/actions-rs/toolchain/issues" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@actions/core": "^1.0.0", | ||||
|         "@actions/exec": "^1.0.0" | ||||
|     }, | ||||
|     "devDependencies": { | ||||
|         "@types/jest": "^24.0.13", | ||||
|         "@types/node": "^12.7.5", | ||||
|         "@zeit/ncc": "^0.20.5", | ||||
|         "jest": "^24.9.0", | ||||
|         "jest-circus": "^24.9.0", | ||||
|         "ts-jest": "^24.0.2", | ||||
|         "typescript": "^3.5.1" | ||||
|     } | ||||
| } | ||||
							
								
								
									
										41
									
								
								src/args.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/args.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| import * as core from '@actions/core'; | ||||
| 
 | ||||
| // Workaround for a GH bug: https://github.com/actions/toolkit/issues/127
 | ||||
| //
 | ||||
| // For input `all-features: true` it will generate the `INPUT_ALL-FEATURES: true`
 | ||||
| // env variable, which looks too weird.
 | ||||
| // Here we are trying to get proper name `INPUT_NO_DEFAULT_FEATURES` first,
 | ||||
| // and if it does not exist, trying the `INPUT_NO-DEFAULT-FEATURES`
 | ||||
| function getInput(name: string, options?: core.InputOptions): string { | ||||
|     const inputFullName = name.replace(/-/g, '_'); | ||||
|     let value = core.getInput(inputFullName, options); | ||||
|     if (value.length > 0) { | ||||
|         return value | ||||
|     } | ||||
| 
 | ||||
|     return core.getInput(name) | ||||
| } | ||||
| 
 | ||||
| function inputBoolean(name: string): boolean { | ||||
|     const value = getInput(name); | ||||
|     if (value == 'true' || value == '1') { | ||||
|         return true; | ||||
|     } else { | ||||
|         return false; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| export interface ToolchainOptions { | ||||
|     name: string, | ||||
|     default: boolean, | ||||
|     override: boolean | ||||
| } | ||||
| 
 | ||||
| export function toolchain_args(): ToolchainOptions { | ||||
|     return { | ||||
|         name: getInput('toolchain', {required: true}), | ||||
|         default: inputBoolean('default'), | ||||
|         override: inputBoolean('override') | ||||
|     } | ||||
| } | ||||
							
								
								
									
										27
									
								
								src/main.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/main.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| import * as core from '@actions/core'; | ||||
| import * as exec from '@actions/exec'; | ||||
| 
 | ||||
| import * as args from './args'; | ||||
| 
 | ||||
| async function do_exec(program: string, args: string[]) { | ||||
|     try { | ||||
|         await exec.exec(program, args); | ||||
|     } catch (error) { | ||||
|         core.setFailed(error.message); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| async function run() { | ||||
|     let opts = args.toolchain_args(); | ||||
|     await do_exec('rustup', ['toolchain', 'install', opts.name]); | ||||
| 
 | ||||
|     if (opts.default) { | ||||
|         await do_exec('rustup', ['default', opts.name]); | ||||
|     } | ||||
| 
 | ||||
|     if (opts.override) { | ||||
|         await do_exec('rustup', ['override', opts.name]); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| run(); | ||||
							
								
								
									
										63
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | ||||
| { | ||||
|   "compilerOptions": { | ||||
|     /* Basic Options */ | ||||
|     // "incremental": true,                   /* Enable incremental compilation */ | ||||
|     "target": "es6",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ | ||||
|     "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ | ||||
|     // "allowJs": true,                       /* Allow javascript files to be compiled. */ | ||||
|     // "checkJs": true,                       /* Report errors in .js files. */ | ||||
|     // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ | ||||
|     // "declaration": true,                   /* Generates corresponding '.d.ts' file. */ | ||||
|     // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */ | ||||
|     // "sourceMap": true,                     /* Generates corresponding '.map' file. */ | ||||
|     // "outFile": "./",                       /* Concatenate and emit output to single file. */ | ||||
|     "outDir": "./lib",                        /* Redirect output structure to the directory. */ | ||||
|     "rootDir": "./src",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ | ||||
|     // "composite": true,                     /* Enable project compilation */ | ||||
|     // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */ | ||||
|     // "removeComments": true,                /* Do not emit comments to output. */ | ||||
|     // "noEmit": true,                        /* Do not emit outputs. */ | ||||
|     // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */ | ||||
|     // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ | ||||
|     // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ | ||||
| 
 | ||||
|     /* Strict Type-Checking Options */ | ||||
|     "strict": true,                           /* Enable all strict type-checking options. */ | ||||
|     "noImplicitAny": false,                 /* Raise error on expressions and declarations with an implied 'any' type. */ | ||||
|     // "strictNullChecks": true,              /* Enable strict null checks. */ | ||||
|     // "strictFunctionTypes": true,           /* Enable strict checking of function types. */ | ||||
|     // "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ | ||||
|     // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */ | ||||
|     // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */ | ||||
|     // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */ | ||||
| 
 | ||||
|     /* Additional Checks */ | ||||
|     // "noUnusedLocals": true,                /* Report errors on unused locals. */ | ||||
|     // "noUnusedParameters": true,            /* Report errors on unused parameters. */ | ||||
|     // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */ | ||||
|     // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */ | ||||
| 
 | ||||
|     /* Module Resolution Options */ | ||||
|     // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ | ||||
|     // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */ | ||||
|     // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ | ||||
|     // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */ | ||||
|     // "typeRoots": [],                       /* List of folders to include type definitions from. */ | ||||
|     // "types": [],                           /* Type declaration files to be included in compilation. */ | ||||
|     // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ | ||||
|     "esModuleInterop": true                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ | ||||
|     // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */ | ||||
|     // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */ | ||||
| 
 | ||||
|     /* Source Map Options */ | ||||
|     // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */ | ||||
|     // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */ | ||||
|     // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */ | ||||
|     // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ | ||||
| 
 | ||||
|     /* Experimental Options */ | ||||
|     // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */ | ||||
|     // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */ | ||||
|   }, | ||||
|   "exclude": ["node_modules", "**/*.test.ts"] | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user