Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
🚸 learn: Create initial levy CLI (#336)
Create initial `levy` CLI for local development and preview of learn platform question. `learnevy` currently has following sub-commands: - `export` answerkey - `verify` - `seal` - `unseal` The target structure of Evy learn materials is (inspired by https://khanacademy.org): Course -> Unit -> Exercise -> Question We directly map this hierarchy to the file system: course-1/ unit-1/ exercise-1/ questions/ question-1.md question-2.md ... Questions are encoded in markdown files. Each question has a YAML front matter section, e.g.: type: question difficulty: easy # easy, medium, hard answer-type: single-choice # single-choice, multiple-choice, free-text, multiple-free-texts, program answer: c This merges the following commits: * build-tools: Move markdown utilities into shared md package * learn: Create initial levy CLI * learn: Add HTML output .golangci.yaml | 5 + .prettierignore | 1 + Makefile | 10 +- build-tools/gengodoc.awk | 2 +- build-tools/md/main.go | 9 +- build-tools/site-gen/main.go | 2 +- learn/.golangci.yaml | 1 + learn/README.md | 55 +++ learn/cmd/levy/answerkey-sample.json.js | 22 + learn/cmd/levy/main.go | 227 ++++++++++ learn/go.mod | 20 + learn/go.sum | 20 + learn/pkg/question/answer.go | 195 ++++++++ learn/pkg/question/encrypt.go | 231 ++++++++++ learn/pkg/question/encrypt_test.go | 40 ++ learn/pkg/question/frontmatter.go | 142 ++++++ learn/pkg/question/markdown.go | 82 ++++ learn/pkg/question/question.go | 424 ++++++++++++++++++ learn/pkg/question/question_test.go | 275 ++++++++++++ learn/pkg/question/renderer.go | 281 ++++++++++++ .../course1/unit1/err-exercise1/questions/dot | 1 + .../questions/err-false-negative.md | 27 ++ .../questions/err-false-positive.md | 27 ++ .../unit1/err-exercise1/questions/err-img1.md | 21 + .../unit1/err-exercise1/questions/err-img2.md | 33 ++ .../unit1/err-exercise1/questions/err-img3.md | 33 ++ .../unit1/err-exercise1/questions/err-img4.md | 33 ++ .../unit1/err-exercise1/questions/err-img5.md | 33 ++ .../unit1/err-exercise1/questions/err-img6.md | 21 + .../unit1/err-exercise1/questions/err-img7.md | 21 + .../questions/err-inconsistent1.md | 20 + .../questions/err-inconsistent2.md | 19 + .../err-exercise1/questions/err-link1.md | 17 + .../err-exercise1/questions/err-link2.md | 17 + .../err-exercise1/questions/err-link3.md | 17 + .../err-exercise1/questions/err-link4.md | 17 + .../err-exercise1/questions/err-link5.md | 17 + .../err-exercise1/questions/err-link6.md | 17 + .../unit1/err-exercise1/questions/print | 1 + .../course1/unit1/exercise1/exercise1.md | 10 + .../unit1/exercise1/questions/dot/dot.a.evy | 3 + .../exercise1/questions/dot/dot.a.evy.svg | 4 + .../unit1/exercise1/questions/dot/dot.b.evy | 3 + .../exercise1/questions/dot/dot.b.evy.svg | 4 + .../unit1/exercise1/questions/dot/dot.c.evy | 3 + .../exercise1/questions/dot/dot.c.evy.svg | 4 + .../unit1/exercise1/questions/dot/dot.d.evy | 3 + .../exercise1/questions/dot/dot.d.evy.svg | 4 + .../exercise1/questions/print/print.a.evy | 1 + .../exercise1/questions/print/print.b.evy | 1 + .../exercise1/questions/print/print.c.evy | 1 + .../exercise1/questions/print/print.d.evy | 1 + .../exercise1/questions/question-img1.md | 21 + .../exercise1/questions/question-img2.md | 33 ++ .../exercise1/questions/question-link1.md | 19 + .../exercise1/questions/question-link2.md | 17 + .../exercise1/questions/question-link3.md | 17 + .../exercise1/questions/question-link4.md | 17 + .../exercise1/questions/question1-sealed.md | 27 ++ .../unit1/exercise1/questions/question1.md | 19 + .../unit1/exercise1/questions/question2.md | 27 ++ .../golden/answerkey-question-img1.json | 11 + .../golden/answerkey-question-img2.json | 11 + .../golden/answerkey-question-link1.json | 11 + .../golden/answerkey-question-link2.json | 11 + .../golden/answerkey-question-link3.json | 11 + .../golden/answerkey-question-link4.json | 11 + .../golden/answerkey-question1-sealed.json | 11 + .../testdata/golden/answerkey-question1.json | 11 + .../testdata/golden/answerkey-question2.json | 11 + .../testdata/golden/form-question-img1.html | 42 ++ .../testdata/golden/form-question-img2.html | 42 ++ .../testdata/golden/form-question-link1.html | 43 ++ .../testdata/golden/form-question-link2.html | 42 ++ .../testdata/golden/form-question-link3.html | 32 ++ .../testdata/golden/form-question-link4.html | 32 ++ .../testdata/golden/form-question1.html | 24 + .../testdata/golden/form-question2.html | 32 ++ .../testdata/golden/question-img1.html | 95 ++++ .../testdata/golden/question-img2.html | 95 ++++ .../testdata/golden/question-link1.html | 96 ++++ .../testdata/golden/question-link2.html | 95 ++++ .../testdata/golden/question-link3.html | 85 ++++ .../testdata/golden/question-link4.html | 85 ++++ .../question/testdata/golden/question1.html | 77 ++++ .../question/testdata/golden/question2.html | 85 ++++ main.go | 2 +- pkg/cli/runtime.go | 7 + build-tools/md/walkmd.go => pkg/md/md.go | 20 +- 89 files changed, 3789 insertions(+), 16 deletions(-) Pull-request: #336
- Loading branch information