Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v3] Prepare for v3 #1085

Merged
merged 88 commits into from
Jan 29, 2021
Merged

[v3] Prepare for v3 #1085

merged 88 commits into from
Jan 29, 2021

Conversation

ErikSchierboom
Copy link
Member

This issue is part of the migration to v3. You can read full details about the various changes here.

This PR prepares the track for Exercism v3, which will be different in a number of ways from Exercism v2.

As having this PR merged is essential to prepare this track for Exercism v3, we'll automatically merge this PR one week after it was opened (if it hasn't been merged already).

In this PR, the following changes are made:

v2 file migration

  1. Move the existing exercises in the exercises directory to the exercises/practice directory

v3 file migration

  1. Copy the v3 languages/<slug>/concepts directory to the concepts directory
  2. Copy the v3 languages/<slug>/exercises/concept directory to the exercises/concept directory
  3. Copy the v3 languages/<slug>/reference directory to the reference directory
  4. Copy the v3 languages/<slug>/docs directory to the docs directory

Notes

Any commits modifying the aforementioned directories (or any of their files) are included in the PR, except for:

  • The _sidebar.md files are not migrated
  • The README.md file at the v3 track's root is not migrated.
  • The maintainers.md file is not migrated.

config.json migration

The config.json file is updated to conform to the v3 spec.

  1. Add a version property:
"version": 3
  1. Add online editor settings:
"online_editor": {
  "indent_style": "space",
  "indent_size": 2
}
  1. Rename the "exercises" property to "practice"

  2. Create an "exercises" property and move the "practice" property to this property:

"exercises": {
  "practice": [
    ...
  ]
}
  1. Remove the "core", "auto_approve", and "unlocked_by" properties from the practice exercises

  2. Add the "name" property to the practice exercises and pre-populate this with a titlelized version of the "slug" property

  3. Add the "prerequisites" property to the practice exercises and set it to an empty array

  4. Add an empty "concept" array property to the "exercises" property

"exercises": {
  "concept": [],
  "practice": [
    ...
  ]
}
  1. Move the "foregone" property to the "exercises" key:
"exercises": {
  ...
  "foregone": [...]
}
  1. Add a top-level "concepts" key, which is an array:
"concepts": []
  1. Add a top-level "tags" key, which is an array:
"tags": []
  1. Add a top-level "key_features" key, which is an array:
"key_features": []
  1. Add a top-level "status" key, which is an object containing properties with boolean values indicating if a v3 feature is implemented:
"status": {
  "concept_exercises": true,
  "test_runner": true,
  "representer": false,
  "analyzer": false
}
  1. Add a top-level "slug" key, which is a string containing the track's slug:
"slug": "csharp"
  1. Re-order the practice exercises using the following ordering:

    1. Core exercises, retaining their existing ordering
    2. Non-core exercises, ordered by the order of the core exercise that unlocks them, then by difficulty and then alphabetically.
    3. Bonus exercises, ordered by difficulty then alphabetically.
  2. Add the "status" key with a value of "deprecated" to practice exercises that have "deprecated" set to true. The deprecated field itself is removed:

{
  "slug": "octal",
  "name": "Octal",
  "uuid": "f29f9e56-c79b-4ae4-a0d0-29db78c677e4",
  "prerequisites": [],
  "difficulty": 0,
  "topics": ["integers"],
  "status": "deprecated"
}

Notes

  • Settings defined in the v3 config.json file will take precedence over their v2 config.json file's equivalent.

configlet

  1. Update the fetch-configlet and fetch-configlet.ps1 files to the latest version of configlet, which can work with v3 tracks.

Continuous integration

  1. Add a GitHub Actions workflow to verify the track using the configlet-CI GitHub Action, unless there already is a file named .github/workflows/configlet.md.

  2. Add a dependabot configuration to automatically submit PRs for any new versions of external workflows used in this track's GitHub Action workflows.

  3. Convert any Exercism GitHub Actions workflows being used to use main as their branch instead of master. See this issue.

Follow-up steps

We've created issues in this repo for the follow-up steps to get this track ready for v3.

Tracking

exercism/v3-launch#11

lewisclement and others added 30 commits January 29, 2021 15:55
Closes exercism#253

* Create parallel-letter-frequency.md

Initial list with concept level abstraction of common elements used for solving `parallel-letter-frequency`.

* Update with specific concurrency concepts separate

To-do: implement an example for each concurrency concept
Closes exercism#248

Approached a little different this time now that the core set of concepts start crystallizing. I've taken two reasonably different solutions and extracted applied language components. There's some overlap between some concepts (like `Ordering` and `conditionals`), but I think it's reasonable to touch such concepts in different concept-exercises.
Co-authored-by: Peter Goodspeed-Niklaus <[email protected]>
* extract conceps from leap

* Update languages/reference/exercise-concepts/leap.md

Co-Authored-By: Peter Goodspeed-Niklaus <[email protected]>

Co-authored-by: Peter Goodspeed-Niklaus <[email protected]>
* [Docs] Move implementing-a-concept-exercise.md to reference folder
* [Docs] Move reference documents to docs folder
* [Docs] Update to student-facing docs
* [Docs] Add new issue template

Co-Authored-By: Jeremy Walker <[email protected]>
Co-Authored-By: Victor Goff <[email protected]>
Co-authored-by: Sascha Mann <[email protected]>
* Port concept exercise numbers from C#

* Apply @efx's feedback
* Add implementing-a-concept-exercise.md

This implementation guide is based heavily on the C# and generic guide.
It should be considered only a core draft, and not a permanent answer.

* Add concept exercises README.md

* Check off concept list and implementation guide

* Add shell script for boilerplating concept exercises

The script has been reviewed with shellcheck and should be portable,
even without assuming the user has bash, but any old Unix shell.
Git Bash for Windows should support it as well.

It just simplifies some busywork, so it is convenient but non-essential.

* Improve links from concept exercise README

* Remove reference to currently unmerged exercise
* extract concepts from v2 exercise: macros

Closes exercism/v3#245

* require mutability concept; remove extraneous note on Hashmap<K, V>

* break out a more fine-grained list of concepts

* Update languages/reference/exercise-concepts/macros.md

Co-Authored-By: Eli Flanagan <[email protected]>

Co-authored-by: Eli Flanagan <[email protected]>
* extract concepts from v2 exercise: poker

Closes exercism/v3#246

* apply suggestions from PR review
* concepts.csv: Remove recursion, composition

Recursion is "out of scope" for Rust as tail recursive elimination
is not in the language spec.

Composition is "out of scope" for Rust as it is good practice but
not meaningfully Rust-specific.

* Add out-of-scope.md

Inclusion of this document is intended to resolve many questions
that have been raised about what is and is not teachable, what
should and should not be taught, within the Rust track.

* reference/README.md: Remove recursion, composition

Removed for being out of scope of the Rust track.
* add enums concept exercise

closes exercism#830

* Update languages/exercises/concept/enums/src/lib.rs

Co-Authored-By: Peter Goodspeed-Niklaus <[email protected]>

* Update languages/exercises/concept/enums/tests/enums.rs

Co-Authored-By: Peter Goodspeed-Niklaus <[email protected]>

* Update languages/exercises/concept/enums/src/lib.rs

Co-Authored-By: Peter Goodspeed-Niklaus <[email protected]>

* invert the sense of enums concept exercise

* Update languages/exercises/concept/enums/.docs/after.md

Co-Authored-By: Peter Goodspeed-Niklaus <[email protected]>

* Update languages/exercises/concept/enums/.meta/design.md

Co-Authored-By: Peter Goodspeed-Niklaus <[email protected]>

* Update languages/exercises/concept/enums/.meta/design.md

Co-Authored-By: Peter Goodspeed-Niklaus <[email protected]>

* Update languages/exercises/concept/enums/.meta/design.md

Co-Authored-By: Peter Goodspeed-Niklaus <[email protected]>

* add description for other variant

Co-authored-by: Peter Goodspeed-Niklaus <[email protected]>
[Docs] Add reference to required reading in implementing guide
[Docs] Add reference to Concept Exercise Anatomy video
[Docs] Format using Prettier
[Docs] Cross-reference concept exercise file information
Test driven development is out of scope for the Rust track.
See
https://github.com/exercism/v3/blob/master/languages/reference/out-of-scope.md
for other examples.
[CI] Validate and format JSON
* Add first pass of entry api concept exercise

* Add newlines at end of files

* [CI] Format code

* Add PR feedback

* Put the problem statement first and make it more explicit

Co-authored-by: Peter Goodspeed-Niklaus <[email protected]>

* Change function name to be more descriptive

Co-authored-by: Peter Goodspeed-Niklaus <[email protected]>

* Add additional PR suggestions

* [CI] Format code

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Peter Goodspeed-Niklaus <[email protected]>
* Incorporate additional PR feedback

* [CI] Format code

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Copy link
Member

@coriolinus coriolinus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Didn't manually review all the steps outlined, but from a few spot checks, it looks like this did what the outline says it did.

Fixed it up so that CI still passes. Let's get this merged.

@coriolinus coriolinus merged commit 50aa0a1 into exercism:main Jan 29, 2021
@ErikSchierboom ErikSchierboom added the x:size/tiny Tiny amount of work label Oct 27, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
x:size/tiny Tiny amount of work
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants