| Crates.io | gh_autograder_fetcher |
| lib.rs | gh_autograder_fetcher |
| version | 0.1.2 |
| created_at | 2025-12-12 21:22:31.480053+00 |
| updated_at | 2025-12-12 21:43:08.962523+00 |
| description | A command-line tool with an interactive TUI for fetching and exporting GitHub Classroom autograder results to CSV format. |
| homepage | |
| repository | https://github.com/trgardos/gh_autograder_fetcher |
| max_upload_size | |
| id | 1982159 |
| size | 191,749 |
Vibe Coded with Claude Code
A command-line tool with an interactive TUI for fetching and exporting GitHub Classroom autograder results to CSV format.
read:org (for accessing GitHub Classroom classrooms)repo (for accessing student repositories and Actions data)Install via Cargo:
cargo install gh_autograder_fetcher
Or clone this repository and build manually:
git clone <repository-url>
cd gh_autograder_fetcher
.env file with your GitHub token:cp .env.example .env
# Edit .env and add your GitHub token
cargo build --release
If you installed via Cargo, you can run the application with:
gh_autograder_fetcher
Or build and run the application:
cargo run --release
Or run the compiled binary:
./target/release/gh_autograder_fetcher
The TUI interface guides you through the following steps:
YYYY-MM-DD HH:MM (UTC)↑/↓: Navigate through listsEnter: Select/ConfirmEsc: Go back to previous screenTab: Switch between input fields (on deadline entry screen)q: Quit the applicationThe exported CSV file includes:
Fixed Columns:
student_username: GitHub username of the studentstudent_repo_url: URL to the student's assignment repositoryworkflow_run_timestamp: Timestamp of the autograder workflow runDynamic Test Columns: One column for each test in the assignment, showing points earned
Summary Columns:
total_points_awarded: Total points earned by the studenttotal_points_available: Maximum possible pointspercentage: Score as a percentagestudent_username,student_repo_url,workflow_run_timestamp,test_clippy_passes,test_rustfmt_passes,q1::tests::test_series_creation,total_points_awarded,total_points_available,percentage
student1,https://github.com/cdsds210/assignment1-student1,2025-01-15T10:30:00Z,2,2,1,5,10,50.00
student2,https://github.com/cdsds210/assignment1-student2,2025-01-15T11:45:00Z,2,2,1,5,10,50.00
When using late grading mode, the CSV file includes:
Fixed Columns:
student_username: GitHub username of the studentstudent_repo_url: URL to the student's assignment repositoryon_time_timestamp: Timestamp of the first workflow run after on-time deadlinelate_timestamp: Timestamp of the first workflow run after late deadlineDynamic Test Columns: One column for each test, showing points from the on-time submission
Summary Columns:
total_points_available: Maximum possible pointson_time_points: Points earned from on-time submissionlate_points: Points earned from late submissionfinal_points: Calculated final score with penalty appliedfinal_percentage: Final score as a percentageThe final score is calculated using the formula:
final_points = on_time_points + max(0, (late_points - on_time_points) × (1 - penalty))
This means:
Example: With a 20% penalty (80% credit for late improvements):
student_username,student_repo_url,on_time_timestamp,late_timestamp,test_clippy_passes,test_rustfmt_passes,q1::tests::test_series_creation,total_points_available,on_time_points,late_points,final_points,final_percentage
student1,https://github.com/cdsds210/assignment1-student1,2025-01-15T10:30:00Z,2025-01-20T08:15:00Z,2,2,1,10,5,8,7.4,74.00
student2,https://github.com/cdsds210/assignment1-student2,2025-01-15T11:45:00Z,2025-01-20T09:30:00Z,2,0,1,10,3,7,6.2,62.00
This tool expects your GitHub Classroom assignments to use the standard autograding workflow with:
.github/workflows/classroom.ymlrun-autograding-testsclassroom-resources/autograding-command-grader@v1idname fieldwith.test-name and with.max-score parametersExample workflow step:
- name: "test_clippy_passes"
id: "test-clippy-passes"
uses: "classroom-resources/autograding-command-grader@v1"
with:
test-name: "test_clippy_passes"
command: "cargo test test_clippy_passes"
timeout: 30
max-score: 2
read:org scope.github/workflows/classroom.ymlrepo scopecargo test
src/
├── main.rs # Application entry point
├── config.rs # Configuration loading
├── api/
│ ├── classroom.rs # GitHub Classroom API client
│ └── github.rs # GitHub API client
├── models/
│ └── mod.rs # Data models
├── parser/
│ └── mod.rs # Workflow YAML parser
├── fetcher.rs # Core fetching logic
├── export.rs # CSV export functionality
└── ui/
├── app.rs # TUI application logic
├── render.rs # UI rendering
└── state.rs # Application state
MIT
Contributions are welcome! Please feel free to submit a Pull Request.