turned into a quarkus application

This commit is contained in:
2026-10-26 22:53:35 +01:00
parent c037abbde9
commit 2bb3beef60
7 changed files with 120 additions and 9 deletions

5
.dockerignore Normal file
View File

@@ -0,0 +1,5 @@
**/target
.git
.idea
.mvn
*.iml

13
Dockerfile Normal file
View File

@@ -0,0 +1,13 @@
FROM maven:3.9-eclipse-temurin-25 AS build
WORKDIR /workspace
COPY pom.xml ./
COPY agiledancers-be/pom.xml agiledancers-be/pom.xml
COPY agiledancers-be/src agiledancers-be/src
RUN mvn -B -ntp clean verify
FROM eclipse-temurin:25-jre
WORKDIR /app
COPY --from=build --chown=10001:10001 /workspace/agiledancers-be/target/quarkus-app/ ./
USER 10001:10001
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/quarkus-run.jar"]

View File

@@ -1,6 +1,6 @@
# agiledancers
To map dance groups to performance days.
To map dance groups to performance days. The backend runs on Quarkus with Java 25.
Requires JDK 25 and Maven 3.9.0 or newer. Set `JAVA_HOME` to your JDK 25 installation.
@@ -9,3 +9,38 @@ Build and run all tests (including `*Sit` tests) from the repository root:
```sh
mvn clean verify
```
Start development mode with live reload from the repository root:
```sh
mvn -pl agiledancers-be quarkus:dev
```
Run the packaged application after building:
```sh
java -jar agiledancers-be/target/quarkus-app/quarkus-run.jar
```
Build and run a Docker container from the repository root (only Docker is required):
```sh
docker build -t agiledancers .
docker run --rm --name agiledancers -p 8080:8080 agiledancers
```
The Docker build compiles the application and runs the tests in a Maven build stage,
then copies the Quarkus application into a Java 25 runtime image running as a non-root user.
Check readiness at <http://localhost:8080/q/health/ready> or overall health at
<http://localhost:8080/q/health>. For example:
```sh
curl --fail http://localhost:8080/q/health/ready
```
Quarkus configuration can be overridden with environment variables, for example
`docker run --rm -e QUARKUS_HTTP_PORT=9090 -p 9090:9090 agiledancers`.
The domain services and repositories retain their existing in-memory behavior;
data is lost when the process stops. Business REST endpoints have not yet been added.

View File

@@ -14,12 +14,26 @@
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-health</artifactId>
</dependency>
<dependency>
<groupId>com.google.ortools</groupId>
<artifactId>ortools-java</artifactId>
</dependency>
<!-- test dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.datafaker</groupId>
<artifactId>datafaker</artifactId>
@@ -33,4 +47,24 @@
</dependency>
</dependencies>
</project>
<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.platform.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,2 @@
quarkus.application.name=agiledancers
quarkus.http.host=0.0.0.0

View File

@@ -0,0 +1,18 @@
package nl.agilecc.agiledancers;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.equalTo;
@QuarkusTest
class HealthTest {
@Test
void applicationIsReady() {
given()
.when().get("/q/health/ready")
.then().statusCode(200)
.body("status", equalTo("UP"));
}
}

18
pom.xml
View File

@@ -22,18 +22,25 @@
<maven.compiler.release>25</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus.platform.version>3.40.1</quarkus.platform.version>
<ortools-java.version>9.15.6755</ortools-java.version>
<lombok.version>1.18.48</lombok.version>
<!-- test dependencies -->
<datafaker.version>2.7.0</datafaker.version>
<junit-jupiter.version>6.1.3</junit-jupiter.version>
</properties>
<!-- dependencies that can be included by child-project - without stating the version -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus.platform</groupId>
<artifactId>quarkus-bom</artifactId>
<version>${quarkus.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.ortools</groupId>
<artifactId>ortools-java</artifactId>
@@ -48,12 +55,6 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
@@ -88,6 +89,9 @@
<artifactId>maven-surefire-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
</systemPropertyVariables>
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>