No description
- Kotlin 95.8%
- Dockerfile 4.2%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| .gitea | ||
| .mvn/wrapper | ||
| docs | ||
| helm | ||
| monitoring | ||
| src | ||
| .dockerignore | ||
| .gitignore | ||
| catalog-info.yaml | ||
| Dockerfile | ||
| mvnw | ||
| mvnw.cmd | ||
| pom.xml | ||
| README.md | ||
| renovate.json | ||
${{ values.name }}
A Spring Boot Kotlin backend on the PandaStage platform auth contract. Instantiated from
templates/template-api-springboot, this service authenticates against authentik through
platform-springboot-starter,
persists to its own CNPG Postgres cluster, deploys automatically from helm/values.yaml and
appears in the catalogue — with nothing hand-edited.
What you get
- Bearer-token authentication with the contract's 401/403 error bodies, wired by the starter.
- An
ExampleEntitykeyed on the token'ssub(no user table, no password column). - The example entity ships without a migration — write your first Flyway migration (or delete the example) before the first deploy.
- Flyway migrations into a per-preview schema, so parallel pull requests never collide.
- Health on
/api/health(8080), actuator and Prometheus on 8081, OTel traces, Swagger UI. - Preview deployments per pull request, release builds on push to
main.
Running locally
./mvnw -B verify # compiles and runs the Testcontainers suite (Docker required)
Tests never reach authentik: the JWT decoder is backed by a locally generated key, and everything else is the real production path.
Structure
| Path | What lives there |
|---|---|
src/main/kotlin/nl/nathandev/service/ |
The application, the ExampleEntity API and its health endpoint |
src/main/resources/db/migration/ |
Where your Flyway migrations go — the template ships none |
src/test/kotlin/ |
The Testcontainers suite (401/403/200 and schema isolation) |
helm/values.yaml |
How charts/app and charts/services deploy it |
monitoring/ |
PodMonitor, applied with kubectl apply -f monitoring/ |
.forgejo/workflows/ |
Test, release and per-PR preview pipelines |
See docs/ for the full guide.