1
votes

I am trying to make Travis CI build and test the contents of my GitHub repository, which is compatible with Rust 0.12.0 and an older Cargo:

rustc 0.12.0 (ba4081a5a 2014-10-07 13:44:41 -0700)
cargo 0.0.1-pre-nightly (861c07f 2014-10-07 23:29:57 +0000)

I have specified Rust 0.12.0 in the .travis.yml:

language: rust
rust: 0.12.0
script:
  - cargo build --verbose
  - cargo test --verbose
  - rustdoc --test README.md -L target
  - cargo doc

The issue I seem to be hitting is that Travis will pick the latest Cargo nightly: cargo 0.0.1-pre-nightly (fd5d7a9 2014-12-25 04:28:40 +0000)

But this newer version is incompatible with Rust 0.12.0, as it is now using --emit=dep-info where it used to use --dep-info:

--dep-info [FILENAME]
                    Output dependency info to <filename> after compiling,
                    in a format suitable for use by Makefiles

This gives rustc invocation errors, as the value for is --emit is invalid:

Running `rustc src/sqlite3.rs --crate-name sqlite3 --crate-type lib -g -C metadata=1c7080eec8c6f90d -C extra-filename=-1c7080eec8c6f90d --out-dir target/deps --emit=dep-info,link -L target/deps -L target/deps -Awarnings`
...
error: unknown emission type: `dep-info`
...
Could not compile `sqlite3`.

I have been looking at other repositories for how to get around this, but it seems they either do not use Cargo with 0.12.0 (which works with Travis) or hit the same issue, like here: https://travis-ci.org/eliovir/rust-ini

I have failed to find any repository that works with Travis, rust 0.12.0 and Cargo. If I can specify the version of Cargo somewhere, I would be able to get around this, but I have failed to find a way to do so in the .travis.yml file.

Of course, with Rust 1.0 coming up, I will just wait for it, if there is no obvious solution that I have overlooked :-)

1
Is there a reason why you aren't using the nightlies? It's pretty hard at this point to not use them, I think.BurntSushi5
Mostly because I want to focus on moving the project forward instead of upgrading the code :-) I did start out using the nightlies, but I have limited time and after adding a few dependencies it took too much of it to upgrade code and find compatible versions of dependencies.Johan Brinch
Yeah, I think you're stuck between a rock and a hard place. If you have a lot of dependencies, it can be frustrating waiting for them to update. At this point, 0.12 feels ancient unfortunately. :-/BurntSushi5
Indeed. I'm going to upgrade to 1.0 alpha now. All my dependencies have upgraded already. Hopefully the friendly compiler will have helpful suggestions in this endeavour; there's definitely a lot of changes.Johan Brinch

1 Answers

1
votes

I agree that tracking nightly is probably the best bet. If there are dependencies you rely on that aren't being updated, then maybe that's a sign that they wont be updated come 1.0 time, either!

All that being said, Travis does allow you to install things before your build. This is completely untested, but you might be able to do something like

before_script:
  - wget https://static.rust-lang.org/dist/rust-0.12.0-x86_64-unknown-linux-gnu.tar.gz
  - tar -xvf rust-0.12.0-x86_64-unknown-linux-gnu.tar.gz
  - ./rust-0.12.0-x86_64-unknown-linux-gnu/install.sh --prefix /tmp/rust-0.12/
  - export PATH=$PATH:$PWD/tmp/rust-0.12/bin
  - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/tmp/rust-0.12/lib

This would download Rust 0.12, unpack and install it somewhere writable (doesn't really matter where). Then you setup env vars to point out where Rust is. Do the same to download a compatible version of Cargo.

If Travis has a "bare" language pack, that would be the best. Otherwise you could try using the Rust buildpack, or maybe just anything else (to avoid dealing with multiple rustc versions).