You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Track tooling is (generally) written in the track's language, but you're completely free to use whatever language (or combination of languages) you prefer.
46
+
47
+
```exercism/caution
48
+
We recommend writing as much of the tooling in the track's language, which maintainers and contributors will be familiar with.
49
+
Introducing other languages means it will become harder to find people that can maintain or contribute to the track, so try to use as few languages as possible.
After launching the track with the first 20+ exercises, the focus should shift to implementing the track tooling.
4
-
Each track has various pieces of tooling that run in production.
5
-
Each provides a key function to the learning experience of that language.
3
+
After launching the track with the first 20+ exercises, the focus should shift to implementing the [track tooling](/docs/building/tooling).
6
4
7
-
There also can be track tooling to run for contribution or maintainance.
8
-
Such tools provide help to create new exercises or keeping them up-to-date.
9
-
Each lowers the barriers for new contributors and speeds up the growth of the track.
5
+
There are two types of track tooling:
6
+
7
+
- Production: provide a key function to the learning experience of that language
8
+
- Maintenance: help with track maintenance
9
+
10
+
## Production tooling
10
11
11
12
There are (currently) three pieces of tooling for production:
12
13
13
14
-**[Test Runners](/docs/building/tooling/test-runners)**: runs an exercise's tests against a student's code. (required)
14
15
-**[Representers](/docs/building/tooling/representers)**: create a normalized representation of a solution (optional)
15
16
-**[Analyzers](/docs/building/tooling/analyzers)**: automatically assess student submissions and provide mentor-style commentary. (optional)
16
17
17
-
Some tracks have (currently) implemented these pieces of tooling for contribution:
18
+
## Maintenance tooling
19
+
20
+
To help with track maintenance, one can also build:
18
21
19
-
-**[Test Generators](/docs/building/tooling/test-generators)**: create or update an exercise's tests and student's code interface. (optional)
22
+
-**[Test Generators](/docs/building/tooling/test-generators)**: auto generate/update an exercise's tests and student's code interface. (optional)
20
23
21
24
## Which tool to implement?
22
25
23
-
Of the three production tools, the test runner should be implemented first as it enables:
26
+
The production tools are more important than maintenance tools.
27
+
Of the three production tools, the Test Runner should be implemented first as it enables:
24
28
25
29
- Students to solve exercises using the [in-browser editor](/docs/using/solving-exercises/using-the-online-editor) ([no CLI needed](/docs/using/solving-exercises/working-locally)).
26
30
- The website to automatically verify if an iteration passes all the tests.
@@ -39,18 +43,21 @@ To get started building a Representer, check the [Creating a Representer from sc
39
43
Finally, after having implemented a Representer, the last tool to build is the Analyzer.
40
44
To get started building an Analyzer, check the [Creating an Analyzer from scratch](/docs/building/tooling/analyzers/creating-from-scratch) document.
41
45
42
-
To speed up adding new exercises, a Test Generator is very handy.
43
-
The first thing to implement is creating tests for new exercises from scratch.
44
-
This takes away writing boilerplate code and leaves the focus on designing the exercises.
45
-
Later in track development, the test generator may become capable of reproducing production-ready tests for updates.
46
-
There are many hints and guidelines collected in the [Test Generators](/docs/building/tooling/test-generators) document.
46
+
At this point, focus should probably shift back to adding more exercises.
47
+
To speed up adding new exercises, consider building a [Test Generator](/docs/building/tooling/test-generators).
47
48
48
49
## Implementation
49
50
50
-
The tooling is (generally) written in the track's language, but you're completely free to use whatever language (or combination of languages) you prefer.
51
+
Track tooling is (generally) written in the track's language, but you're completely free to use whatever language (or combination of languages) you prefer.
52
+
53
+
```exercism/caution
54
+
We recommend writing as much of the tooling in the track's language, which maintainers and contributors will be familiar with.
55
+
Introducing other languages means it will become harder to find people that can maintain or contribute to the track, so try to use as few languages as possible.
56
+
```
57
+
58
+
## Deployment
51
59
52
-
Each production tool is packaged and run as a [Docker container](/docs/building/tooling/docker).
60
+
Production tools are packaged and run as a [Docker container](/docs/building/tooling/docker).
53
61
Tooling images are deployed automatically using a [Docker workflow](https://github.com/exercism/generic-test-runner/blob/main/.github/workflows/docker.yml).
54
62
55
-
Tools for contribution should fit into a workflow common for the language of the track.
56
-
When using external packages, make sure these do not get packaged into the production Docker images or loaded in CI.
0 commit comments