Marvin is a sophisticated code assistant designed to help with course assignments. With a brain the size of a planet, it provides seamless build, check, and submission capabilities for students.
- Zero-Conflict Environments: Isolated Nix configurations prevent dependency clashes while preserving system packages.
- Reproducibility Guaranteed: Identical environments across development, CI, and grading via declarative setup.
- Unified Workflows: One CLI for both CI pipelines (private/public) and local development.
- Multi-Language Pipelines: C++ (CMake/Clang) & Go with sanitizers, sandboxed tests, and auto-linting.
- IDE/Build Ready: Preconfigured for VSCode and CLion.
The client runs on:
- Linux (native)
- macOS (native)
- Windows (via WSL)
The CLI tool is designed to work with Nix for environment management. To activate the development environment in the course repository:
source cli/activate
This will set up the necessary environment variables and paths for the CLI tool to function properly.
Navigate to a course directory and run:
cli <command> [options]
test
: Run tests for the current tasklint
: Run linter checksformat
: Check or fix code formattingrun-checks
: Run all checks (format, test, lint)clean
: Remove build filessubmit
: Submit task to grading systemlist-tasks
: List all available course tasks
The client is currently used in two courses:
- Parallel and Concurrent Programming (PCP)
- Distributed Systems (DS)
To use this client in a course:
- Add the
cli/
directory to the course repository - Set the appropriate version in course configuration
- Students can then use
source cli/activate
to set up their environment
The CLI tool uses a modular architecture:
lib.py
: Core utilities and shared functionalitymain.py
: CLI interface and command routingcpp.py
: C++ specific build, test, and check functionalitygo.py
: Go specific build and test functionalityprivate.py
: Private/internal commands for staff use
C++ projects use CMake as the build system with support for:
- Multiple build profiles (e.g., debug, release)
- Backtrace symbolization out of the box
- Sanitizer support (ASAN, TSAN)
- Clang-based tooling (Clang-Tidy, Clang-Format)
- IDE integration (VSCode, CLion)
- Build version tracking
- Test timeout configuration
cpp_targets:
spinlock_task:
timeout: 30s
profiles:
- release-lines
- asan-lines
- release
- asan
- tsan
cpp_lint_files:
- test.cpp
cpp_lint_profiles:
- release
submit_files:
- spinlock.hpp
Go projects support:
- Go test execution
- Build caching
- Sandbox execution (Linux only)
- Test timeout configuration
go_targets:
ds/2pc:
timeout: 1m
submit_files:
- client.go