{"id":20082081,"url":"https://github.com/exercism/pyret","last_synced_at":"2026-03-05T12:32:52.871Z","repository":{"id":177733886,"uuid":"658083798","full_name":"exercism/pyret","owner":"exercism","description":"Exercism exercises in Pyret.","archived":false,"fork":false,"pushed_at":"2026-02-15T08:05:27.000Z","size":546,"stargazers_count":6,"open_issues_count":0,"forks_count":11,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-15T13:57:13.428Z","etag":null,"topics":["community-contributions-accepted","exercism-track","maintained-autonomous","pyret"],"latest_commit_sha":null,"homepage":"https://exercism.org/tracks/pyret","language":"Pyret","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/exercism.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["exercism"],"custom":["https://exercism.org/donate"]}},"created_at":"2023-06-24T18:02:04.000Z","updated_at":"2026-02-15T08:05:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"63e385ec-7327-40b4-9bdb-fdd7fbfc0af2","html_url":"https://github.com/exercism/pyret","commit_stats":{"total_commits":195,"total_committers":11,"mean_commits":"17.727272727272727","dds":"0.18974358974358974","last_synced_commit":"36ae6443d2bedbc26ad3c91ef731246337184b68"},"previous_names":["exercism/pyret"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/exercism/pyret","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fpyret","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fpyret/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fpyret/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fpyret/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/exercism","download_url":"https://codeload.github.com/exercism/pyret/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fpyret/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30124489,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T11:11:57.947Z","status":"ssl_error","status_checked_at":"2026-03-05T11:11:29.001Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["community-contributions-accepted","exercism-track","maintained-autonomous","pyret"],"created_at":"2024-11-13T15:41:45.187Z","updated_at":"2026-03-05T12:32:52.829Z","avatar_url":"https://github.com/exercism.png","language":"Pyret","funding_links":["https://github.com/sponsors/exercism","https://exercism.org/donate"],"categories":[],"sub_categories":[],"readme":"# Exercism Pyret Track\n\n[![Configlet](https://github.com/exercism/pyret/actions/workflows/configlet.yml/badge.svg)](https://github.com/exercism/pyret/actions/workflows/configlet.yml) [![.github/workflows/test.yml](https://github.com/exercism/pyret/actions/workflows/test.yml/badge.svg)](https://github.com/exercism/pyret/actions/workflows/test.yml)\n\nExercism exercises in Pyret.\n\n## Setup\n\nIf you're solving Exercism exercises offline, you'll need a recent copy of [pyret-npm](https://www.npmjs.com/package/pyret-npm) (0.0.27+).\nCurrently, pyret-npm works on Linux and MacOS platforms although Windows users can run it via the [WSL](https://learn.microsoft.com/en-us/windows/wsl/).\nHowever, you can also use [Pyret's online IDE](https://code.pyret.org/).\nIn that case, you'll need to switch from the IDE's default `essentials2021` namespace to the older `essentials2020` supported by pyret-npm.\n\n## Support\n\nFor support with Pyret in Exercism, please visit [the Pyret subcategory](https://forum.exercism.org/c/programming/pyret/265) on the official [Exercism forum](https://forum.exercism.org).\n\n## Coding Style\n\nPlease consult [the official Pyret style guide](https://pyret.org/docs/latest/Pyret_Style_Guide.html).\n\n## Testing\n\nTo test the exercises, run `./bin/verify-exercises` on a Linux or MacOS platform.\nThis command will iterate over all exercises and check to see if their exemplar/example implementation passes all the tests.\n\n## Contributing Guide\n\nPlease see [Exercism's contributing guide](https://exercism.org/docs/building).\n\nAt the moment, there's not a generator for Pyret exercises.\n\nHere's the basic template for an `exercise-slug-test`.arr.\nEach `check` block corresponds to a single test case, and the string label is reported to the student.\nEach `check` block is wrapped inside a no-parameter function which is then stored inside the `run` field of a `test` value of the `TestRun` datatype.\nThis `test` value also contains an `active` field which indicates whether a test should be run (`true`) or not (`false`).\nAll `test` values go inside a list that Pyret iterates over at runtime, executing the functions within each `test` value marked as active.\n\nA contributor is responsible for copying this template, adding the appropriate functions and `check` blocks, and populating the list at the bottom.\n\n```pyret\n\nuse context essentials2020\n\ninclude file(\"exercise-slug.arr\")\n\n#|\n  When working offline, all tests except the first one are skipped by default.\n  Once you get the first test running, unskip the next one until all tests pass locally.\n  Check the block comment below for further details.\n|#\n\nfun foo-returns-1():\n  check \"foo returns 1\":\n    foo() is 1\n  end\nend\n\nfun bar-returns-2():\n  check \"bar returns 2\":\n    bar() is 2\n  end\nend\n\n#|\n  Code to run each test. Each line corresponds to a test above and whether it should be run.\n  To mark a test to be run, replace `false` with `true` on that same line after the comma.\n  test(test-a, true) will be run. test(test-a, false) will be skipped.\n|#\n\ndata TestRun: test(run, active) end\n\n[list: \n  test(foo-returns-1, true),\n  test(bar-returns-2, false),\n].each(lam(t): when t.active: t.run() end end)\n```\n\n## Track linting\n\n[`configlet`](https://exercism.org/docs/building/configlet) is an Exercism-wide tool for working with tracks. You can download it by running:\n\n```shell\n./bin/fetch-configlet\n```\n\nRun its [`lint` command](https://exercism.org/docs/building/configlet/lint) to verify if all exercises have all the necessary files and if config files are correct:\n\n```shell\n$ ./bin/configlet lint\n\nThe lint command is under development.\nPlease re-run this command regularly to see if your track passes the latest linting rules.\n\nBasic linting finished successfully:\n- config.json exists and is valid JSON\n- config.json has these valid fields:\n    language, slug, active, blurb, version, status, online_editor, key_features, tags\n- Every concept has the required .md files\n- Every concept has a valid links.json file\n- Every concept has a valid .meta/config.json file\n- Every concept exercise has the required .md files\n- Every concept exercise has a valid .meta/config.json file\n- Every practice exercise has the required .md files\n- Every practice exercise has a valid .meta/config.json file\n- Required track docs are present\n- Required shared exercise docs are present\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Fpyret","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexercism%2Fpyret","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Fpyret/lists"}