version: 2 jobs: test: docker: - image: puzzlewolf/rust-libical3:0.7 working_directory: /mnt/crate steps: - checkout - restore_cache: keys: - cargo-v2-{{ checksum "Cargo.toml" }}- - cargo-v2- - run: cargo update - run: cargo fetch - persist_to_workspace: root: "." paths: - Cargo.lock - save_cache: key: cargo-v2-{{ checksum "Cargo.toml" }}-{{ checksum "Cargo.lock" }} paths: - ~/.cargo/registry - ~/.cargo/git - run: name: Print version information command: rustc --version; cargo --version - run: name: Build and test command: cargo test --verbose --frozen environment: # Need this for the coverage run RUSTFLAGS: "-C link-dead-code" - run: name: Prune the output files command: | for file in target/debug/* target/debug/.??*; do [ -d $file -o ! -x $file ] && rm -r $file done - persist_to_workspace: root: "." paths: - target/debug/* coverage: docker: - image: puzzlewolf/rust-libical3-kcov:0.7 entrypoint: /bin/bash working_directory: /mnt/crate steps: - checkout - attach_workspace: at: "." - run: mkdir target/coverage - run: name: Run coverage for unit tests command: | # hack - find biggest binary in dir testsuite=$(ls --sort=size ./target/debug/khaleesi-* | head -n 1) flags=( tests integration ); for flag in ${flags[@]}; do echo "Running coverage for $flag"; sudo kcov --verify --include-path $(pwd) --exclude-pattern=tests \ target/coverage/$flag \ $testsuite --quiet ::${flag}:: # -c deletes coverage data after submission bash <(curl -s https://codecov.io/bash) -c -F $flag; done workflows: version: 2 test_all_and_coverage: jobs: - test - coverage: requires: - test