Modern Python CLI for automating GitHub Classroom assignment management
Project description
ClassDock
A comprehensive Python CLI tool for automating GitHub Classroom assignment management with modular workflow orchestration, repository operations, and secret management.
๐ฏ Overview
ClassDock 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 classdock - ๐ง 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 classdock
# Verify installation
classdock --help
Development Installation
# Clone repository
git clone https://github.com/hugo-valle/classdock.git
cd classdock
# 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
ClassDock 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 classdock.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
ClassDock uses a modular command structure:
# Main command groups
classdock assignments # Assignment setup and orchestration
classdock repos # Repository operations and collaboration
classdock secrets # Secret and token management
classdock automation # Scheduling and batch processing
# Legacy commands (for backward compatibility)
classdock setup # Interactive assignment setup
classdock run # Complete workflow execution
3. Common Workflows
# Setup a new assignment (interactive)
classdock assignments setup
# Discover student repositories
classdock repos fetch --config assignment.conf
# Add secrets to all student repos
classdock secrets add --config assignment.conf
# Run orchestrated workflow
classdock assignments orchestrate --config assignment.conf
# Check what would happen (dry-run)
classdock --dry-run assignments orchestrate
๐ง Command Reference
Assignment Management
# Setup new assignment configuration
classdock assignments setup
# Orchestrate complete assignment workflow
classdock assignments orchestrate [--config FILE] [--dry-run]
# Manage assignment templates
classdock assignments manage [--config FILE]
Repository Operations
# Fetch student repositories
classdock repos fetch [--config FILE]
# Manage collaborators
classdock repos collaborator add|remove [--config FILE]
Secret Management
# Add secrets to repositories
classdock secrets add [--config FILE] [--secrets LIST]
# Remove secrets from repositories
classdock secrets remove [--config FILE] [--secrets LIST]
# List existing secrets
classdock secrets list [--config FILE]
Automation & Scheduling
# Setup cron jobs for automation
classdock automation scheduler setup [--config FILE]
# Run batch operations
classdock automation batch [--config FILE]
Global Options
| Option | Description | Example |
|---|---|---|
--dry-run |
Preview actions without executing | classdock --dry-run assignments orchestrate |
--verbose |
Enable detailed logging | classdock --verbose repos fetch |
--config FILE |
Use custom configuration file | classdock --config my.conf assignments setup |
--help |
Show help for any command | classdock 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/classdock/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
classdock 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
classdock/
โโโ __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/classdock.git
cd classdock
# Install with Poetry
poetry install
poetry shell
# Run tests
poetry run pytest tests/ -v
# Test CLI functionality
poetry run classdock --help
# Format code
poetry run black classdock/
poetry run isort classdock/
# Type checking
poetry run mypy classdock/
# 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=classdock
# 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.
ClassDock - Modern Python automation for GitHub Classroom assignment management.
Project details
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 classdock-0.1.1.tar.gz.
File metadata
- Download URL: classdock-0.1.1.tar.gz
- Upload date:
- Size: 174.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6aff477694a80f0d99024f7f812b8640d105ac6a321c3ebee159f1e1acd7bc7
|
|
| MD5 |
976c090ab55e1b7c7c8526572931fede
|
|
| BLAKE2b-256 |
7dcd41007ed219e640ffa35d5239314edae0e12bb0cae8eff0af2e28a7f4f11a
|
File details
Details for the file classdock-0.1.1-py3-none-any.whl.
File metadata
- Download URL: classdock-0.1.1-py3-none-any.whl
- Upload date:
- Size: 206.2 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 |
fee71b5d4df856e77dacb928893154480283fab4278740226834aa578183f8e1
|
|
| MD5 |
1fbdea0df8df64ef41ae314b9f70d93b
|
|
| BLAKE2b-256 |
145644b8a3282f76c41fdc38f8074ebd69128cf63dd50477c11b38b2d1fcf331
|