Source for Exercism Exercises in Kotlin.
For general information about how to contribute to Exercism, please refer to the contributing guide.
This guide covers contributing to the Kotlin track. If you are new, this guide is for you.
If, at any point, you're having any trouble, pop in the Building Exercism category of the Exercism forum for help.
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!!!
To submit a fix for an existing exercise or port an exercise to Kotlin with the least amount of setup:
Ensure you have the basic Java tooling installed: JDK 1.8+, an editor and Gradle 2.x.
(see exercism.io: Installing Kotlin)
Next steps:
git
;exercism/kotlin
);create a branch to house your work
The Getting Familiar With the Codebase section, below, is an orientation.
Something like:
$ git add .
$ git commit -m "(An intention-revealing commit message)"
$ git push
It is advised you write meaningful commit messages. Chris Beams wrote about "How to Write a Git Commit Message".
There are two objectives to the design of this build:
exercism/kotlin
repo (i.e. when you, the contributor, are developing the exercise), the tests run against the reference solution;exercism/kotlin
repo (when a participant is solving the exercise), the tests run against the "main" code.This repo is a multi-project gradle build.
exercises
ModuleThis is the top-level module, contained in the exercises
directory. It is a container for the problem sub-modules.
build.gradle
points the "main" sourceset to the reference solution.settings.gradle
names each of the subprojects, one for each problem in the set.The exercises
subdirectory contains all of the problem submodules.
Each problem/submodule is a subdirectory of the same name as its slug.
build.gradle.kts
names dependencies required to work that problem.Each problem/submodule has three source sets:
src/test/kotlin/
— a test suite defining the edges of the problem.meta/src/reference/kotlin/
— a reference solution that passes all the testssrc/main/kotlin/
— starter source files, if required/desired (this directory usually only has a .keep
file in it).To run the tests for a specific exercise, run the test
Gradle task from the exercises
directory. For example:
cd exercises
https://github.com/exercism/v3/blob/main/gradlew bob:test
Steps for modifying an exercise:
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.
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.
gradle clean
before exercism fetch
If you exercism fetch
after doing a build, the CLI will fail with the following error message:
$ exercism fetch kotlin bob
2015/09/06 15:03:21 an internal server error was received.
Please file a bug report with the contents of 'exercism debug' at: https://github.com/exercism/exercism.io/issues
and if you review the logs of your x-api, you'll find:
127.0.0.1 - - [06/Sep/2015:15:20:56 -0700] "GET /v2/exercises/kotlin/bob HTTP/1.1" 500 514949 0.2138
2015-09-06 15:21:01 - JSON::GeneratorError - source sequence is illegal/malformed utf-8:
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 exercism/kotlin
repo before you fetch:
cd ~/workspace/exercism/kotlin/exercises
gradle clean
cd ~/workspace/exercism/exercises
exercism fetch kotlin bob