| #!/usr/bin/env bash | |
| options="$*" | |
| attempt=1 | |
| lastexit=0 | |
| rm tests/last-fails || true | |
| while [[ $attempt < 5 ]]; do | |
| echo | |
| echo "~~> Test attempt $attempt" | |
| if [[ -f tests/last-fails ]]; then | |
| echo "~~? Testing only: $(cat tests/last-fails | xargs)" | |
| echo | |
| rm tests/last-run.log | |
| lastexit=0 | |
| while read t; do | |
| cargo test --color=always $options $t -- --exact | tee -a tests/last-run.log | |
| status=${PIPESTATUS[0]} | |
| if ! [[ $status = 0 ]]; then | |
| lastexit=$status | |
| fi | |
| done < tests/last-fails | |
| else | |
| echo | |
| cargo test --color=always $options | tee tests/last-run.log | |
| lastexit=${PIPESTATUS[0]} | |
| fi | |
| if [[ $lastexit = 0 ]]; then | |
| break | |
| fi | |
| grep -E "^test \w+ \.\.\. FAILED$" tests/last-run.log \ | |
| | cut -d\ -f2 > tests/last-fails | |
| n=$(cat tests/last-fails | wc -l) | |
| if [[ $n = 0 ]]; then | |
| n=compile | |
| fi | |
| echo | |
| echo "~~! $n failures this attempt" | |
| echo | |
| if [[ $n = "compile" ]]; then | |
| break | |
| fi | |
| ((attempt+=1)) | |
| done | |
| exit $lastexit |