Release v1.0.5

This commit is contained in:
svartalf 2020-01-26 19:20:01 +03:00
parent 402d025565
commit 23cd1093e2
8 changed files with 82 additions and 17 deletions

View File

@ -17,12 +17,30 @@ jobs:
- run: npm run test
install_stable:
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
- macOS-latest
- windows-latest
steps:
- uses: actions/checkout@v1
- uses: ./
- id: toolchain
uses: ./
with:
toolchain: stable
- name: Test toolchain outputs
env:
RUSTC: ${{ steps.toolchain.outputs.rustc }}
RUSTC_HASH: ${{ steps.toolchain.outputs.rustc_hash }}
CARGO: ${{ steps.toolchain.outputs.cargo }}
RUSTUP: ${{ steps.toolchain.outputs.rustup }}
run: |
echo $RUSTC
echo $RUSTC_HASH
echo $CARGO
echo $RUSTUP
install_nightly:
runs-on: ubuntu-latest

View File

@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.0.5] - 2020-01-26
### Fixed
- `rustup` version parser does not fail Action execution on `macOS-latest` VM images anymore
## [1.0.4] - 2020-01-26
### Added

View File

@ -58,7 +58,7 @@ Installed `rustc`, `cargo` and `rustup` versions can be fetched from the Action
| Name | Description | Example |
| ------------ | --------------------- | ------------------------------- |
| `rustc` | Rustc version | `1.40.0 (73528e339 2019-12-16)` |
| `rustc-hash` | Rustc version hash | `73528e339` |
| `rustc_hash` | Rustc version hash | `73528e339` |
| `cargo` | Cargo version | `1.40.0 (bc8e4c8be 2019-11-22)` |
| `rustup` | rustup version | `1.21.1 (7832b2ebe 2019-12-20)` |

View File

@ -29,6 +29,16 @@ inputs:
description: Comma-separated list of components to be additionally installed for a new toolchain
required: false
outputs:
rustc:
description: Installed Rustc version
rustc_hash:
description: Installed Rustc version hash, can be used for caching purposes
cargo:
description: Installed Cargo version
rustup:
description: Installed rustup version
runs:
using: 'node12'
main: 'dist/index.js'

2
dist/index.js vendored

File diff suppressed because one or more lines are too long

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "rust-toolchain",
"version": "1.0.4",
"version": "1.0.5",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "rust-toolchain",
"version": "1.0.4",
"version": "1.0.5",
"private": false,
"description": "Install the Rust toolchain",
"main": "lib/main.js",

View File

@ -18,10 +18,15 @@ export async function gatherInstalledVersions(): Promise<void> {
*/
async function rustc(): Promise<void> {
const stdout = await getStdout('rustc', ['-V']);
const version = parse(stdout);
try {
const version = parseFull(stdout);
core.setOutput('rustc', version.long);
core.setOutput('rustc-hash', version.hash);
core.setOutput('rustc_hash', version.hash);
} catch(e) {
core.warning(e);
core.setOutput('rustc', parseShort(stdout));
}
}
/**
@ -29,18 +34,23 @@ async function rustc(): Promise<void> {
*/
async function cargo(): Promise<void> {
const stdout = await getStdout('cargo', ['-V']);
const version = parse(stdout);
try {
const version = parseFull(stdout);
core.setOutput('cargo', version.long);
// core.setOutput('cargo_short', version.short);
} catch(e) {
core.setOutput('cargo', parseShort(stdout));
}
}
async function rustup(): Promise<void> {
const stdout = await getStdout('rustup', ['-V']);
const version = parse(stdout);
try {
const version = parseFull(stdout);
core.setOutput('rustup', version.long);
// core.setOutput('rustup_short', version.short);
} catch(e) {
core.setOutput('rustup', parseShort(stdout));
}
}
interface Version {
@ -48,7 +58,17 @@ interface Version {
hash: string,
}
function parse(stdout: string): Version {
/**
* Try to parse the version parts and return them.
*
* It is important to note that some components are not providing
* all the expected information, ex. `rustup` on `macOS-latest` VM image
* does not has the hash in the version string,
* so this function might throw an error.
*
* As a fallback, `parseShort` function can be used.
*/
function parseFull(stdout: string): Version {
stdout = stdout.trim();
const matches = stdout.match(/\S+\s((\S+)\s\((\S+)\s(\S+)\))/m);
if (matches == null) {
@ -61,6 +81,17 @@ function parse(stdout: string): Version {
}
}
function parseShort(stdout: string): string {
stdout = stdout.trim();
const matches = stdout.match(/\S+\s(.+)/m);
if (matches == null) {
core.warning(`Unable to determine version from the "${stdout}" string`);
return '';
} else {
return matches[1];
}
}
async function getStdout(exe: string, args: string[], options?: {}): Promise<string> {
let stdout = '';
const resOptions = Object.assign({}, options, {