{"id":19184616,"url":"https://github.com/gatoreducator/gatorgrade","last_synced_at":"2025-07-09T09:38:38.614Z","repository":{"id":38272995,"uuid":"474416658","full_name":"GatorEducator/gatorgrade","owner":"GatorEducator","description":":heavy_check_mark: Run a Suite of GatorGrader Checks","archived":false,"fork":false,"pushed_at":"2025-02-01T22:48:19.000Z","size":1906,"stargazers_count":14,"open_issues_count":42,"forks_count":13,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-17T09:00:32.920Z","etag":null,"topics":["autograding","grading","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GatorEducator.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-26T17:19:30.000Z","updated_at":"2025-02-01T22:48:21.000Z","dependencies_parsed_at":"2023-12-06T23:30:08.136Z","dependency_job_id":"4ae56dc9-10be-439d-b0ef-ffe23595fc20","html_url":"https://github.com/GatorEducator/gatorgrade","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/GatorEducator/gatorgrade","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GatorEducator%2Fgatorgrade","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GatorEducator%2Fgatorgrade/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GatorEducator%2Fgatorgrade/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GatorEducator%2Fgatorgrade/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GatorEducator","download_url":"https://codeload.github.com/GatorEducator/gatorgrade/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GatorEducator%2Fgatorgrade/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264432176,"owners_count":23607387,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["autograding","grading","python"],"created_at":"2024-11-09T11:07:40.421Z","updated_at":"2025-07-09T09:38:38.264Z","avatar_url":"https://github.com/GatorEducator.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GatorGrade: A Python Tool to Implement GatorGrader\n\nGatorGrade is a Python tool that executes GatorGrader, an automatic grading tool\nthat can be used to check assignments through user-created checks. GatorGrade is\nthe newer Python-based version of\n[GatorGradle](https://github.com/GatorEducator/gatorgradle/blob/master/README.md).\n\n## Installing GatorGrade\n\nGatorGrade requires Python 3.7 or later. To install GatorGrade, we recommend\nusing the [`pipx`](https://pypa.github.io/pipx/) Python application installer.\nOnce you have `pipx` installed, you can install GatorGrade by running\n`pipx install gatorgrade`.\n\n## Using GatorGrade\n\nTo use GatorGrade to run GatorGrader checks for an assignment, the assignment\nmust contain a `gatorgrade.yml` file that defines the GatorGrader checks.\nInstructors, for more information on configuring the `gatorgrade.yml` file, see\nthe [Configuring GatorGrader Checks](#configuring-gatorgrader-checks) section\nbelow.\n\nTo use GatorGrade to run GatorGrader checks, run the `gatorgrade` command within\nthe assignment. This command will produce output that shows the passing\n(:heavy_check_mark:) or failing status (:x:) of each GatorGrader check as well\nas the overall percentage of passing checks. The following is the output of\nrunning GatorGrade on the [GatorGrade Hello\nWorld](https://github.com/GatorEducator/gatorgrade-hello-world/tree/main)\nassignment.\n\n```console\nRunning set up commands...\nInstalling dependencies from lock file\n\nNo dependencies to install or update\nSetup complete!\nFinished!\n\n✔  Complete all TODOs\n✔  Call the say_hello function\n✔  Call the say_hello_color function\n✘  Complete all TODOs\n✘  Write at least 25 words in writing/reflection.md\n✔  Pass pylint\n✔  Have a total of 5 commits, 2 of which were created by you\n\n-~-  FAILURES  -~-\n\n✘  Complete all TODOs\n   → Found 3 fragment(s) in the reflection.md or the output\n✘  Write at least 25 words in writing/reflection.md\n   → Found 3 word(s) in total of file reflection.md\n\n        ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n        ┃ Passed 5/7 (71%) of checks for gatorgrade-hello-world! ┃\n        ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n```\n\n## Configuring GatorGrader Checks\n\nInstructors can configure GatorGrader checks for an assignment by creating a\n`gatorgrade.yml` file. In this file, you can configure GatorGrader checks to run\nwithin a file context (i.e. for a specific file; `MatchFileFragment` is an\nexample of a GatorGrader check that should be run within a file context) _or_ in\nthe global context (i.e. for the assignment in general; `CountCommits` is an\nexample of a GatorGrader check that should be run in the global context).\n\nTo configure GatorGrader checks to run within a file context, specify the path\nto the file as a key (or nested keys) before specifying the GatorGrader checks.\nFor each GatorGrader check, define a `description` to print in the\noutput, the name of the `check`, and any `options` specific to the GatorGrader check.\n\n```yml\n- src:\n    - hello_world.py:\n        - description: Complete all TODOs\n          check: MatchFileFragment\n          options:\n            fragment: TODO\n            count: 0\n        - description: Define a print statement\n          check: MatchFileFragment\n          options:\n            fragment: print(\n            count: 1\n```\n\nTo configure GatorGrader checks to run in the global context, specify the\nGatorGrader checks at the top level of the `gatorgrade.yml` file (i.e. not\nnested within any path).\n\n```yml\n- description: Have a total of 8 commits, 5 of which were created by you\n  check: CountCommits\n  options:\n    count: 8\n```\n\n### Using GatorGrade to Generate A Boilerplate `gatorgrade.yml` File\n\nFor convenience, instructors can use GatorGrade to generate a boilerplate\n`gatorgrade.yml` file that contains files or folders given to the GatorGrade command.\n\nTo generate a `gatorgrade.yml` file, run `gatorgrade generate \u003cTARGET_PATH_LIST\u003e`,\nwhere `\u003cTARGET_PATH_LIST\u003e` is a list of relative paths to files or folders you\nwant to include in the `gatorgrade.yml` file. These paths must correspond to\nexisting files or folders in the current directory. Any given folders will be\nexpanded to the files they contain. Please note that files and folders that\nstart with `__` or `.` and empty folders will be automatically ignored.\n\n## Contributing to GatorGrade\n\nIf you would like to contribute to GatorGrade, please refer to the [GatorGrade\nWiki](https://github.com/GatorEducator/gatorgrade/wiki/Contributing-Guidelines)\nfor contributing guidelines.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgatoreducator%2Fgatorgrade","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgatoreducator%2Fgatorgrade","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgatoreducator%2Fgatorgrade/lists"}