如何让Travis CI与Rust 0.12.0和Cargo一起使用?

时间:2015-01-02 12:04:47

标签: rust travis-ci

我正在尝试使Travis CI构建并测试我的GitHub存储库的内容,该存储库与Rust 0.12.0和旧货物兼容:

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)

我在.travis.yml中指定了Rust 0.12.0:

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

我似乎打的问题是特拉维斯将每晚挑选最新的货物:     货物0.0.1-pre-nightly(fd5d7a9 2014-12-25 04:28:40 +0000)

但是这个较新的版本与Rust 0.12.0不兼容,因为它现在使用--emit = dep-info,它曾经使用过--dep-info:

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

这给出了rustc调用错误,因为--emit的值是无效的:

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`.

我一直在寻找其他存储库以了解如何解决这个问题,但似乎他们要么不使用带有0.12.0的Cargo(适用于Travis),要么遇到同样的问题,例如:https://travis-ci.org/eliovir/rust-ini

我找不到任何与Travis,Rust 0.12.0和Cargo一起使用的存储库。如果我可以在某个地方指定Cargo的版本,我就可以解决这个问题,但是我没能找到在.travis.yml文件中这样做的方法。

当然,随着Rust 1.0的推出,如果没有我忽略的明显解决方案,我会等待它: - )

1 个答案:

答案 0 :(得分:1)

我同意每晚跟踪可能是最好的选择。如果你依赖的依赖关系没有被更新,那么也许这表明它们不会被更新到1.0时间!

所有这一切,特拉维斯确实允许你在构建之前安装东西。这是完全未经测试的,但您可能可以执行类似

的操作
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

这将下载Rust 0.12,解压缩并将其安装在可写的地方(并不重要)。然后你设置env vars来指出Rust的位置。同样下载Cargo的兼容版本。

如果Travis有一个&#34;裸露的&#34;语言包,这将是最好的。否则你可以尝试使用Rust buildpack,或者其他任何东西(以避免处理多个rustc版本)。