| 
									
										
										
										
											2018-12-17 10:11:02 -08:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Runs all tests and collects code coverage | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Warning: this process is a little slow | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set -e | 
					
						
							|  |  |  | cd "$(dirname "$0")/.." | 
					
						
							| 
									
										
										
										
											2018-12-18 14:25:10 -08:00
										 |  |  | source ci/_ | 
					
						
							| 
									
										
										
										
											2018-12-17 10:11:02 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | : "${BUILDKITE_COMMIT:=local}" | 
					
						
							|  |  |  | reportName="lcov-${BUILDKITE_COMMIT:0:9}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-18 11:42:57 -08:00
										 |  |  | coverageFlags=(-Zprofile)                # Enable coverage | 
					
						
							|  |  |  | coverageFlags+=("-Clink-dead-code")      # Dead code should appear red in the report | 
					
						
							|  |  |  | coverageFlags+=("-Ccodegen-units=1")     # Disable ThinLTO which corrupts debuginfo (see [rustc issue #45511]). | 
					
						
							|  |  |  | coverageFlags+=("-Cinline-threshold=0")  # Disable inlining, which complicates control flow. | 
					
						
							|  |  |  | coverageFlags+=("-Coverflow-checks=off") # Disable overflow checks, which create unnecessary branches. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export RUSTFLAGS="${coverageFlags[*]}" | 
					
						
							| 
									
										
										
										
											2018-12-17 10:11:02 -08:00
										 |  |  | export CARGO_INCREMENTAL=0 | 
					
						
							|  |  |  | export RUST_BACKTRACE=1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo "--- remove old coverage results" | 
					
						
							|  |  |  | if [[ -d target/cov ]]; then | 
					
						
							|  |  |  |   find target/cov -name \*.gcda -print0 | xargs -0 rm -f | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | rm -rf target/cov/$reportName | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-14 19:41:05 -07:00
										 |  |  | source ci/rust-version.sh nightly | 
					
						
							|  |  |  | _ cargo +$rust_nightly build --target-dir target/cov --all | 
					
						
							|  |  |  | _ cargo +$rust_nightly test --target-dir target/cov --lib --all -- --test-threads=1 | 
					
						
							| 
									
										
										
										
											2018-12-17 10:11:02 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | _ scripts/fetch-grcov.sh | 
					
						
							|  |  |  | echo "--- grcov" | 
					
						
							| 
									
										
										
										
											2018-12-18 11:42:57 -08:00
										 |  |  | ./grcov target/cov/debug/deps/ > target/cov/lcov-full.info | 
					
						
							| 
									
										
										
										
											2018-12-17 10:11:02 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-05 15:04:16 -08:00
										 |  |  | echo "--- filter-files-from-lcov" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # List of directories to remove from the coverage report | 
					
						
							|  |  |  | ignored_directories="^(bench-tps|upload-perf|bench-streamer)" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | filter-files-from-lcov() { | 
					
						
							| 
									
										
										
										
											2018-12-17 10:11:02 -08:00
										 |  |  |   declare skip=false | 
					
						
							|  |  |  |   while read -r line; do | 
					
						
							|  |  |  |     if [[ $line =~ ^SF:/ ]]; then | 
					
						
							|  |  |  |       skip=true # Skip all absolute paths as these are references into ~/.cargo | 
					
						
							|  |  |  |     elif [[ $line =~ ^SF:(.*) ]]; then | 
					
						
							|  |  |  |       declare file="${BASH_REMATCH[1]}" | 
					
						
							| 
									
										
										
										
											2019-03-05 15:04:16 -08:00
										 |  |  |       if [[ $file =~ $ignored_directories ]]; then | 
					
						
							|  |  |  |         skip=true # Skip paths into ignored locations | 
					
						
							|  |  |  |       elif [[ -r $file ]]; then | 
					
						
							| 
									
										
										
										
											2018-12-17 10:11:02 -08:00
										 |  |  |         skip=false | 
					
						
							|  |  |  |       else | 
					
						
							| 
									
										
										
										
											2019-03-05 15:04:16 -08:00
										 |  |  |         skip=true # Skip relative paths that don't exist | 
					
						
							| 
									
										
										
										
											2018-12-17 10:11:02 -08:00
										 |  |  |       fi | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  |     [[ $skip = true ]] || echo "$line" | 
					
						
							|  |  |  |   done | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-05 15:04:16 -08:00
										 |  |  | filter-files-from-lcov < target/cov/lcov-full.info > target/cov/lcov.info | 
					
						
							| 
									
										
										
										
											2018-12-17 10:11:02 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | echo "--- html report" | 
					
						
							|  |  |  | # ProTip: genhtml comes from |brew install lcov| or |apt-get install lcov| | 
					
						
							|  |  |  | genhtml --output-directory target/cov/$reportName \
 | 
					
						
							|  |  |  |   --show-details \
 | 
					
						
							|  |  |  |   --highlight \
 | 
					
						
							|  |  |  |   --ignore-errors source \
 | 
					
						
							|  |  |  |   --prefix "$PWD" \
 | 
					
						
							|  |  |  |   --legend \
 | 
					
						
							|  |  |  |   target/cov/lcov.info | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ( | 
					
						
							|  |  |  |   cd target/cov | 
					
						
							|  |  |  |   tar zcf report.tar.gz $reportName | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ls -l target/cov/$reportName/index.html |