Developer Starter Kit¶
This guide helps developers set up a local AKKO environment, build custom images, add services, and run the test suite.
Local Dev Setup (k3d + Helm)¶
Prerequisites¶
- Docker Desktop with at least 16 GB RAM allocated
- k3d (lightweight Kubernetes in Docker)
- Helm 3.x
- kubectl
- macOS ARM or Linux x86_64
Quick Start¶
# 1. Create the k3d cluster
bash helm/scripts/k3d-create.sh
# 2. Build all custom images
bash helm/scripts/build-images.sh
# 3. Deploy AKKO
bash helm/scripts/deploy.sh
The deploy.sh script handles everything: cluster creation, image building, Helm install with the dev values, and Keycloak realm import.
Manual Deploy¶
If you prefer step-by-step control:
# Create k3d cluster
k3d cluster create akko --servers 1 --agents 2 \
--port "443:443@loadbalancer" --port "80:80@loadbalancer"
# Build and import custom images
bash helm/scripts/build-images.sh
# Helm install
helm install akko helm/akko/ \
-f helm/examples/values-dev.yaml \
--set-file akko-keycloak.realm.data=helm/examples/realm-akko-k3d.json
Dev Values¶
The file helm/examples/values-dev.yaml contains development-specific overrides: lower resource limits, debug logging, and local storage classes.
Building Custom Images¶
AKKO uses 5 custom Docker images, all tagged with 2026.03:
| Image | Dockerfile | Description |
|---|---|---|
akko-jupyterhub |
docker/jupyterhub/Dockerfile |
Hub image |
akko-notebook |
docker/jupyterhub/Dockerfile.notebook |
User notebook (Python, R, Julia, Quarto, code-server) |
akko-spark |
docker/spark/Dockerfile |
Spark with Iceberg + AWS JARs |
akko-postgres |
docker/postgres/Dockerfile |
PostgreSQL with PostGIS + pgvector |
akko-cockpit |
branding/cockpit/Dockerfile |
Portal with health proxies |
Build all images at once:
Build a single image:
docker build -t akko-notebook:2026.03 -f docker/jupyterhub/Dockerfile.notebook .
k3d image import akko-notebook:2026.03 -c akko
No :latest tags
All images must use pinned version tags (e.g., 2026.03). The :latest tag is mutable and breaks reproducibility.
Adding a New Service¶
AKKO has a strict 15-step checklist for adding any service. This ensures full integration with auth, monitoring, catalog, and documentation.
See the full checklist in Adding a Service. Key steps:
- Create a Helm sub-chart in
helm/akko/charts/ - Add dependency in
helm/akko/Chart.yaml - Add values in
helm/akko/values.yamlandhelm/examples/values-dev.yaml - Register OAuth client in
keycloak/realm-akko.json - Add Cockpit card (HTML + health check + nginx proxy)
- Create EN + FR documentation pages
- Update
docs/mkdocs.ymlnavigation - Update README service count
All steps in the same commit
CI enforces that service changes include documentation updates. A PR missing doc pages will fail.
Running Tests¶
AKKO has 184 tests across 12 categories.
Full Test Suite¶
Estimated time: ~45 minutes for the full suite.
Fast Validation¶
Estimated time: ~10 minutes. Covers health checks, auth, and basic data tests.
Test Categories¶
| Category | Tool | What it Tests |
|---|---|---|
| Health | Shell | All 33+ service endpoints respond |
| Auth | pytest | Keycloak SSO flow, token exchange |
| RBAC | pytest | Role-based access across services |
| Theme | Playwright | Keycloak + JupyterHub branding |
| Data | pytest | Spark, Trino, Iceberg table operations |
| Notebooks | Shell | All demo notebooks execute without errors |
| Dashboards | Playwright | Superset dashboard rendering |
| DAGs | pytest | Airflow DAG parsing and execution |
| MLflow | pytest | Experiment tracking, model registry |
| OPA | pytest | Trino query policy enforcement |
| OpenMetadata | pytest | Catalog ingestion, lineage |
| Monitoring | Shell | Prometheus targets, Grafana dashboards |
Helm Tests¶
Runs in-cluster tests defined in helm/akko/charts/*/templates/tests/.
Contributing Guidelines¶
Branch Strategy¶
main-- production-ready, protectedfeature/<name>-- feature branchesfix/<name>-- bug fix branches
Commit Conventions¶
- Use descriptive commit messages
- Include doc updates in the same commit as code changes
- Reference issue numbers when applicable
Code Style¶
- YAML: 2-space indentation
- Python: Follow PEP 8, use f-strings
- Shell: Use
shellcheck-compliant scripts - All code and configs in English -- comments, variable names, table names
Pull Request Checklist¶
- [ ] All tests pass (
bash tests/run-all.sh --fast) - [ ] Helm lint passes (
helm lint helm/akko/) - [ ] EN + FR documentation updated
- [ ] No
:latesttags introduced - [ ] No secrets or
.envfiles committed - [ ] Service count accurate in README
Architecture Principles¶
- Sovereignty first -- everything runs offline, on-prem, air-gapped
- Kubernetes-native -- portable across k3d, k3s, EKS, GKE, AKS, OpenShift
- Idempotent init -- all init jobs are safe to re-run
- Two PostgreSQL instances -- never mix infra and business data