lots of exercises in java... from https://github.com/exercism/java

journey-test.sh 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #!/bin/bash
  2. SCRIPTPATH=$( pushd `dirname $0` > /dev/null && pwd && popd > /dev/null )
  3. EXECPATH=$PWD
  4. XAPI_PID=""
  5. # Makes CI output easier to read
  6. TERM=dumb
  7. function on_exit() {
  8. echo ">>> on_exit()"
  9. if [ "$XAPI_PID" != "" ] ; then
  10. kill $XAPI_PID
  11. echo "Stopped X-API (pid=${XAPI_PID})"
  12. fi
  13. cd $EXECPATH
  14. echo "<<< on_exit()"
  15. }
  16. assert_gradle_installed() {
  17. echo ">>> assert_gradle_installed()"
  18. which gradle >/dev/null
  19. if [ $? != 0 ]; then
  20. echo "Gradle not found. This the Java build tool and is required."
  21. echo -e "Have you completed the setup instructions at https://github.com/exercism/xjava ?\n"
  22. echo "PATH=${PATH}"
  23. echo "aborting."
  24. exit 1
  25. fi
  26. echo "<<< assert_gradle_installed()"
  27. }
  28. assert_jq_installed() {
  29. echo ">>> assert_jq_installed()"
  30. which jq >/dev/null
  31. if [ $? != 0 ]; then
  32. echo "jq not found. This utility is used to parse the config.json file and is required."
  33. echo -e "Have you completed the setup instructions at https://github.com/exercism/xjava ?\n"
  34. echo "PATH=${PATH}"
  35. echo "aborting."
  36. exit 1
  37. fi
  38. echo "<<< assert_jq_installed()"
  39. }
  40. assert_required_ruby_installed() {
  41. echo ">>> assert_required_ruby_installed(\"$1\")"
  42. local RACKAPP_HOME="$1"
  43. pushd "${RACKAPP_HOME}" >/dev/null
  44. local CURRENT_RUBY_VER=`ruby --version | egrep --only-matching "[0-9]+\.[0-9]+\.[0-9]+"`
  45. local EXPECTED_RUBY_VER=`cat Gemfile | awk -F\' '/ruby /{print $2}'`
  46. popd >/dev/null
  47. if [ "$CURRENT_RUBY_VER" != "$EXPECTED_RUBY_VER" ]; then
  48. echo "${RACKAPP_HOME} requires Ruby ${EXPECTED_RUBY_VER}; current Ruby version is ${CURRENT_RUBY_VER}."
  49. echo -e "Ruby used: `which ruby`.\n"
  50. echo -e "Have you completed the setup instructions at https://github.com/exercism/xjava ?\n"
  51. echo "PATH=${PATH}"
  52. echo "aborting."
  53. exit 1
  54. fi
  55. echo "<<< assert_required_ruby_installed()"
  56. }
  57. clean_build() {
  58. echo ">>> clean_build(\"$1\", \"$2\")"
  59. local REPO_ROOT="$1"
  60. local BUILD_DIR="$2"
  61. if [ -d "$BUILD_DIR" ] ; then
  62. echo "Cleaning journey script build (${BUILD_DIR})."
  63. rm -rf "$BUILD_DIR"
  64. fi
  65. pushd ${REPO_ROOT}/exercises > /dev/null
  66. gradle clean
  67. popd > /dev/null
  68. echo "<<< clean_build()"
  69. }
  70. get_operating_system() {
  71. case $(uname) in
  72. (Darwin*)
  73. echo "mac";;
  74. (Linux*)
  75. echo "linux";;
  76. (Windows*)
  77. echo "windows";;
  78. (*)
  79. echo "linux";;
  80. esac
  81. }
  82. get_cpu_architecture() {
  83. case $(uname -m) in
  84. (*64*)
  85. echo 64bit;;
  86. (*686*)
  87. echo 32bit;;
  88. (*386*)
  89. echo 32bit;;
  90. (*)
  91. echo 64bit;;
  92. esac
  93. }
  94. fetch_exercism_cli() {
  95. echo ">>> fetch_exercism_cli(\"$1\", \"$2\", \"$3\")"
  96. local OS="$1"
  97. local ARCH="$2"
  98. local EXERCISM_HOME="$3"
  99. local LATEST=https://github.com/exercism/cli/releases/latest
  100. # "curl..." :: HTTP 302 headers, including "Location" -- URL to redirect to.
  101. # "awk..." :: pluck last path segment from "Location" (i.e. the version number)
  102. local VERSION="$(curl --head --silent $LATEST | awk -v FS=/ '/Location:/{print $NF}' | tr -d '\r')"
  103. local CLI_URL=https://github.com/exercism/cli/releases/download/${VERSION}/exercism-${OS}-${ARCH}.tgz
  104. mkdir -p ${EXERCISM_HOME}
  105. curl -s --location ${CLI_URL} | tar xz -C ${EXERCISM_HOME}
  106. echo "<<< fetch_exercism_cli()"
  107. }
  108. fetch_x_api() {
  109. echo ">>> fetch_x_api(\"$1\")"
  110. local XAPI_HOME="$1"
  111. git clone https://github.com/exercism/x-api ${XAPI_HOME}
  112. pushd ${XAPI_HOME} >/dev/null
  113. git submodule init -- metadata
  114. git submodule update
  115. rmdir tracks/java
  116. ln -s $REPO_ROOT tracks/java
  117. popd > /dev/null
  118. echo "<<< fetch_x_api()"
  119. }
  120. start_x_api() {
  121. echo ">>> start_x_api(\"$1\")"
  122. local XAPI_HOME="$1"
  123. pushd $XAPI_HOME >/dev/null
  124. SET_RUBY_VER_CMD="rbenv local 2.2.1"
  125. gem install bundler
  126. bundle install
  127. RACK_ENV=development rackup &
  128. XAPI_PID=$!
  129. sleep 5
  130. echo "X-API is running (pid=${XAPI_PID})."
  131. popd > /dev/null
  132. echo "<<< start_x_api()"
  133. }
  134. configure_exercism_cli() {
  135. echo ">>> configure_exercism_cli(\"$1\", \"$2\", $3)"
  136. local EXERCISM_HOME="$1"
  137. local EXERCISM_CONFIGFILE="$2"
  138. local XAPI_PORT=$3
  139. local EXERCISM="./exercism --config ${EXERCISM_CONFIGFILE}"
  140. mkdir -p "${EXERCISM_HOME}"
  141. pushd "${EXERCISM_HOME}" >/dev/null
  142. $EXERCISM configure --dir="${EXERCISM_HOME}"
  143. $EXERCISM configure --api http://localhost:${XAPI_PORT}
  144. $EXERCISM debug
  145. popd >/dev/null
  146. echo "<<< configure_exercism_cli()"
  147. }
  148. solve_all_exercises() {
  149. echo ">>> solve_all_exercises(\"$1\", \"$2\")"
  150. local EXERCISM_HOME="$1"
  151. local EXERCISM_CONFIGFILE="$2"
  152. local EXERCISM="./exercism --config ${EXERCISM_CONFIGFILE}"
  153. local EXERCISES=`cat config.json | jq '.problems []' --raw-output`
  154. local TOTAL_EXERCISES=`cat config.json | jq '.problems | length'`
  155. local CURRENT_EXERCISE_NUMBER=1
  156. local TEMPFILE="${TMPDIR:-/tmp}/journey-test.sh-unignore_all_tests.txt"
  157. pushd ${EXERCISM_HOME} >/dev/null
  158. for EXERCISE in $EXERCISES; do
  159. echo ''
  160. echo '****' Testing $EXERCISE '('$CURRENT_EXERCISE_NUMBER / $TOTAL_EXERCISES') ****'
  161. echo ''
  162. $EXERCISM fetch java $EXERCISE
  163. cp -R -H $REPO_ROOT/exercises/$EXERCISE/src/example/java/* $EXERCISM_HOME/java/$EXERCISE/src/main/java/
  164. pushd $EXERCISM_HOME/java/$EXERCISE/ >/dev/null
  165. for TESTFILE in `find . -name "*Test.java"`; do
  166. sed 's/@Ignore//' $TESTFILE > "$TEMPFILE" && mv "$TEMPFILE" "$TESTFILE"
  167. done
  168. gradle test
  169. popd >/dev/null
  170. CURRENT_EXERCISE_NUMBER=$((CURRENT_EXERCISE_NUMBER + 1))
  171. done
  172. popd >/dev/null
  173. }
  174. main() {
  175. # allow all functions to assume current working directory is repository root.
  176. cd "${SCRIPTPATH}/.."
  177. local REPO_ROOT="${PWD}"
  178. local BUILD_DIR="${REPO_ROOT}/build"
  179. local XAPI_HOME="${BUILD_DIR}/x-api"
  180. local EXERCISM_HOME="${BUILD_DIR}/exercism"
  181. local EXERCISM_CONFIGFILE=".journey-test.exercism.json"
  182. local XAPI_PORT=9292
  183. assert_gradle_installed
  184. assert_jq_installed
  185. clean_build "${REPO_ROOT}" "${BUILD_DIR}"
  186. fetch_exercism_cli $(get_operating_system) $(get_cpu_architecture) "${EXERCISM_HOME}"
  187. fetch_x_api "${XAPI_HOME}"
  188. assert_required_ruby_installed "${XAPI_HOME}"
  189. start_x_api "${XAPI_HOME}"
  190. configure_exercism_cli "${EXERCISM_HOME}" "${EXERCISM_CONFIGFILE}" "${XAPI_PORT}"
  191. solve_all_exercises "${EXERCISM_HOME}" "${EXERCISM_CONFIGFILE}"
  192. }
  193. ##########################################################################
  194. # Execution begins here...
  195. set -e
  196. trap on_exit EXIT
  197. main