Skip to content

magkue/request

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AET Request

A web application for requesting university chair resources. Provides structured, validated forms for VM provisioning, VM access, Artemis developer accounts, and TUM guest accounts.

Architecture

client/          React 19 + Vite + TypeScript + shadcn/ui
server/          FastAPI + SQLAlchemy + Alembic
e2e/             Playwright E2E Test Setup
deploy/
  client/        Dockerfile (nginx)
  server/        Dockerfile (uvicorn)
  helm/          Kubernetes Helm chart

Getting Started

Prerequisites

  • Node.js 22+
  • Python 3.12+ with uv
  • PostgreSQL 16+
  • Docker (for deployment)

Client

cd client
cp .env.example .env        # configure Keycloak + API URL
npm install
npm run dev                  # http://localhost:5174

Server

cd server
cp .env.example .env         # configure database + Keycloak
uv sync
uv run alembic upgrade head  # run migrations
uv run uvicorn request_server.main:app --reload  # http://localhost:8000 

Database

cd server
docker compose up -d         # starts PostgreSQL on :5432
uv run alembic upgrade head

Request Forms

Form Route Auth Required Description
VM Request /request/vm Yes Provision a new virtual machine
VM Access /request/vm-access Yes Request access to an existing VM
Artemis Developer /request/artemis No Artemis developer account setup
TUM Guest Account /request/tum-guest No Guest account for external users
Support Request /request/support No General support request
External Links Admin /admin/external-links Admin Manage external link sections

Deployment

The application ships as a Helm chart deploying client, server, and PostgreSQL to Kubernetes.

Quick Deploy

cd deploy/helm/aet-request
helm dependency update
helm upgrade --install aet-request . \
  --namespace aet-request --create-namespace \
  -f /path/to/values-env.yaml

Environment Overrides

The default values.yaml contains safe, generic defaults. Environment-specific configuration (hostnames, TLS, secrets) should be provided via a separate values file. See values-itg.example.yaml for a template.

Features

  • cert-manager TLS via letsencrypt-production ClusterIssuer
  • Database migrations as a Helm pre-install/pre-upgrade Job
  • ConfigMap checksum annotations for automatic pod restarts on config changes
  • Startup/liveness/readiness probes
  • Pod Disruption Budgets and optional HPA
  • Network policies for ingress/egress restriction

Docker Images

Images are built and pushed to GHCR via GitHub Actions:

ghcr.io/<owner>/request-client:<version>
ghcr.io/<owner>/request-server:<version>

E2E Tests

End-to-end tests use Playwright and run against a test database (PostgreSQL on port 5433).

cd e2e
npx playwright install       # first time only
npx playwright test          # run all tests

Tests auto-start the client (port 5715) and server (port 8001) with AUTH_BYPASS=true and TICKET_SYSTEM=debug. Additional scripts:

npx playwright test --headed   # watch in browser
npx playwright test --ui       # interactive UI mode
npx playwright test --debug    # step-through debugger

Development

# Client lint + format
cd client && npm run lint

# Server lint + format
cd server && uv run ruff check . && uv run ruff format .

# Type checking
cd client && npm run typecheck
cd server && uv run ty check .

License

MIT

About

AET Request - University resource request system

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors