首页 文章

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

提问于
浏览
1

我正在尝试使Travis CI构建并测试我的GitHub存储库的内容,该存储库与Rust 0.12.0和较旧的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)

我在.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-每晚(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 回答

  • 1

    我同意夜间跟踪可能是最好的选择 . 如果您依赖的依赖关系没有被更新,那么也许这表明他们不会在1.0时间内更新!

    尽管如此,Travis确实允许您在构建之前安装东西 . 这是完全未经测试的,但您可以做类似的事情

    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 .

    如果特拉维斯有一个"bare"语言包,那将是最好的 . 否则你可以尝试使用Rust buildpack,或者其他任何东西(以避免处理多个 rustc 版本) .

相关问题