trackler 2.0.6.34 → 2.0.6.35

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/change/canonical-data.json +6 -0
  3. data/common/exercises/luhn/canonical-data.json +35 -0
  4. data/common/exercises/rotational-cipher/cannonical-data.json +70 -0
  5. data/common/exercises/rotational-cipher/description.md +30 -0
  6. data/common/exercises/rotational-cipher/metadata.yml +4 -0
  7. data/common/exercises/run-length-encoding/description.md +7 -1
  8. data/lib/trackler/version.rb +1 -1
  9. data/tracks/elixir/exercises/run-length-encoding/example.exs +15 -4
  10. data/tracks/elixir/exercises/run-length-encoding/rle.exs +2 -2
  11. data/tracks/elixir/exercises/run-length-encoding/rle_test.exs +28 -11
  12. data/tracks/go/exercises/bob/bob_test.go +4 -1
  13. data/tracks/go/exercises/bracket-push/bracket_push_test.go +5 -2
  14. data/tracks/go/exercises/circular-buffer/circular_buffer_test.go +6 -6
  15. data/tracks/go/exercises/clock/clock_test.go +4 -1
  16. data/tracks/go/exercises/connect/connect_test.go +4 -1
  17. data/tracks/go/exercises/crypto-square/crypto_square_test.go +5 -2
  18. data/tracks/go/exercises/luhn/luhn_test.go +1 -1
  19. data/tracks/javascript/exercises/leap/leap.js +1 -1
  20. data/tracks/julia/.travis.yml +0 -2
  21. data/tracks/julia/config.json +41 -0
  22. data/tracks/julia/exercises/custom-set/HINTS.md +1 -0
  23. data/tracks/julia/exercises/custom-set/custom-set.jl +0 -0
  24. data/tracks/julia/exercises/custom-set/example.jl +51 -0
  25. data/tracks/julia/exercises/custom-set/runtests.jl +200 -0
  26. data/tracks/julia/exercises/isogram/example.jl +11 -0
  27. data/tracks/julia/exercises/isogram/isogram.jl +3 -0
  28. data/tracks/julia/exercises/isogram/runtests.jl +35 -0
  29. data/tracks/julia/exercises/luhn/example.jl +16 -0
  30. data/tracks/julia/exercises/luhn/luhn.jl +0 -0
  31. data/tracks/julia/exercises/luhn/runtests.jl +31 -0
  32. data/tracks/julia/exercises/nucleotide-count/example.jl +8 -0
  33. data/tracks/julia/exercises/nucleotide-count/nucleotide-count.jl +3 -0
  34. data/tracks/julia/exercises/nucleotide-count/runtests.jl +19 -0
  35. data/tracks/kotlin/.travis.yml +9 -1
  36. data/tracks/kotlin/README.md +117 -11
  37. data/tracks/kotlin/bin/journey-test.sh +279 -0
  38. data/tracks/kotlin/docs/INSTALLATION.md +193 -97
  39. data/tracks/kotlin/docs/TESTS.md +72 -137
  40. data/tracks/kotlin/exercises/hello-world/GETTING_STARTED.md +50 -0
  41. data/tracks/kotlin/exercises/hello-world/TUTORIAL.md +693 -0
  42. data/tracks/kotlin/exercises/hello-world/src/example/kotlin/HelloWorld.kt +2 -30
  43. data/tracks/kotlin/exercises/hello-world/src/main/kotlin/HelloWorld.kt +2 -30
  44. data/tracks/kotlin/exercises/hello-world/src/test/kotlin/HelloWorldTest.kt +11 -19
  45. data/tracks/objective-c/circle.yml +1 -1
  46. data/tracks/perl6/exercises/atbash-cipher/{cipher.t → atbash-cipher.t} +0 -0
  47. data/tracks/perl6/exercises/linked-list/linked-list.t +0 -0
  48. data/tracks/perl6/exercises/phone-number/{phone.t → phone-number.t} +0 -0
  49. data/tracks/perl6/exercises/rna-transcription/{rna_transcription.t → rna-transcription.t} +0 -0
  50. data/tracks/perl6/exercises/robot-name/{robot.t → robot-name.t} +0 -0
  51. data/tracks/perl6/exercises/scrabble-score/{scrabble_score.t → scrabble-score.t} +0 -0
  52. data/tracks/perl6/exercises/word-count/{word_count.t → word-count.t} +0 -0
  53. data/tracks/pony/config.json +9 -0
  54. data/tracks/pony/exercises/pascals-triangle/example.pony +18 -0
  55. data/tracks/pony/exercises/pascals-triangle/test.pony +31 -0
  56. data/tracks/r/config.json +20 -0
  57. data/tracks/r/exercises/grains/example.R +16 -0
  58. data/tracks/r/exercises/grains/grains.R +7 -0
  59. data/tracks/r/exercises/grains/test_grains.R +49 -0
  60. data/tracks/r/exercises/phone-number/example.R +30 -0
  61. data/tracks/r/exercises/phone-number/phone-number.R +3 -0
  62. data/tracks/r/exercises/phone-number/test_phone-number.R +44 -0
  63. data/tracks/r/exercises/secret-handshake/example.R +26 -0
  64. data/tracks/r/exercises/secret-handshake/secret-handshake.R +3 -0
  65. data/tracks/r/exercises/secret-handshake/test_secret-handshake.R +52 -0
  66. data/tracks/r/exercises/sieve/example.R +16 -0
  67. data/tracks/r/exercises/sieve/sieve.R +3 -0
  68. data/tracks/r/exercises/sieve/test_sieve.R +37 -0
  69. data/tracks/rust/config.json +11 -0
  70. data/tracks/rust/exercises/rotational-cipher/Cargo.lock +4 -0
  71. data/tracks/rust/exercises/rotational-cipher/Cargo.toml +4 -0
  72. data/tracks/rust/exercises/rotational-cipher/example.rs +16 -0
  73. data/tracks/rust/exercises/rotational-cipher/tests/rotational-cipher.rs +61 -0
  74. data/tracks/swift/circle.yml +6 -0
  75. metadata +46 -8
@@ -0,0 +1,19 @@
1
+ using Base.Test
2
+
3
+ include("nucleotide-count.jl")
4
+
5
+ @testset "empty strand" begin
6
+ @test count_nucleotides("") == Dict('A' => 0, 'C' => 0, 'G' => 0, 'T' => 0)
7
+ end
8
+
9
+ @testset "strand with repeated nucleotide" begin
10
+ @test count_nucleotides("GGGGGGG") == Dict('A' => 0, 'C' => 0, 'G' => 7, 'T' => 0)
11
+ end
12
+
13
+ @testset "strand with multiple nucleotides" begin
14
+ @test count_nucleotides("AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC") == Dict('A' => 20, 'C' => 12, 'G' => 17, 'T' => 21)
15
+ end
16
+
17
+ @testset "strand with invalid nucleotides" begin
18
+ @test_throws ErrorException count_nucleotides("AGXXACT")
19
+ end
@@ -3,8 +3,16 @@ language: java
3
3
  jdk:
4
4
  - oraclejdk8
5
5
 
6
- # http://docs.travis-ci.com/user/migrating-from-legacy
7
6
  sudo: false
7
+ cache: bundler
8
+ addons:
9
+ apt:
10
+ packages:
11
+ - tree
12
+ before_install:
13
+ - rvm install 2.2.5
14
+ - rvm use 2.2.5
8
15
 
9
16
  script:
10
17
  - bin/unit-tests.sh
18
+ - bin/journey-test.sh
@@ -1,20 +1,126 @@
1
- # xKotlin [![Build Status](https://travis-ci.org/exercism/xkotlin.svg?branch=master)](https://travis-ci.org/exercism/xkotlin)
1
+ # xkotlin [![Build Status](https://travis-ci.org/exercism/xkotlin.svg?branch=master)](https://travis-ci.org/exercism/xkotlin)
2
2
 
3
- Exercism problems in Kotlin.
3
+ Source for Exercism Exercises in Kotlin.
4
4
 
5
- ## TODO
5
+ ## Contributing Guide
6
6
 
7
- _Document how to contribute to the Kotlin track._
7
+ For general information about how to contribute to Exercism, please refer to the [Contributing Guide](https://github.com/exercism/x-api/blob/master/CONTRIBUTING.md#the-exercise-data).
8
8
 
9
- ## Contributing Guide
9
+ ## Table of Contents
10
10
 
11
- Please see the [contributing guide](https://github.com/exercism/x-common/blob/master/CONTRIBUTING.md).
11
+ * [Overview](#overview)
12
+ * [Contributing With Minimal Setup](#contributing-with-minimal-setup)
13
+ * [Getting Familiar With the Codebase](#getting-familiar-with-the-codebase)
14
+ * [The `exercises` Module](#the-exercises-module)
15
+ * [The Problem Submodules](#the-problem-submodules)
16
+ * [Advanced: Complete Local Setup](#advanced-complete-local-setup)
17
+ * [Tip: `gradle clean` before `exercism fetch`](#tip-gradle-clean-before-exercism-fetch)
12
18
 
13
- ## License
14
19
 
15
- The MIT License (MIT)
20
+ ## Overview
21
+
22
+ This guide covers contributing to the Kotlin track. If you are new, this guide is for you.
23
+
24
+ If, at any point, you're having any trouble, pop in the [Gitter exercism/dev room](https://gitter.im/exercism/dev) for help.
25
+
26
+ ## Contributing With Minimal Setup
27
+
28
+ First things first: by contributing to Exercism, you are making this learning tool that much better and improving our industry as a whole... thank you!!!
29
+
30
+ To submit a fix for an existing exercise or port an exercise to Kotlin with the least amount of setup:
31
+
32
+ 1. **Ensure you have the basic Java tooling installed:** JDK 1.8+, an editor and Gradle 2.x.
33
+
34
+ (see [exercism.io: Installing Kotlin](http://exercism.io/languages/kotlin/installing))
35
+ - **Setup a branch on a fork of [exercism/xkotlin](https://github.com/exercism/xkotlin) on your computer.**
36
+
37
+ See [GitHub Help: Forking](https://help.github.com/articles/fork-a-repo/). Use those instructions (in conjunction with [Exercism Contributing Guide](https://github.com/exercism/x-common/blob/master/CONTRIBUTING.md#git-basics)) to:
38
+ * "fork" a repository on GitHub;
39
+ - install `git`;
40
+ - "clone" a copy of your fork;
41
+ - configure an "upstream remote" (in this case, `exercism/xkotlin`);
42
+ - create a branch to house your work
43
+ - **Write the codes.** Do your work on that branch you just created.
44
+
45
+ The [Getting Familiar With the Codebase](#getting-familiar-with-the-codebase) section, below, is an orientation.
46
+ - **Commit, push and create a pull request.**
47
+
48
+ Something like:
49
+ ```
50
+ $ git add .
51
+ $ git commit -m "(An intention-revealing commit message)"
52
+ $ git push
53
+ ```
54
+
55
+ [Exercism Contributing Guide :: Commit Messages](https://github.com/exercism/x-common/blob/master/CONTRIBUTING.md#commit-messages) provides practical advice on crafting meaningful commit messages.
56
+ - **Verify that your work passes all tests.** When you create a pull request (PR), GitHub triggers a build on Travis CI. Your PR will not be merged unless those tests pass.
57
+
58
+ ## Getting Familiar With the Codebase
59
+
60
+ There are two objectives to the design of this build:
61
+
62
+ 1. when a problem is built from within the xkotlin repo (i.e. when you, the contributor, are developing the exercise), the tests run against the "example" code;
63
+ 2. when a problem is built outside the xkotlin repo (when a participant is solving the exercise), the tests run against the "main" code.
64
+
65
+ This repo is a multi-project gradle build.
66
+
67
+ ### The `exercises` Module
68
+
69
+ This is the top-level module, contained in the `exercises` directory. It is a container for the problem sub-modules.
16
70
 
17
- Copyright (c) 2015 Katrina Owen, _@kytrinyx.com
71
+ * it's `build.gradle` points the "main" sourceset to the example code.
72
+ * it's `settings.gradle` names each of the subprojects, one for each problem in the set.
73
+
74
+ ### The Problem Submodules
75
+
76
+ The `exercises` subdirectory contains all of the problem submodules.
77
+ Each problem/submodule is a subdirectory of the same name as its slug.
78
+
79
+ * it's `build.gradle` names dependencies required to work that problem.
80
+
81
+ Each problem/submodule has three source sets:
82
+
83
+ * `src/test/kotlin/` — a test suite defining the edges of the problem
84
+ * `src/example/kotlin/` — an example solution that passes all the tests
85
+ * `src/main/kotlin/` — starter source files, if required/desired *(this directory usually only has a `.keep` file in it)*.
86
+
87
+ ----
88
+
89
+ ## Advanced: Complete Local Setup
90
+
91
+ If you are going to make significant contribution(s) to the track, you might find it handy to have a complete local install of exercism on your computer. This way, you can run the full suite of tests without having to create/update a PR.
92
+
93
+ The easiest way to achieve this is simply use the `bin/journey-test.sh` script. However, you may want to perform other tests, depending on what you are doing. You can do so by duplicating the setup performed by the `bin/journey-test.sh` script.
94
+
95
+ ### Tip: `gradle clean` before `exercism fetch`
96
+
97
+ If you `exercism fetch` after doing a build, the CLI will fail with the following error message:
98
+
99
+ ```
100
+ $ exercism fetch kotlin bob
101
+ 2015/09/06 15:03:21 an internal server error was received.
102
+ Please file a bug report with the contents of 'exercism debug' at: https://github.com/exercism/exercism.io/issues
103
+ ```
104
+
105
+ and if you review the logs of your x-api, you'll find:
106
+
107
+ ```
108
+ 127.0.0.1 - - [06/Sep/2015:15:20:56 -0700] "GET /v2/exercises/kotlin/bob HTTP/1.1" 500 514949 0.2138
109
+ 2015-09-06 15:21:01 - JSON::GeneratorError - source sequence is illegal/malformed utf-8:
110
+ ```
111
+
112
+ This is because some files generated by the build can't be served from the x-api. This is by design: the CLI does not serve binaries. To fix this, simply make sure you do a clean in your `xkotlin` repo before you fetch:
113
+
114
+ ```
115
+ cd ~/workspace/exercism/xkotlin/exercises
116
+ gradle clean
117
+ cd ~/workspace/exercism/exercises
118
+ exercism fetch kotlin bob
119
+ ```
120
+
121
+
122
+ # License
123
+
124
+ The MIT License (MIT)
18
125
 
19
- ### Kotlin icon
20
- The Kotlin icon was designed by JetBrains and may be used in its original form.
126
+ Copyright (c) 2014 Katrina Owen, _@kytrinyx.com
@@ -0,0 +1,279 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # This script is shared between the Java and Kotlin tracks. If you make an update to this script on
4
+ # on track, please create a companion PR to merge it in to the other. Thank you!
5
+ TRACK=kotlin
6
+ TRACK_REPO="x${TRACK}"
7
+ TRACK_SRC_EXT="kt"
8
+
9
+ on_exit() {
10
+ echo ">>> on_exit()"
11
+ if [[ "$xapi_pid" != "" ]] ; then
12
+ kill $xapi_pid
13
+ echo "stopped x-api (pid=${xapi_pid})"
14
+ fi
15
+ cd $EXECPATH
16
+ echo "<<< on_exit()"
17
+ }
18
+
19
+ assert_installed() {
20
+ local binary=$1
21
+ echo ">>> assert_installed(binary=\"${binary}\")"
22
+
23
+ if [[ "`which $binary`" == "" ]]; then
24
+ echo "${binary} not found; it is required to perform this test."
25
+ echo -e "Have you completed the setup instructions at https://github.com/exercism/${TRACK_REPO} ?\n"
26
+ echo "PATH=${PATH}"
27
+ echo "aborting."
28
+ exit 1
29
+ fi
30
+ echo "<<< assert_installed()"
31
+ }
32
+
33
+ assert_ruby_installed() {
34
+ local ruby_app_home="$1"
35
+ echo ">>> assert_ruby_installed(ruby_app_home=\"${ruby_app_home}\")"
36
+
37
+ pushd "${ruby_app_home}"
38
+ local current_ruby_ver=`ruby --version | egrep --only-matching "[0-9]+\.[0-9]+\.[0-9]+"`
39
+ local expected_ruby_ver=`cat Gemfile | awk -F\' '/ruby /{print $2}'`
40
+ popd
41
+ if [[ "${expected_ruby_ver}" != "" && "${current_ruby_ver}" != "${expected_ruby_ver}" ]]; then
42
+ echo "${ruby_app_home} requires Ruby ${expected_ruby_ver}; current Ruby version is ${current_ruby_ver}."
43
+ echo -e "Ruby used: `which ruby`.\n"
44
+ echo -e "Have you completed the setup instructions at https://github.com/exercism/${TRACK_REPO} ?\n"
45
+ echo "PATH=${PATH}"
46
+ echo "aborting."
47
+ exit 1
48
+ fi
49
+ echo "<<< assert_ruby_installed()"
50
+ }
51
+
52
+ clean() {
53
+ local build_dir="$1"
54
+ echo ">>> clean(build_dir=\"${build_dir}\")"
55
+
56
+ # empty, absolute path, or parent reference are considered dangerous to rm -rf against.
57
+ if [[ "${build_dir}" == "" || ${build_dir} =~ ^/ || ${build_dir} =~ \.\. ]] ; then
58
+ echo "Value for build_dir looks dangerous. Aborting."
59
+ exit 1
60
+ fi
61
+
62
+ local build_path=$( pwd )/${build_dir}
63
+ if [[ -d "${build_path}" ]] ; then
64
+ echo "Cleaning journey script build output directory (${build_path})."
65
+ rm -rf "${build_path}"
66
+ fi
67
+ cd exercises
68
+ gradle clean
69
+ cd ..
70
+ echo "<<< clean()"
71
+ }
72
+
73
+ get_operating_system() {
74
+ case $(uname) in
75
+ (Darwin*)
76
+ echo "mac";;
77
+ (Linux*)
78
+ echo "linux";;
79
+ (Windows*)
80
+ echo "windows";;
81
+ (*)
82
+ echo "linux";;
83
+ esac
84
+ }
85
+
86
+ get_cpu_architecture() {
87
+ case $(uname -m) in
88
+ (*64*)
89
+ echo 64bit;;
90
+ (*686*)
91
+ echo 32bit;;
92
+ (*386*)
93
+ echo 32bit;;
94
+ (*)
95
+ echo 64bit;;
96
+ esac
97
+ }
98
+
99
+ download_exercism_cli() {
100
+ local os="$1"
101
+ local arch="$2"
102
+ local exercism_home="$3"
103
+ echo ">>> download_exercism_cli(os=\"${os}\", arch=\"${arch}\", exercism_home=\"${exercism_home}\")"
104
+
105
+ local CLI_RELEASES=https://github.com/exercism/cli/releases
106
+
107
+ local latest=${CLI_RELEASES}/latest
108
+ # "curl..." :: HTTP 302 headers, including "Location" -- URL to redirect to.
109
+ # "awk..." :: pluck last path segment from "Location" (i.e. the version number)
110
+ local version="$(curl --head --silent ${latest} | awk -v FS=/ '/Location:/{print $NF}' | tr -d '\r')"
111
+ local download_url=${CLI_RELEASES}/download/${version}/exercism-${os}-${arch}.tgz
112
+
113
+ mkdir -p ${exercism_home}
114
+ curl -s --location ${download_url} | tar xz -C ${exercism_home}
115
+ echo "<<< download_exercism_cli()"
116
+ }
117
+
118
+ git_clone() {
119
+ local repo_name="$1"
120
+ local dest_path="$2"
121
+ echo ">>> git_clone(repo_name=\"${repo_name}\", dest_path=\"${dest_path}\")"
122
+
123
+ git clone https://github.com/exercism/${repo_name} ${dest_path}
124
+
125
+ echo "<<< git_clone()"
126
+ }
127
+
128
+ make_local_trackler() {
129
+ local trackler="$1"
130
+ local xapi_home="$2"
131
+ echo ">>> make_local_trackler(trackler=\"${trackler}\", xapi_home=\"${xapi_home}\")"
132
+
133
+ local track_root=$( pwd )
134
+ pushd ${trackler}
135
+ git submodule init -- common
136
+ git submodule update
137
+
138
+ # Bake in local copy of this track; this is what we are testing.
139
+ rmdir tracks/${TRACK}
140
+ mkdir -p tracks/${TRACK}/exercises
141
+ cp ${track_root}/config.json tracks/${TRACK}
142
+ cp -r ${track_root}/exercises tracks/${TRACK}
143
+
144
+ # Set the version to that expected by x-api
145
+ version=$( grep -m 1 'trackler' ${xapi_home}/Gemfile.lock | sed 's/.*(//' | sed 's/)//' )
146
+ echo "module Trackler VERSION = \"${version}\" end" > lib/trackler/version.rb
147
+
148
+ gem install bundler
149
+ bundle install
150
+ gem build trackler.gemspec
151
+
152
+ # Make *this* the gem that x-api uses when we build x-api.
153
+ gem install --local trackler-*.gem
154
+
155
+ popd > /dev/null
156
+ echo "<<< make_local_trackler()"
157
+ }
158
+
159
+ start_x_api() {
160
+ local xapi_home="$1"
161
+ echo ">>> start_x_api(xapi_home=\"${xapi_home}\")"
162
+
163
+ pushd $xapi_home
164
+
165
+ gem install bundler
166
+ bundle install
167
+ RACK_ENV=development rackup &
168
+ xapi_pid=$!
169
+ sleep 5
170
+
171
+ echo "x-api is running (pid=${xapi_pid})."
172
+
173
+ popd > /dev/null
174
+ echo "<<< start_x_api()"
175
+ }
176
+
177
+ configure_exercism_cli() {
178
+ local exercism_home="$1"
179
+ local exercism_configfile="$2"
180
+ local xapi_port=$3
181
+ echo ">>> configure_exercism_cli(exercism_home=\"${exercism_home}\", exercism_configfile=\"${exercism_configfile}\", xapi_port=${xapi_port})"
182
+ local exercism="./exercism --config ${exercism_configfile}"
183
+
184
+ mkdir -p "${exercism_home}"
185
+ pushd "${exercism_home}"
186
+ $exercism configure --dir="${exercism_home}"
187
+ $exercism configure --api http://localhost:${xapi_port}
188
+ $exercism debug
189
+ popd
190
+
191
+ echo "<<< configure_exercism_cli()"
192
+ }
193
+
194
+ solve_all_exercises() {
195
+ local exercism_exercises_dir="$1"
196
+ local exercism_configfile="$2"
197
+ echo ">>> solve_all_exercises(exercism_exercises_dir=\"${exercism_exercises_dir}\", exercism_configfile=\"${exercism_configfile}\")"
198
+
199
+ local track_root=$( pwd )
200
+ local exercism_cli="./exercism --config ${exercism_configfile}"
201
+ local exercises=`cat config.json | jq '.exercises[] .slug' --raw-output`
202
+ local total_exercises=`cat config.json | jq '.exercises | length'`
203
+ local current_exercise_number=1
204
+ local tempfile="${TMPDIR:-/tmp}/journey-test.sh-unignore_all_tests.txt"
205
+
206
+ pushd ${exercism_exercises_dir}
207
+ for exercise in $exercises; do
208
+ echo -e "\n\n"
209
+ echo "=================================================="
210
+ echo "${current_exercise_number} of ${total_exercises} -- ${exercise}"
211
+ echo "=================================================="
212
+
213
+ ${exercism_cli} fetch ${TRACK} $exercise
214
+ cp -R -H ${track_root}/exercises/${exercise}/src/example/${TRACK}/* ${exercism_exercises_dir}/${TRACK}/${exercise}/src/main/${TRACK}/
215
+
216
+ pushd ${exercism_exercises_dir}/${TRACK}/${exercise}
217
+ # Ensure we run all the tests (as delivered, all but the first is @Ignore'd)
218
+ for testfile in `find . -name "*Test.${TRACK_SRC_EXT}"`; do
219
+ sed 's/@Ignore//' ${testfile} > "${tempfile}" && mv "${tempfile}" "${testfile}"
220
+ done
221
+ gradle test
222
+ popd
223
+
224
+ current_exercise_number=$((current_exercise_number + 1))
225
+ done
226
+ popd
227
+ }
228
+
229
+ main() {
230
+ # all functions assume current working directory is repository root.
231
+ cd "${SCRIPTPATH}/.."
232
+
233
+ local track_root=$( pwd )
234
+ local build_dir="build"
235
+ local build_path="${track_root}/${build_dir}"
236
+
237
+ local xapi_home="${build_path}/x-api"
238
+ local trackler_home="${build_path}/trackler"
239
+ local exercism_home="${build_path}/exercism"
240
+
241
+ local exercism_configfile=".journey-test.exercism.json"
242
+ local xapi_port=9292
243
+
244
+ assert_installed "gradle"
245
+ assert_installed "jq"
246
+
247
+ clean "${build_dir}"
248
+
249
+ # Make a local version of trackler that includes the source from this repo.
250
+ git_clone "x-api" "${xapi_home}"
251
+ git_clone "trackler" "${trackler_home}"
252
+ assert_ruby_installed "${trackler_home}"
253
+ make_local_trackler "${trackler_home}" "${xapi_home}"
254
+
255
+ # Stand-up a local instance of x-api so we can fetch the exercises through it.
256
+ assert_ruby_installed "${xapi_home}"
257
+ start_x_api "${xapi_home}"
258
+
259
+ # Create a CLI install and config just for this build; this script does not use your CLI install.
260
+ download_exercism_cli $(get_operating_system) $(get_cpu_architecture) "${exercism_home}"
261
+ configure_exercism_cli "${exercism_home}" "${exercism_configfile}" "${xapi_port}"
262
+
263
+ solve_all_exercises "${exercism_home}" "${exercism_configfile}"
264
+ }
265
+
266
+ ##########################################################################
267
+ # Execution begins here...
268
+
269
+ # If any command fails, fail the script.
270
+ set -ex
271
+ SCRIPTPATH=$( pushd `dirname $0` > /dev/null && pwd && popd > /dev/null )
272
+ EXECPATH=$( pwd )
273
+ # Make output easier to read in CI
274
+ TERM=dumb
275
+
276
+ xapi_pid=""
277
+ trap on_exit EXIT
278
+ main
279
+