trackler 2.0.6.34 → 2.0.6.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+