Skip to content
/ tease Public

TEASE (Team Allocator for Software Engineering courses) is a specialized decision support system designed to optimize team allocation in project-based courses.

Notifications You must be signed in to change notification settings

ls1intum/tease

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

TEASE

Team Allocation Decision Support System - An intelligent decision-support tool for software engineering team allocation in multi-project courses, as used in the iPraktikum at TUM.

Build and Deploy to Dev

πŸ“– Full Documentation


🌟 Overview

TEASE helps educators efficiently allocate students to project teams while considering multiple constraints such as skills, preferences, team diversity, and project requirements. The system uses constraint-based optimization to ensure fair and balanced team compositions.

Key Features

  • πŸ“Š Constraint-Based Allocation: Define constraints for team size, skills, diversity (gender, nationality, language)
  • 🎯 Preference Matching: Automatically assign students to their preferred projects while meeting all constraints
  • πŸ”„ Real-time Collaboration: Multiple users can work simultaneously with live synchronization
  • πŸ“ Data Integration: Import/export student data via CSV or direct integration with PROMPT
  • πŸ”’ Lock Mechanism: Manually lock specific student allocations that should not change
  • πŸ“Έ Visual Export: Export team compositions as images or CSV files
  • πŸ“ˆ Analytics Dashboard: View allocation statistics and constraint satisfaction metrics

Dashboard


πŸ—οΈ Architecture

TEASE follows a modern microservices architecture with separate client and server components:

Technology Stack

Client

  • Framework: Angular 19.1.1
  • UI Library: Bootstrap 5.3.8 + ng-bootstrap 18.0.0
  • State Management: RxJS 7.8.2
  • Real-time Communication: STOMP over WebSocket
  • Charts: Chart.js 4.5.1 + ng2-charts
  • Build: Angular CLI with esbuild

Server

  • Framework: Spring Boot 3.5.9
  • Runtime: Java 21 (LTS)
  • WebSocket: STOMP protocol for real-time communication
  • Build: Maven 3.9

πŸš€ Quick Start

Prerequisites

  • Docker & Docker Compose (recommended)
  • OR Node.js 18+ and Java 21+ (for local development)

Option A: Using Docker (Recommended)

  1. Using pre-built images from GitHub Container Registry:

    docker compose up
  2. Building from source:

    docker compose up --build
  3. Access the application:

Option B: Local Development

Client Setup

cd client
npm install
npm start

The client will be available at http://localhost:80/

Server Setup

cd server
mvn clean install
mvn spring-boot:run

The server will be available at http://localhost:8081/


πŸ”„ CI/CD Pipeline Architecture

TEASE uses a comprehensive GitHub Actions-based CI/CD pipeline for automated building, testing, and deployment.

Pipeline Overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         GitHub Repository                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚   PR Opened  β”‚  β”‚ Push to Main β”‚  β”‚   Release    β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚                  β”‚                  β”‚
          v                  v                  v
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚ Assign  β”‚        β”‚Build/Pushβ”‚      β”‚Build/Pushβ”‚
    β”‚ Author  β”‚        β”‚  to Dev  β”‚      β”‚ to Prod  β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
                            β”‚                  β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚                β”‚  β”‚               β”‚
                    v                v  v               v
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚Build & Push    β”‚  β”‚  Deploy     β”‚  β”‚  Deploy     β”‚
            β”‚Docker Images   β”‚  β”‚  to Dev     β”‚  β”‚  to Prod    β”‚
            β”‚                β”‚  β”‚             β”‚  β”‚             β”‚
            β”‚ β€’ Client Image β”‚  β”‚ VM: Dev     β”‚  β”‚ VM: Prod    β”‚
            β”‚ β€’ Server Image β”‚  β”‚ Environment β”‚  β”‚ Environment β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚                  β”‚                  β”‚
                    v                  v                  v
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚GitHub Containerβ”‚  β”‚Docker       β”‚  β”‚Docker       β”‚
            β”‚Registry (GHCR) β”‚  β”‚Compose Up   β”‚  β”‚Compose Up   β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Workflow Files

  • Trigger: When a pull request is opened
  • Actions: Automatically assigns the PR to its author
  • Permissions: pull-requests: write

2. Build and Deploy to Dev (.github/workflows/deploy-dev.yml)

  • Trigger: Push to main branch or PR to main
  • Actions:
    1. Builds Docker images for client and server
    2. Pushes images to GitHub Container Registry with latest tag
    3. Deploys to development environment via SSH
  • Permissions: contents: read, packages: write

3. Build and Deploy to Prod (.github/workflows/deploy-prod.yml)

  • Trigger: Release published
  • Actions:
    1. Builds Docker images with release version tag
    2. Pushes to GitHub Container Registry
    3. Deploys to production environment
  • Permissions: contents: read, packages: write
  • Type: Reusable workflow called by other workflows
  • Actions:
    • Uses multi-stage Docker builds
    • Builds both client (Angular) and server (Spring Boot) images
    • Pushes to ghcr.io/ls1intum/tease and ghcr.io/ls1intum/tease-server
  • Permissions: contents: read, packages: write
  • Type: Reusable workflow for deployment
  • Actions:
    1. SSH to target VM via deployment gateway (jump host)
    2. Stop existing containers
    3. Copy updated docker-compose file
    4. Start new containers with docker compose up
  • Permissions: contents: read

Deployment Environments

Development Environment

  • URL: https://prompt.ase.cit.tum.de/tease
  • Trigger: Automatic on push to main
  • Purpose: Testing and validation before production release

Production Environment

  • URL: https://prompt.ase.cit.tum.de/tease (production path)
  • Trigger: Manual release creation
  • Purpose: Stable version for end users

Deployment Flow

  1. Code Push/PR Merge β†’ GitHub Actions triggered
  2. Multi-stage Docker Build:
    • Client: Node.js build β†’ Nginx static serving
    • Server: Maven build β†’ Java runtime
  3. Image Push β†’ GitHub Container Registry
  4. SSH Deployment:
    • Connect via deployment gateway (jump host)
    • Pull latest images from GHCR
    • Update docker-compose configuration
    • Restart services with zero-downtime strategy
  5. Health Check β†’ Verify deployment success

Security Features

  • βœ… Least Privilege Permissions: Each workflow has minimal required permissions
  • βœ… Secret Management: Sensitive data stored in GitHub Secrets
  • βœ… Jump Host: Deployment via secure gateway server
  • βœ… Image Scanning: Automated security scanning (planned)
  • βœ… Signed Commits: Recommended for production releases

🎯 Usage Guide

Importing Student Data

  1. CSV Import: Upload a CSV file with student information (name, email, skills, preferences)
  2. PROMPT Integration: Directly import from PROMPT if logged in as project management team member

Creating Constraints

Define allocation rules based on:

  • Team Size: Min/max students per team
  • Skills: Required technical competencies
  • Diversity: Gender, nationality, language distribution
  • Device Ownership: Equipment requirements
  • Project Preferences: Student ranking of projects

Running Allocation

  1. Click "Run Allocation" to execute the constraint solver
  2. System automatically assigns students optimizing for:
    • Highest preference satisfaction
    • All constraint fulfillment
    • Balanced team compositions
  3. Review results in the dashboard with visual feedback

Exporting Results

  • CSV Export: Download allocation as spreadsheet
  • PROMPT Export: Push results directly to PROMPT system
  • Team Cards: Generate visual team composition images

🀝 Integration with PROMPT

TEASE is designed to work seamlessly with PROMPT (Project Management and Organization Tool):

  • Single Sign-On: Shared authentication via Keycloak
  • Data Synchronization: Real-time updates between systems
  • Workflow Continuity: Import student data from PROMPT, export allocations back
  • Shared Deployment: Both applications run on the same infrastructure

πŸ“Š Deployment Diagram

Deployment Diagram

The diagram shows the complete architecture including:

  • Load balancer (Traefik)
  • Frontend (Angular) and Backend (Spring Boot) services
  • Database connections
  • Integration points with PROMPT

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

Made with ❀️ by the AET Team at Technical University of Munich

About

TEASE (Team Allocator for Software Engineering courses) is a specialized decision support system designed to optimize team allocation in project-based courses.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors 14