Skip to content

Commit 20a2051

Browse files
Cleanup tooling docs
1 parent 46b3043 commit 20a2051

File tree

2 files changed

+61
-31
lines changed

2 files changed

+61
-31
lines changed

building/tooling/README.md

+36-13
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,50 @@
11
# Track Tooling
22

3-
Each track has various pieces of tooling that run in production.
4-
Each provides a key function to the learning experience of that language.
3+
There are two types of track tooling:
4+
5+
- Production: provide a key function to the learning experience of that language
6+
- Maintenance: help with track maintenance
57

68
Tooling is (generally) written in the language of the specific track, and is built and maintained by maintainers.
79

8-
All tooling is deployed using the same Docker workflow.
10+
## Production tooling
11+
12+
These tools run on Exercism's production servers.
13+
14+
### Track-specific production tooling
15+
16+
There are three pieces of track-specific production tooling:
17+
18+
- **[Test Runners](/docs/building/tooling/test-runners)** (essential)
19+
- **[Representers](/docs/building/tooling/representers)** (optional)
20+
- **[Analyzers](/docs/building/tooling/analyzers)** (optional)
921

10-
There are (currently) three pieces of track-specific tooling:
22+
### General production tooling
1123

12-
- **[Test Runners](/docs/building/tooling/test-runners)**
13-
- **[Representers](/docs/building/tooling/representers)**
14-
- **[Analyzers](/docs/building/tooling/analyzers)**
24+
There are two pieces of general production tooling that can be configured for your track:
1525

16-
## General tooling
26+
- **[Lines of Code Counter](/docs/building/tooling/lines-of-code-counter)** (optional)
27+
- **[Snippet Extractor](/docs/building/tooling/snippet-extractor)** (optional)
1728

18-
There is also general tooling that can be configured for your track:
29+
### Deployment
1930

20-
- **[Lines of Code Counter](/docs/building/tooling/lines-of-code-counter)**
21-
- **[Snippet Extractor](/docs/building/tooling/snippet-extractor)**
31+
Production tools are built as Docker images.
32+
They are auto-deployed to Exercism's production servers using CI workflows.
2233

23-
## Tooling for contribution
34+
## Maintenance tooling
2435

25-
Tracks may also provide tooling for contribution:
36+
Maintenance tooling is designed to help with maintaining the track.
37+
They usually run locally (on the maintainer/contributor's machine) and sometimes in CI, but never in production.
38+
39+
Here are some examples of maintenance tooling:
2640

2741
- **[Test Generators](/docs/building/tooling/test-generators)**
42+
43+
## Implementation
44+
45+
Track tooling is usually (mostly) written in the track's language.
46+
47+
```exercism/caution
48+
While you're free to use additional languages, each additional language will make it harder to find people that can maintain or contribute to the track.
49+
We recommend using the track's language where possible, only using additional languages when it cannot be avoided.
50+
```
+25-18
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
11
# Implement tooling
22

3-
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).
64

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
1011

1112
There are (currently) three pieces of tooling for production:
1213

1314
- **[Test Runners](/docs/building/tooling/test-runners)**: runs an exercise's tests against a student's code. (required)
1415
- **[Representers](/docs/building/tooling/representers)**: create a normalized representation of a solution (optional)
1516
- **[Analyzers](/docs/building/tooling/analyzers)**: automatically assess student submissions and provide mentor-style commentary. (optional)
1617

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:
1821

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)
2023

2124
## Which tool to implement?
2225

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:
2428

2529
- 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)).
2630
- 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
3943
Finally, after having implemented a Representer, the last tool to build is the Analyzer.
4044
To get started building an Analyzer, check the [Creating an Analyzer from scratch](/docs/building/tooling/analyzers/creating-from-scratch) document.
4145

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).
4748

4849
## Implementation
4950

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 usually (mostly) written in the track's language.
52+
53+
```exercism/caution
54+
While you're free to use additional languages, each additional language will make it harder to find people that can maintain or contribute to the track.
55+
We recommend using the track's language where possible, only using additional languages when it cannot be avoided.
56+
```
57+
58+
## Deployment
5159

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).
5361
Tooling images are deployed automatically using a [Docker workflow](https://github.com/exercism/generic-test-runner/blob/main/.github/workflows/docker.yml).
5462

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.
63+
Maintenance tools are _not_ deployed.

0 commit comments

Comments
 (0)