diff options
| author | Nathan Jaremko | 2017-12-15 16:17:15 -0500 |
|---|---|---|
| committer | Nathan Jaremko | 2017-12-15 16:17:15 -0500 |
| commit | 2ab28a6dada467d2462ac249425fa2abf8b6c114 (patch) | |
| tree | 156a0f82b541a9c8a73c3518f730c2fd3b040741 | |
| parent | c0b38deda139c64c9ad0dab6e10efcee2d3ef333 (diff) | |
| download | podcast-2ab28a6dada467d2462ac249425fa2abf8b6c114.tar.bz2 | |
Lets start adding tests
| -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) +} |
