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 #936

Merged
merged 35 commits into from
Feb 5, 2021
Merged

[v3] Prepare for v3 #936

merged 35 commits into from
Feb 5, 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

ErikSchierboom and others added 30 commits January 29, 2021 14:48
* [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]>
Haskell has no methods, so another example is used.
Expand on how to deal with ambiguity between the two versions of CIS 194
available online. Expand on how to deal with concepts outside of CIS 194.

Some copy-paste bugs are fixed also.
This merges the existing [v2 track's directory structure][v2] with
[v3 track's directory structure][v3] as outlined in the v3 repository.

In particular, the layout of multiple example solutions is preserved
until Haskell track contributors come to another conclusion than the
current. This discussion is extracted into exercism#893.

The ordering of the files in the ASCII drawing is incidentally made so
that the track-specific files are listed first.

[v2]: https://github.com/exercism/haskell#directory-structure
[v3]: https://github.com/exercism/v3/blob/master/docs/maintainers/generic-how-to-implement-a-concept-exercise.md
[Docs] Add reference to required reading in implementing guide
[Docs] Add reference to Concept Exercise Anatomy video
* First version of cli.md

* finish cli.md

* start with debug.md

* fix markdown

* finish debug.md

* Refine cli.md
[Docs] Cross-reference concept exercise file information
I was just reading and saw this typo

Matches other languages' docs and the directory in this repo.
[Docs] Add description of concept documents

Co-authored-by: Jeremy Walker <[email protected]>
* Rename example files to exemplar

See exercism/docs#23

* [Docs] Correct .meta/example references to .meta/exemplar

* [Docs] Use exemplar instead of example

* [Docs] Update example name in file listings

* [Julia] Convert to exemplar.jl

* [elm] Rename .meta/Cook.elm to .meta/Examplar.elm

* [elm] Rename .meta/Examplar.elm .meta/Exemplar.elm

Co-authored-by: Matthieu Pizenberg <[email protected]>
Copy link
Contributor

@sshine sshine left a comment

Choose a reason for hiding this comment

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

Here is a summary for my own understanding of what appears to happen in this PR:

Changes to the CI scripts

Changes to the documentation shown to users

  • New documents: cli.md, debug.md
  • It is unclear if/how these two files merge with the current documentation shown to users. Current documentation shown to users is more complete.

Additions to the documentation shown to contributors

  • "How to implement a Haskell concept exercise": Consider how much of this information should be put in the current README, and how much should be linked between the two documents.

Why does CI fail in this PR at the time of review?

  • "Check track configuration" fails at the step of "Fetching the repository", but I can't find that string anywhere:
  /usr/bin/git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin +refs/heads/master*:refs/remotes/origin/master* +refs/tags/master*:refs/tags/master*
  Error: The process '/usr/bin/git' failed with exit code 1
  • "Check exercises (lts-from-exercises)" fails with:
ls: cannot access 'exercises/*/stack.yaml': No such file or directory
Error: Must provide filename

This appears to trigger a bug on .github/workflows/tests.yml line 101 where

            resolver=$(yq read "$(ls -1 exercises/*/stack.yaml | head -1)" resolver)

no longer activates glob patterns in "$(ls ...)"

What must happen before this PR is merged?

I will leave this as an open question.

reference/implementing-a-concept-exercise.md Outdated Show resolved Hide resolved
reference/implementing-a-concept-exercise.md Outdated Show resolved Hide resolved
config.json Show resolved Hide resolved
reference/implementing-a-concept-exercise.md Outdated Show resolved Hide resolved
└── .meta
├── config.json
└── design.md
```
Copy link
Contributor

Choose a reason for hiding this comment

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

This directory structure describes the exercises/concept/ sub-directory of which there currently aren't any examples.

The directory exercises/practice/ under this PR has the directory structure presently described in the README.

These should be merged and put in one place.

Copy link
Member Author

Choose a reason for hiding this comment

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

Absolutely. I'll leave this to you (the track maintainers) to fix, as you best know the structure.

Copy link
Contributor

Choose a reason for hiding this comment

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

I've made a preliminary fix in d6ceb1c.

reference/implementing-a-concept-exercise.md Outdated Show resolved Hide resolved
@ErikSchierboom
Copy link
Member Author

bin/fetch-configlet changed. Not sure if/how bin/fetch-configlet and .github/workflows/configlet.yml play together. The new one seems to share characteristics of https://github.com/exercism/github-actions/blob/main/configlet-ci/fetch-configlet

They do share characteristics, but as we know which platform the GitHub Actions script runs on, we could simplify things a bit there.

"How to implement a Haskell concept exercise": Consider how much of this information should be put in the current README, and how much should be linked between the two documents.

I'll leave this for the Haskell maintainers to decide :)

New documents: cli.md, debug.md
It is unclear if/how these two files merge with the current documentation shown to users. Current documentation shown to > users is more complete.

We've not completely finalized this spec at the moment. You can ignore these documents for now.

/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin >+refs/heads/master*:refs/remotes/origin/master* +refs/tags/master*:refs/tags/master*
Error: The process '/usr/bin/git' failed with exit code 1

It looks like it is pointing to master, but we've changed all the default branches to be named main instead.

What must happen before this PR is merged?

This PR is preferrable merged as soon as possible, as this will allow the track to be tested on our staging website. The idea is that tracks then do follow-up PRs to fix any open issues.

Before this commit, it appears that this document was a mixture between
a generic template and my initial writings about how we might go about
creating a framework for implementing concept exercises, i.e., not an
actual description of any agreed-upon approach to writing concept
exercises on the Haskell track.

Removes references to CIS 194.

Removes links to generic documents that don't seem useful.

Particularly: Preserve YouTube link of @iHiD talking. :)
This commit mentions that there are now two types of exercises.

This section contains two broken links:

- The "Unimplemented exercises" tool that we link to has been repurposed
  into testing whether a track is in compliance with Exercism v3. That
  means we no longer have an online cross-reference tool to get a list
  of unimplemented exercises.

  This link is replaced by a statement to manually cross-reference.

  This is not ideal, but it is possible.

- "documentation on porting an exercise" now gives a 404.

  This link is just removed.
Copy link
Member Author

@ErikSchierboom ErikSchierboom left a comment

Choose a reason for hiding this comment

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

We are now merging these PRs automatically so that we can continue to script further bulk-PRs to help you. For many tracks this will break CI, but we consider this a reasonable tradeoff as all Exercism tracks are in a transitionary period between now and the launch of v3.

@iHiD iHiD merged commit 1cbf639 into exercism:main Feb 5, 2021
@ErikSchierboom ErikSchierboom added the x:size/tiny Tiny amount of work label Oct 27, 2021
petertseng pushed a commit that referenced this pull request Aug 14, 2022
Should have been done with 2ef2c03,
which was a part of #936

This commit is part of #1083
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.

5 participants