|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +set -e |
| 4 | + |
| 5 | +# Synopsis: |
| 6 | +# Test the test runner Docker image by running it against all reference solutions from the Groovy repository. |
| 7 | +# It is recommended to run this script when upgrading Groovy exercises or Groovy test runner dependencies. |
| 8 | + |
| 9 | +# Output: |
| 10 | +# Fails is |
| 11 | + |
| 12 | +# Example: |
| 13 | +# ./bin/run-reference-solution-tests-in-docker.sh |
| 14 | + |
| 15 | +# Build the Docker image |
| 16 | +docker build --rm -t exercism/groovy-test-runner . |
| 17 | +export BUILD_IMAGE=false |
| 18 | + |
| 19 | +# Assumes exercism/groovy repository is checked out next to the exercism/groovy-test-runner repository. |
| 20 | +# If the repository is checked out elsewhere, provide the path as the first argument. |
| 21 | +groovy_repo_path=$(realpath "${1:-${PWD}/../groovy}") |
| 22 | +repo_root=$(git rev-parse --show-toplevel) |
| 23 | + |
| 24 | +tmp_dir="$(mktemp -d)" |
| 25 | +echo "Using temporary directory: ${tmp_dir}" |
| 26 | + |
| 27 | +cleanup() { |
| 28 | + rm -rf "${tmp_dir}" |
| 29 | +} |
| 30 | + |
| 31 | +trap cleanup EXIT |
| 32 | + |
| 33 | +failures=() |
| 34 | + |
| 35 | +# Iterate over all exercises directories |
| 36 | +for exercise_dir in "${groovy_repo_path}"/exercises/practice/*; do |
| 37 | + exercise_slug="${exercise_dir##*/}" |
| 38 | + exercise_tmp_dir="${tmp_dir}/${exercise_slug}" |
| 39 | + mkdir -p "${exercise_tmp_dir}" |
| 40 | + cp -R "${exercise_dir}/" "${exercise_tmp_dir}" |
| 41 | + cp -R "${exercise_dir}/.meta/src/reference/" "${exercise_tmp_dir}/src/main" |
| 42 | + "${repo_root}/bin/run-in-docker.sh" "${exercise_slug}" "${exercise_tmp_dir}" "${exercise_tmp_dir}/output" |
| 43 | + results_json="${exercise_tmp_dir}/output/results.json" |
| 44 | + status=$(jq -r ".status" "${results_json}") |
| 45 | + if [[ "${status}" != "pass" ]]; then |
| 46 | + echo "💥 Test failed for ${exercise_slug}:" |
| 47 | + jq . "${results_json}" |
| 48 | + failures+=("${exercise_slug}") |
| 49 | + fi |
| 50 | +done |
| 51 | + |
| 52 | +if (( "${#failures[@]}" != 0 )); then |
| 53 | + echo "💥 The following exercises failed: ${failures[*]}" |
| 54 | + echo "Check above for details" |
| 55 | + exit 1 |
| 56 | +fi |
| 57 | + |
| 58 | +echo "✅ All tests passed" |
0 commit comments