aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Jaremko2017-12-15 16:17:15 -0500
committerNathan Jaremko2017-12-15 16:17:15 -0500
commit2ab28a6dada467d2462ac249425fa2abf8b6c114 (patch)
tree156a0f82b541a9c8a73c3518f730c2fd3b040741
parentc0b38deda139c64c9ad0dab6e10efcee2d3ef333 (diff)
downloadpodcast-2ab28a6dada467d2462ac249425fa2abf8b6c114.tar.bz2
Lets start adding tests
-rw-r--r--.travis.yml53
-rw-r--r--Cargo.toml13
-rw-r--r--ci/install.sh58
-rw-r--r--ci/script.sh32
-rw-r--r--tests/tests.rs4
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
diff --git a/Cargo.toml b/Cargo.toml
index 35a2dca..d181d05 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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)
+}