d8bcdce879
commit 0d624137c2557c6eeb87020749e4977b821c2b5c Author: Adrien <adrien.cesaro@proton.me> Date: Thu Apr 9 11:55:22 2026 +0200 backend native image setup
1.8 KiB
1.8 KiB
Build Contract: Native Image
Branch: 005-native-image-deployment | Date: 2026-04-07
Overview
This contract defines what the native build produces and how consumers (developers, CI, docker-compose) interact with it. The REST API contract is unchanged — all existing endpoints remain identical.
Build Inputs
| Input | Required | Description |
|---|---|---|
| GraalVM JDK 25 | Yes (native profile only) | JAVA_HOME must point to GraalVM 25 |
DOCKER_HOST / Docker daemon |
Optional | Required for jib:dockerBuild; not needed for jib:build |
jib.to.image Maven property |
Optional | Override target image name; defaults to ai-teacher-backend |
Build Outputs
| Profile | Command | Output |
|---|---|---|
| Default (JVM) | mvn package |
target/ai-teacher-backend-*.jar |
| Native | mvn -Pnative package |
target/ai-teacher-backend (native executable) |
| Native + Docker | mvn -Pnative package jib:dockerBuild |
Local Docker image ai-teacher-backend:latest |
| Native + Registry | mvn -Pnative package jib:build |
Remote Docker image (configured via properties) |
Docker Image Contract
| Property | Value |
|---|---|
| Base image | gcr.io/distroless/base-nossl-debian12 |
| Entrypoint | /app/ai-teacher-backend (native executable) |
| Exposed port | 8080 |
| Architecture | linux/amd64 (matches build host) |
| Required env vars | Same as JVM mode (SPRING_DATASOURCE_URL, OPENAI_API_KEY, etc.) |
REST API Contract
Unchanged — the native image exposes the same HTTP API as the JVM image:
GET /api/v1/booksPOST /api/v1/books(multipart PDF upload)DELETE /api/v1/books/{id}POST /api/v1/chatGET /api/v1/chat/history
All endpoints use the same request/response schemas.