My travis build suffered a rust compiler crash: a dreaded ICE. That’s the cost of living on the edge. Good thing I’m a rustup user – a downgrade is in order!

My rustup interactions are usually limited to update , where the latest nightly and stdlib are downloaded and linked in to my environment. Let’s check out rustup’s help:

LP-XLANGE-OSX:~ xlange$ rustup -h rustup 0.6.5 (88ef618 2016-11-04) The Rust toolchain installer USAGE: rustup [FLAGS] [SUBCOMMAND] FLAGS: -v, --verbose Enable verbose output -h, --help Prints help information -V, --version Prints version information SUBCOMMANDS: show Show the active and installed toolchains update Update Rust toolchains default Set the default toolchain toolchain Modify or query the installed toolchains target Modify a toolchain's supported targets component Modify a toolchain's installed components override Modify directory toolchain overrides run Run a command with an environment configured for a given toolchain which Display which binary will be run for a given command doc Open the documentation for the current toolchain man View the man page for a given command self Modify the rustup installation set Alter rustup settings completions Generate completion scripts for your shell help Prints this message or the help of the given subcommand(s)

Unfortunately no top-level command screams install or even download . But digging a little further:

LP-XLANGE-OSX:~ xlange$ rustup toolchain --help rustup-toolchain Modify or query the installed toolchains USAGE: rustup toolchain [SUBCOMMAND] FLAGS: -h, --help Prints help information SUBCOMMANDS: list List installed toolchains install Install or update a given toolchain uninstall Uninstall a toolchain link Create a custom toolchain by symlinking to a directory help Prints this message or the help of the given subcommand(s) // SNIP

Aha! The elusive install keyword. The previous help continues on, describing how you specify a channel and version:

``` Many rustup commands deal with toolchains, a single installation of the Rust compiler. rustup supports multiple types of toolchains. The most basic track the official release channels: ‘stable’, ‘beta’ and ‘nightly’; but rustup can also install toolchains from the official archives, for alternate host platforms, and from local builds.

Standard release channel toolchain names have the following form:

<channel>[-<date>][-<host>] <channel> = stable|beta|nightly|<version> <date> = YYYY-MM-DD <host> = <target-triple> 'channel' is either a named release channel or an explicit version number, such as '1.8.0'. Channel names can be optionally appended with an archive date, as in 'nightly-2014-12-18', in which case the toolchain is downloaded from the archive for that date.

Cool. So today is 2016-11-16 and the nightly isn’t very good. How about I go back a few days to be safe:

$ rustup toolchain install nightly-2016-11-13 info: syncing channel updates for 'nightly-2016-11-13-x86_64-apple-darwin' error: no release found for 'nightly-2016-11-13'

Cue the music, we have a mystery. Turns out not all days contain nightlies! If any of the platform builds fails the whole nightly is called off and there is nothing to download. So how do you find a valid date?

Enter rusty dash’s nightly build result tracker. Go here, look for a green build, and use that to specify your version! The most recent green version I want is 2016-11-06 , installed like this:

LP-XLANGE-OSX:~ xlange$ rustup toolchain install nightly-2016-11-06 info: syncing channel updates for 'nightly-2016-11-06-x86_64-apple-darwin' info: downloading component 'rustc' 33.7 MiB / 33.7 MiB (100 %) 320.0 KiB/s ETA: 0 s info: downloading component 'rust-std' 43.6 MiB / 43.6 MiB (100 %) 403.2 KiB/s ETA: 0 s info: downloading component 'rust-docs' 7.7 MiB / 7.7 MiB (100 %) 630.4 KiB/s ETA: 0 s info: downloading component 'cargo' 2.5 MiB / 2.5 MiB (100 %) 671.7 KiB/s ETA: 0 s info: installing component 'rustc' info: installing component 'rust-std' info: installing component 'rust-docs' info: installing component 'cargo' nightly-2016-11-06-x86_64-apple-darwin installed - rustc 1.14.0-nightly (cae6ab1c4 2016-11-05)

Then you can set this nightly as your default:

LP-XLANGE-OSX:~ xlange$ rustup default nightly-2016-11-06 info: using existing install for 'nightly-2016-11-06-x86_64-apple-darwin' info: default toolchain set to 'nightly-2016-11-06-x86_64-apple-darwin' nightly-2016-11-06-x86_64-apple-darwin unchanged - rustc 1.14.0-nightly (cae6ab1c4 2016-11-05) LP-XLANGE-OSX:~ xlange$ rustc --version rustc 1.14.0-nightly (cae6ab1c4 2016-11-05)

And you can get your travis build working again, use the same version specifer in your travis.yml:

sudo: false # run in a docker container language: rust rust: # - stable # - beta - nightly-2016-11-06

There ya go, next time you hit issues with a nightly you can figure out how to downgrade and get on with it!