From d52737a55bd84dedf7c91f02ebeb5e4b9d02b7c5 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Tue, 7 Jul 2026 23:31:35 -0700 Subject: [PATCH] Sync `run-in-docker.sh` from `generic-test-runner`; move `run-in-docker` scripts into `bin/` --- run-in-docker.bat => bin/run-in-docker.bat | 0 bin/run-in-docker.sh | 46 ++++++++++++++++++++++ 2 files changed, 46 insertions(+) rename run-in-docker.bat => bin/run-in-docker.bat (100%) create mode 100755 bin/run-in-docker.sh diff --git a/run-in-docker.bat b/bin/run-in-docker.bat similarity index 100% rename from run-in-docker.bat rename to bin/run-in-docker.bat diff --git a/bin/run-in-docker.sh b/bin/run-in-docker.sh new file mode 100755 index 0000000..f9e26a6 --- /dev/null +++ b/bin/run-in-docker.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env sh + +# Synopsis: +# Run the test runner on a solution using the test runner Docker image. +# The test runner Docker image is built automatically. + +# Arguments: +# $1: exercise slug +# $2: path to solution folder +# $3: path to output directory + +# Output: +# Writes the test results to a results.json file in the passed-in output directory. +# The test results are formatted according to the specifications at https://github.com/exercism/docs/blob/main/building/tooling/test-runners/interface.md + +# Example: +# ./bin/run-in-docker.sh two-fer path/to/solution/folder/ path/to/output/directory/ + +# Stop executing when a command returns a non-zero return code +set -e + +# If any required arguments is missing, print the usage and exit +if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then + echo "usage: ./bin/run-in-docker.sh exercise-slug path/to/solution/folder/ path/to/output/directory/" + exit 1 +fi + +slug="$1" +solution_dir=$(realpath "${2%/}") +output_dir=$(realpath "${3%/}") + +# Create the output directory if it doesn't exist +mkdir -p "${output_dir}" + +# Build the Docker image +docker build --rm -t exercism/typescript-test-runner . + +# Run the Docker image using the settings mimicking the production environment +docker run \ + --rm \ + --network none \ + --read-only \ + --mount type=bind,src="${solution_dir}",dst=/solution \ + --mount type=bind,src="${output_dir}",dst=/output \ + --mount type=tmpfs,dst=/tmp \ + exercism/typescript-test-runner "${slug}" /solution /output