Quick Start
Learn what Divekit is and how it can help you manage programming assignments.
Divekit is a command-line tool for managing individualized programming assignments at scale. It helps educators create, distribute and evaluate programming exercises for large groups of students.
Key Features
- Assignment Individualization: Generate unique variations of programming assignments for each student
- Automated Distribution: Create and manage GitLab repositories for students automatically
- Test Integration: Built-in support for automated testing and evaluation
- Bulk Operations: Efficiently manage assignments for large classes
- Access Control: Manage repository access rights and permissions
Benefits
- Prevent Plagiarism: Each student receives a slightly different version of the assignment
- Save Time: Automate repetitive tasks like repository setup and access management
- Ensure Fairness: Standardized testing and evaluation across all variations
- Scale Easily: Handle large classes with minimal additional effort
Use Cases
Divekit is primarily used in educational settings where:
- Programming assignments need to be distributed to many students
- Each student should receive an individualized version
- Automated testing and evaluation is desired
- Manual administrative overhead should be minimized
The tool consolidates functionality that was previously spread across multiple separate tools into a single, easy-to-use CLI application.
Divekit is a toolkit for managing individualized programming assignments at scale.
1 - Hello there π
Learn what Divekit is and how it can help you manage programming assignments.
What is Divekit?
Divekit is a command-line tool for managing individualized programming assignments at scale. It helps educators create, distribute and evaluate programming exercises for large groups of students.
Key Features
- Assignment Individualization: Generate unique variations of programming assignments for each student
- Automated Distribution: Create and manage GitLab repositories for students automatically
- Test Integration: Built-in support for automated testing and evaluation
- Bulk Operations: Efficiently manage assignments for large classes
- Access Control: Manage repository access rights and permissions
Benefits
- Prevent Plagiarism: Each student receives a slightly different version of the assignment
- Save Time: Automate repetitive tasks like repository setup and access management
- Ensure Fairness: Standardized testing and evaluation across all variations
- Scale Easily: Handle large classes with minimal additional effort
Use Cases
Divekit is primarily used in educational settings where:
- Programming assignments need to be distributed to many students
- Each student should receive an individualized version
- Automated testing and evaluation is desired
- Manual administrative overhead should be minimized
The tool consolidates functionality that was previously spread across multiple separate tools into a single, easy-to-use CLI application.
Divekit is a toolkit for managing individualized programming assignments at scale.
Who needs Divekit?
Divekit is designed for different stakeholders in programming education:
Course Instructors
Primary users who:
- Create and manage programming assignments
- Need to distribute exercises to large groups of students
- Want to prevent plagiarism through individualization
- Need efficient ways to evaluate student submissions
Benefits
- Automated repository management
- Built-in individualization system
- Integrated testing capabilities
- Bulk operations for large classes
Teaching Assistants
Support staff who:
- Help manage student repositories
- Assist with assignment evaluation
- Provide technical support to students
Benefits
- Standardized repository structure
- Automated access management
- Consistent testing environment
- Clear overview of student progress
Students
End users who:
- Receive individualized assignments
- Submit their solutions through Git
- Get automated feedback on their work
Benefits
- Personal GitLab repositories
- Immediate feedback through automated tests
- Clear assignment structure
- Consistent submission process
Why Divekit?
How Divekit works
2 - Installation
Step-by-step guide to installing the Divekit CLI and required dependencies.
Prerequisites
Before installing Divekit, ensure your system meets the following requirements:
System Requirements
- Operating System: Linux, macOS, or Windows
- GitLab: Access to a GitLab instance with API permissions
GitLab Setup
- Access to a GitLab instance
- Admin rights to create groups and repositories
- Personal Access Token with
api
scope
Creating a Personal Access Token
- Create one here
or
- Navigate to your GitLab profile settings
- Go to “Access Tokens”
- Create a new token with required scopes
- Save the token securely - you’ll need it during installation
Storage Requirements
- Minimum 1GB free disk space
- Additional space for repositories (varies by project size)
Network Requirements
- Stable internet connection
- Access to GitLab API endpoints
- No blocking firewalls for HTTP requests
Optional Requirements
- Docker: For running tests in containers
- Maven/Gradle: For Java project support
- IDE: Any Git-compatible IDE for development
Installation
Download the latest release:
Install Divekit:
Navigate to the download directory and run the installation script:
./divekit.exe install # On Windows
./divekit install # On Linux/macOS
Environment Setup
After installation, you need to configure your GitLab token in your system’s environment variables. There are two methods available:
Recommended Method: System Environment Variables
Windows
- Open System Properties > Advanced > Environment Variables
- Add a new User Variable:
- Variable name:
GITLAB_TOKEN
- Variable value:
<YOUR_TOKEN>
- Restart your terminal
Linux
Add to your ~/.bashrc
or ~/.zshrc
:
export GITLAB_TOKEN="<YOUR_TOKEN>"
Then run:
source ~/.bashrc # or source ~/.zshrc
macOS
Add to your ~/.zshrc
:
export GITLAB_TOKEN="<YOUR_TOKEN>"
Then run:
Alternative Method (Not Recommended)
You can store the token in a .env
file in the Divekit configuration directory:
# In ~/.divekit/.env
GITLAB_TOKEN=<YOUR_TOKEN>
β οΈ Warning: This method is not recommended as the token is stored unencrypted and poses a potential security risk. Prefer using system environment variables instead.
To improve security when using this method:
# Restrict file permissions (Linux/macOS)
chmod 600 ~/.divekit/.env
This ensures only the file owner of your account (you) can read and write the file.
Verify Installation
Run the doctor command to verify your setup:
This will check if:
- Divekit is properly installed
- Required environment variables are set
- System requirements are met
Troubleshooting
If you encounter any issues:
- Check if the GitLab token is correctly set in your environment variables
- Run
divekit doctor
for detailed diagnostics - π§ Check the logs in
~/.divekit/logs
- Ensure you have the correct permissions for the installation directory
First Steps After Installation
Create Your First Assignment
- Create and navigate to a new directory:
mkdir my-assignment
cd my-assignment
- Initialize a new Divekit project:
Assignment Content Creation
- Add your assignment files to the repository
- Mark solution parts in your code:
public class Example {
//unsup
return actualSolution;
//unsup
}
- Add variables for individualization:
public class $EntityClass$ {
// ...
}
Assignment Distribution
- Verify your setup:
- Distribute the repositories:
Next Steps
For more detailed information, please refer to:
- Configuration options in the Configuration section
- Detailed system requirements in the Prerequisites section
3 - π§ Individualization
Learn how Divekit helps you create individualized programming assignments.
Overview
Divekit allows you to create individualized programming assignments for each student. This is done by defining variables that are populated with random values during the repository generation.
Variable Types
There are three types of variables:
1. Object Variables
Object variables are used to randomize entities and value objects. They are defined in the configuration file {ORIGIN_REPO}/.divekit/variables/variations.json
:
{
"ids": "Vehicle",
"objectVariations": [
{
"id": "Car",
"Class": "Car",
"RepoClass": "CarRepository",
"SetToOne": "setCar",
"SetToMany": "setCars"
},
{
"id": "Truck",
"Class": "Truck",
"RepoClass": "TruckRepository",
"SetToOne": "setTruck",
"SetToMany": "setTrucks"
}
],
"variableExtensions": ["Getter"]
}
2. Relation Variables
Relation variables define relationships between entities. They are defined by two components:
- Relationship types in
{ORIGIN_REPO}/.divekit/variables/relations.json
:
{
"id": "OneToOne",
"Umlet": "lt=-\nm1=1\nm2=1",
"Short": "1 - 1",
"Description": "one to one"
}
- Concrete relationships in the variations.json:
{
"relationShips": [
{
"id": "Rel1",
"relationType": "OneToOne"
}
],
"relationObjects": [
{
"id": "RelVehicleWheel",
"Obj1": "Vehicle",
"Obj2": "Wheel"
}
]
}
3. Logic Variables
Logic variables allow the definition of different business logic variants. Files can be suffixed with _LogicId
and will only be included if this logic variant is selected:
{
"id": "VehicleLogic",
"logicVariations": [
{
"id": "VehicleCrash",
"Description": "Implementieren Sie die Crash-Logik..."
},
{
"id": "VehicleShop",
"Description": "Implementieren Sie die Shop-Logik..."
}
]
}
Using Variables
Variables can be referenced in files with a configurable delimiter (default: $
):
public class $VehicleClass$ {
// ...
}
For each variable, three variants are automatically generated:
- Original:
VehicleClass
-> MonsterTruck
- First letter lowercase:
vehicleClass
-> monsterTruck
- All lowercase:
vehicleclass
-> monstertruck
Persistence
The generated individual variables are stored in the distribution under {ORIGIN_REPO}/.divekit/{DISTRIBUTION_NAME}/individual_repositories.json
and can be reused if needed.
Quality Assurance
Divekit can issue warnings if suspicious values remain after variable replacement (e.g., “Car” in a Truck variant). This helps to identify accidentally unmodified variables.
4 - Distribution
Learn how Divekit distributes programming assignments to students.
Overview
Divekit can distribute your assignment to multiple repositories on GitLab, creating individualized versions for each student or group. This process includes:
- Creating code repositories for each student/group
- Optionally creating test repositories
- Assigning the correct permissions to students
- Individualizing the content based on your configuration
Distribution Guide
Simply use the distribute command to start the distribution process:
The command will:
- Ask you to select a distribution if multiple are configured
- Check if all configured members exist on GitLab
- Show you a summary of what will be created
- Create the repositories after your confirmation
Example Flow
$ divekit distribute
? Found several distributions. Please choose one:
[ ] local
[x] supervisor
[ ] student
Checking members:
[β] 2 users available
[X] 3 users not found:
- ada
- charles
- jobs
Would create 2 repositories with name "ST2-2024-{uuid}" and assign 2 members.
? Continue? [Y/n]: y
Creating main repositories at #234567:
[ββββββββββββββββββββββββββββββββββββββββββββββββββ] 100% (2/2)
Creating test repositories at #345678:
[ββββββββββββββββββββββββββββββββββββββββββββββββββ] 100% (2/2)
Assigning members:
[βββββββββββββββββββββββββββ ] 50% (1/2)
What Happens During Distribution?
- Divekit creates a new repository for each student/group
- If configured, test repositories are created separately
- Repository contents are individualized based on your configuration
- Students are assigned with appropriate permissions
- Each repository gets a unique identifier
Next Steps
5 - Glossary
Comprehensive list of Divekit terms and definitions.
This glossary provides definitions for terms used throughout the Divekit documentation.
Term | Definition |
---|
Divekit | The platform for creating and managing AI-powered learning experiences. |
CLI | Command Line Interface |
Origin Repository | The repository where the Divekit project is hosted. |
Group | A collection of 1..* students |
Student | A member of a group. |
Instructor | A member of a group with additional privileges. |
Distributed Repository | A repository on GitLab that is assigned to a group. |
Distribution | A distribution is a set of Distributed Repositories defined in the Origin Repository. |
Divekit Instance | The whole Structure of one Divekit Origin - Distributed Repositories from all Distributions. |