diff options
| -rw-r--r-- | .travis.yml | 53 | ||||
| -rw-r--r-- | Cargo.toml | 13 | ||||
| -rw-r--r-- | ci/install.sh | 58 | ||||
| -rw-r--r-- | ci/script.sh | 32 | ||||
| -rw-r--r-- | tests/tests.rs | 4 | 
5 files changed, 158 insertions, 2 deletions
| diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..dc08c1d --- /dev/null +++ b/.travis.yml @@ -0,0 +1,53 @@ +language: rust + +env: +    global: +        - PROJECT_NAME=podcast +        - RUST_BACKTRACE: full + +matrix: +    include: +    - os: linux +      rust: nightly +      env: TARGET=i686-unknown-linux-musl +    - os: linux +      rust: nightly +      env: TARGET=x86_64-unknown-linux-musl +    - os: osx +      rust: nightly +      env: TARGET=x86_64-apple-darwin +    # Beta channel. +    - os: linux +      rust: beta +      env: TARGET=x86_64-unknown-linux-musl +    - os: linux +      rust: beta +      env: TARGET=x86_64-unknown-linux-gnu +    # Minimum Rust supported channel. +    - os: linux +      rust: 1.17.0 +      env: TARGET=x86_64-unknown-linux-gnu +    - os: linux +      rust: 1.17.0 +      env: TARGET=x86_64-unknown-linux-musl + +before_install: +  - export PATH="$PATH:$HOME/.cargo/bin" + +install: +  - bash ci/install.sh + +script: +  - bash ci/script.sh + +branches: +  only: +    # Pushes and PR to the master branch +    - master +    # IMPORTANT Ruby regex to match tags. Required, or travis won't trigger deploys when a new tag +    # is pushed. This regex matches semantic versions like v1.2.3-rc4+2016.02.22 +    - /^\d+\.\d+\.\d+.*$/ + +notifications: +  email: +on_success: never @@ -1,12 +1,21 @@  [package]  name = "podcast"  version = "0.4.5" -authors = ["njaremko <njaremko@gmail.com>"] -description = "A command line podcast player" +authors = ["Nathan Jaremko <njaremko@gmail.com>"] +description = "A command line podcast manager"  license = "GPL-3.0"  readme = "README.md"  keywords = ["audio", "cli", "podcast", "music"]  repository = "https://github.com/njaremko/podcast" +categories = ["command-line-utilities"] + +[badges] +travis-ci = { repository = "njaremko/podcast" } + +[[bin]] +bench = false +path = "src/main.rs" +name = "podcast"  [dependencies]  chrono = { version = "0.4", features = ["serde"] } diff --git a/ci/install.sh b/ci/install.sh new file mode 100644 index 0000000..e3f904a --- /dev/null +++ b/ci/install.sh @@ -0,0 +1,58 @@ +# `install` phase: install stuff needed for the `script` phase + +set -ex + +. $(dirname $0)/utils.sh + +install_c_toolchain() { +    case $TARGET in +        aarch64-unknown-linux-gnu) +            sudo apt-get install -y --no-install-recommends \ +                 gcc-aarch64-linux-gnu libc6-arm64-cross libc6-dev-arm64-cross +            ;; +        *) +            # For other targets, this is handled by addons.apt.packages in .travis.yml +            ;; +    esac +} + +install_rustup() { +    curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain=$TRAVIS_RUST_VERSION + +    rustc -V +    cargo -V +} + +install_standard_crates() { +    if [ $(host) != "$TARGET" ]; then +        rustup target add $TARGET +    fi +} + +configure_cargo() { +    local prefix=$(gcc_prefix) + +    if [ ! -z $prefix ]; then +        # information about the cross compiler +        ${prefix}gcc -v + +        # tell cargo which linker to use for cross compilation +        mkdir -p .cargo +        cat >>.cargo/config <<EOF +[target.$TARGET] +linker = "${prefix}gcc" +EOF +    fi +} + +main() { +    install_c_toolchain +    install_rustup +    install_standard_crates +    configure_cargo + +    # TODO if you need to install extra stuff add it here +} + +main + diff --git a/ci/script.sh b/ci/script.sh new file mode 100644 index 0000000..e97aa45 --- /dev/null +++ b/ci/script.sh @@ -0,0 +1,32 @@ +# `script` phase: you usually build, test and generate docs in this phase + +set -ex + +. $(dirname $0)/utils.sh + +# NOTE Workaround for rust-lang/rust#31907 - disable doc tests when cross compiling +# This has been fixed in the nightly channel but it would take a while to reach the other channels +disable_cross_doctests() { +    if [ $(host) != "$TARGET" ] && [ "$TRAVIS_RUST_VERSION" = "stable" ]; then +        if [ "$TRAVIS_OS_NAME" = "osx" ]; then +            brew install gnu-sed --default-names +        fi +        find src -name '*.rs' -type f | xargs sed -i -e 's:\(//.\s*```\):\1 ignore,:g' +    fi +} + +run_test_suite() { +    cargo clean --target $TARGET --verbose +    cargo build --target $TARGET --verbose +    cargo test --target $TARGET --verbose + +    # sanity check the file type +    file target/$TARGET/debug/podcast +} + +main() { +    # disable_cross_doctests +    run_test_suite +} + +main diff --git a/tests/tests.rs b/tests/tests.rs new file mode 100644 index 0000000..094ed44 --- /dev/null +++ b/tests/tests.rs @@ -0,0 +1,4 @@ +#[test] +fn test1() { +    assert_eq!(5, 5) +} | 
