Modern Python CLI for automating GitHub Classroom assignment management
Project description
Classroom Pilot
A comprehensive Python CLI tool for automating GitHub Classroom assignment management with modular workflow orchestration, repository operations, and secret management.
๐ฏ Overview
Classroom Pilot provides instructors with a powerful, modern CLI to automate GitHub Classroom workflows:
- ๐ Modern Python CLI - Type-safe, intuitive commands with rich help and output
- ๐ฆ PyPI Package - Simple installation:
pip install classroom-pilot - ๐ง Modular Architecture - Organized command structure for different workflow areas
- ๐ Smart Repository Discovery - Automated filtering and batch operations
- ๐ Secret Management - Secure distribution of tokens and credentials
- โ๏ธ Configuration-Driven - Flexible, reusable assignment setups
- ๐ก๏ธ Enterprise Support - Custom GitHub hosts and internal Git systems
- ๐ฏ Instructor-Focused - Excludes instructor repos from batch operations automatically
- ๐ก๏ธ Robust Error Handling - Centralized GitHub API error management with retry logic
- ๐ Fault Tolerance - Automatic retry mechanisms with exponential backoff
- ๐ Comprehensive Testing - 70+ tests with 100% pass rate and extensive coverage
- ๐ Production Ready - Professional documentation and type-safe implementations
๐ฆ Installation
Quick Install (Recommended)
# Install from PyPI
pip install classroom-pilot
# Verify installation
classroom-pilot --help
Development Installation
# Clone repository
git clone https://github.com/hugo-valle/classroom-pilot.git
cd classroom-pilot
# Install with Poetry
poetry install
poetry shell
# Or install in development mode
pip install -e .
Requirements
- Python 3.10+ (3.11+ recommended)
- Git for repository operations
- GitHub CLI (optional, for enhanced authentication)
๏ฟฝ๏ธ Enterprise Features
Centralized Error Handling
Classroom Pilot includes a comprehensive error handling system for reliable GitHub operations:
- ๐ Automatic Retry Logic - Intelligent retry with exponential backoff for transient failures
- โฑ๏ธ Rate Limit Management - Automatic handling of GitHub API rate limits
- ๐ ๏ธ Fallback Mechanisms - CLI fallback when GitHub API is unavailable
- ๐ Detailed Error Context - Comprehensive error reporting with context and suggestions
- ๐๏ธ Resilient Operations - Fault-tolerant batch operations with individual error isolation
# Example: Automatic retry with error context
from classroom_pilot.utils.github_exceptions import github_api_retry
@github_api_retry(max_attempts=3, base_delay=1.0)
def discover_repositories():
# Automatic retry for GitHub API failures
# Handles rate limits, network issues, and transient errors
pass
Enhanced CLI Architecture
- ๐ Modular Commands - Organized subcommand structure (
assignments,repos,secrets,automation) - ๐ Legacy Compatibility - Backward compatibility with deprecation warnings
- ๐ฏ Rich Output - Beautiful terminal output with progress indicators
- โ๏ธ Flexible Configuration - Multiple configuration sources with precedence handling
- ๐ Comprehensive Help - Context-aware help system with examples
Production Quality
- ๐งช Comprehensive Testing - 70+ tests covering all functionality with 100% pass rate
- ๐ Professional Documentation - Complete docstrings following Python standards
- ๐๏ธ Type Safety - Full type hints and mypy compatibility
- ๐ Security First - Secure credential handling and validation
- ๐ฆ CI/CD Integration - Automated testing and publishing pipeline
๏ฟฝ๐ Quick Start
1. Basic Configuration
Create an assignment configuration file:
# Create assignment.conf
cat > assignment.conf << 'EOF'
# GitHub Classroom Configuration
CLASSROOM_URL="https://classroom.github.com/classrooms/123/assignments/456"
TEMPLATE_REPO_URL="https://github.com/instructor/assignment-template"
ASSIGNMENT_FILE="homework.py"
# Authentication
GITHUB_TOKEN_FILE="github_token.txt"
# Optional: Secrets to distribute
SECRETS_LIST="API_KEY,DATABASE_URL"
EOF
2. Command Structure
Classroom Pilot uses a modular command structure:
# Main command groups
classroom-pilot assignments # Assignment setup and orchestration
classroom-pilot repos # Repository operations and collaboration
classroom-pilot secrets # Secret and token management
classroom-pilot automation # Scheduling and batch processing
# Legacy commands (for backward compatibility)
classroom-pilot setup # Interactive assignment setup
classroom-pilot run # Complete workflow execution
3. Common Workflows
# Setup a new assignment (interactive)
classroom-pilot assignments setup
# Discover student repositories
classroom-pilot repos fetch --config assignment.conf
# Add secrets to all student repos
classroom-pilot secrets add --config assignment.conf
# Run orchestrated workflow
classroom-pilot assignments orchestrate --config assignment.conf
# Check what would happen (dry-run)
classroom-pilot --dry-run assignments orchestrate
๐ง Command Reference
Assignment Management
# Setup new assignment configuration
classroom-pilot assignments setup
# Orchestrate complete assignment workflow
classroom-pilot assignments orchestrate [--config FILE] [--dry-run]
# Manage assignment templates
classroom-pilot assignments manage [--config FILE]
Repository Operations
# Fetch student repositories
classroom-pilot repos fetch [--config FILE]
# Manage collaborators
classroom-pilot repos collaborator add|remove [--config FILE]
Secret Management
# Add secrets to repositories
classroom-pilot secrets add [--config FILE] [--secrets LIST]
# Remove secrets from repositories
classroom-pilot secrets remove [--config FILE] [--secrets LIST]
# List existing secrets
classroom-pilot secrets list [--config FILE]
Automation & Scheduling
# Setup cron jobs for automation
classroom-pilot automation scheduler setup [--config FILE]
# Run batch operations
classroom-pilot automation batch [--config FILE]
Global Options
| Option | Description | Example |
|---|---|---|
--dry-run |
Preview actions without executing | classroom-pilot --dry-run assignments orchestrate |
--verbose |
Enable detailed logging | classroom-pilot --verbose repos fetch |
--config FILE |
Use custom configuration file | classroom-pilot --config my.conf assignments setup |
--help |
Show help for any command | classroom-pilot assignments --help |
โ๏ธ Configuration
Assignment Configuration File
The assignment.conf file contains all settings for your assignment:
# Required: GitHub Classroom assignment URL
CLASSROOM_URL="https://classroom.github.com/classrooms/123/assignments/456"
# Required: Template repository URL
TEMPLATE_REPO_URL="https://github.com/instructor/assignment-template"
# Required: Assignment file to validate
ASSIGNMENT_FILE="homework.py"
# Optional: GitHub Enterprise support
GITHUB_HOSTS="github.enterprise.com,git.company.internal"
# Optional: Authentication
# Prefer centralized token manager (~/.config/classroom-pilot/token_config.json) or set GITHUB_TOKEN
# Example (CI): export GITHUB_TOKEN="ghp_your_token_here"
# Optional: Secrets management
SECRETS_LIST="API_KEY,DATABASE_URL,SECRET_TOKEN"
# Optional: Repository filtering
EXCLUDE_REPOS="template,example,demo"
INSTRUCTOR_REPOS="instructor-solution"
Environment Variables
Override configuration with environment variables:
# Custom GitHub hosts
export GITHUB_HOSTS="git.company.internal,github.enterprise.com"
# GitHub token
export GITHUB_TOKEN="ghp_your_token_here"
# Custom assignment file
export ASSIGNMENT_FILE="main.cpp"
# Run with overrides
classroom-pilot assignments orchestrate
๐ก Best Practices
Workflow Recommendations
- Always test with
--dry-runbefore making changes - Use
--verbosefor debugging configuration issues - Keep configuration files in version control with your assignment
- Use environment variables for sensitive information
- Test with single student first using filtered configuration
Security Guidelines
- Store GitHub tokens securely using the centralized token manager or OS keychain; avoid placing token files in the repository root.
- Use environment variables for sensitive configuration
- Review
--dry-runoutput before executing changes - Limit repository access with proper filtering
- Audit secret distribution using verbose logging
Configuration Management
- Separate configs per assignment for better organization
- Use descriptive filenames like
midterm-exam.conf - Document custom GitHub hosts in your assignment README
- Validate URLs before running batch operations
๐ ๏ธ Development
Project Architecture
classroom_pilot/
โโโ __init__.py # Package initialization
โโโ __main__.py # CLI entry point
โโโ cli.py # Main Typer CLI interface
โโโ config.py # Configuration management
โโโ bash_wrapper.py # Legacy script wrapper
โโโ utils.py # Utility functions
โโโ utils/ # Enhanced utilities
โ โโโ github_exceptions.py # Centralized error handling system
โโโ assignments/ # Assignment management
โ โโโ setup.py # Interactive setup
โ โโโ orchestrator.py # Workflow orchestration
โ โโโ manage.py # Template management
โโโ repos/ # Repository operations
โ โโโ fetch.py # Repository discovery (enhanced with error handling)
โ โโโ collaborator.py # Collaborator management (with retry logic)
โโโ secrets/ # Secret management
โ โโโ manager.py # Secret distribution (fault-tolerant)
โ โโโ add.py # Secret distribution
โ โโโ remove.py # Secret removal
โ โโโ list.py # Secret listing
โโโ automation/ # Automation & scheduling
โ โโโ scheduler.py # Cron job management
โ โโโ batch.py # Batch processing
โโโ config/ # Configuration system
โโโ loader.py # Configuration loading
โโโ validator.py # Validation logic
โโโ generator.py # Config generation
Contributing
# Clone and setup development environment
git clone https://github.com/hugo-valle/classroom-pilot.git
cd classroom-pilot
# Install with Poetry
poetry install
poetry shell
# Run tests
poetry run pytest tests/ -v
# Test CLI functionality
poetry run classroom-pilot --help
# Format code
poetry run black classroom_pilot/
poetry run isort classroom_pilot/
# Type checking
poetry run mypy classroom_pilot/
# Create feature branch
git checkout -b feature/new-feature
Testing
The project includes comprehensive testing with professional-grade coverage:
- 70+ tests across all modules with 100% pass rate
- Unit tests for individual components with proper mocking
- Integration tests for workflow validation and API interactions
- CLI tests for command-line interface with legacy compatibility
- Error handling tests for GitHub API resilience and retry logic
- Comprehensive mocking for reliable test execution without external dependencies
# Run all tests
poetry run pytest tests/ -v
# Run specific test categories
poetry run pytest tests/test_assignments.py -v
poetry run pytest tests/test_cli.py -v
poetry run pytest tests/test_github_exceptions.py -v # New error handling tests
# Test with coverage
poetry run pytest tests/ --cov=classroom_pilot
# Test error handling specifically
poetry run pytest tests/test_github_exceptions.py -v --tb=short
Test Categories
- Module Tests (44 tests) - Core functionality across all components
- Error Handling Tests (26 tests) - GitHub API resilience and retry mechanisms
- CLI Tests (16 tests) - Command-line interface and backward compatibility
- Integration Tests - End-to-end workflow validation
๐ Documentation
Key Resources
- PyPI Package - Official package page
- GitHub Repository - Source code and issues
- CLI Architecture - Modular command structure and design
- Error Handling Guide - GitHub API resilience and retry patterns
- CI/CD Documentation - Automated publishing workflow
- PyPI Publication Guide - Release process documentation
Technical Documentation
- Error Handling System - Comprehensive GitHub API error management with retry logic
- CLI Design Patterns - Modular architecture with backward compatibility
- Testing Framework - Professional test suite with mocking and coverage
- Configuration Management - Flexible, hierarchical configuration system
- Security Practices - Secure credential handling and validation patterns
Version Information
- Current Version: 3.1.1b0 (Beta release with GitHub API integration and comprehensive testing)
- Python Support: 3.10, 3.11, 3.12
- Package Distribution: PyPI with automated CI/CD
- Release Cycle: Semantic versioning with PEP 440 compliant identifiers
- Versioning Strategy: Development Documentation
Recent Improvements (v3.1.1b0)
- ๐ฏ Universal CLI Options - All commands support
--help,--verbose,--dry-run - ๐๏ธ CLI Modernization - Complete Typer-based architecture with consistent UX
- ๐ Legacy Preservation - Scripts moved to
scripts_legacy/for backward compatibility - ๐ Workflow Consolidation - Eliminated duplicate testing, enhanced CI/CD pipeline
- ๐งช Enhanced Testing - 496+ comprehensive tests with consolidated coverage reporting
- ๐ Documentation Updates - Complete modernization documentation across all resources
- ๏ฟฝ Beta Release - Ready for broader community testing and feedback
๐ Support
- Documentation: GitHub Repository
- Issues: GitHub Issues
- Package: PyPI Package
- Discussions: GitHub Discussions
๐ License
MIT License - see LICENSE file for details.
Classroom Pilot - Modern Python automation for GitHub Classroom assignment management.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file classroom_pilot-3.1.1b0.tar.gz.
File metadata
- Download URL: classroom_pilot-3.1.1b0.tar.gz
- Upload date:
- Size: 173.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02a7e5f8f2199a203bcf40103c07d18098c4722d308ee5386e0ce7cbbdd7706c
|
|
| MD5 |
1917e5aaab0286d6aec478237209268b
|
|
| BLAKE2b-256 |
a8927a234a5cd3b4b547de666cd8c3d85b718c6e1ecb7c2a0d5ae169fb3f0da8
|
File details
Details for the file classroom_pilot-3.1.1b0-py3-none-any.whl.
File metadata
- Download URL: classroom_pilot-3.1.1b0-py3-none-any.whl
- Upload date:
- Size: 205.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b0ccb23d8d1b5ecd033727fc6cedbb467e0a3fd5ce6156e0071eaaef9e0e29e
|
|
| MD5 |
a5c146feab7f7a71b94dfacbac9a728c
|
|
| BLAKE2b-256 |
fe8e9e35648333376141867558580555b3ec5eed7d823ee3372f8439320f20dc
|