<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>microcks-distro</artifactId>
    <groupId>io.github.microcks</groupId>
    <version>1.15.0-rc1</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <name>Microcks Uber App</name>
  <artifactId>microcks-uber-app</artifactId>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <multi-project.rootdir>../..</multi-project.rootdir>
    <java.version>25</java.version>
    <mongo-java-server.version>1.47.0</mongo-java-server.version>
    <opentelemetry.version>2.23.0</opentelemetry.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>io.opentelemetry.instrumentation</groupId>
        <artifactId>opentelemetry-instrumentation-bom</artifactId>
        <version>${opentelemetry.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>io.github.microcks</groupId>
      <artifactId>microcks-app</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    <dependency>
      <groupId>de.bwaldvogel</groupId>
      <artifactId>mongo-java-server</artifactId>
      <version>${mongo-java-server.version}</version>
    </dependency>
    <dependency>
      <groupId>de.bwaldvogel</groupId>
      <artifactId>mongo-java-server-h2-backend</artifactId>
      <version>${mongo-java-server.version}</version>
    </dependency>
    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-common</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
          <encoding>${project.build.sourceEncoding}</encoding>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>${spring-boot.version}</version>
        <configuration>
          <mainClass>io.github.microcks.MicrocksApplication</mainClass>
          <profiles>
            <profile>uber</profile>
          </profiles>
          <arguments>
            <argument>--spring.profiles.active=uber</argument>
          </arguments>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>prod</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <configuration>
              <mainClass>io.github.microcks.MicrocksApplication</mainClass>
              <profiles>
                <profile>uber</profile>
              </profiles>
              <arguments>
                <argument>--spring.profiles.active=uber</argument>
                <argument>--spring.aot.enabled=true</argument>
              </arguments>
              <classifier>exec</classifier>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>repackage</goal>
                </goals>
              </execution>
              <execution>
                <id>process-aot</id>
                <goals>
                  <goal>process-aot</goal>
                </goals>
                <configuration>
                  <profiles>uber</profiles>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      <properties>
        <!-- log configuration -->
        <logback.loglevel>INFO</logback.loglevel>
        <!-- default Spring profiles -->
        <spring.profiles.active>uber</spring.profiles.active>
      </properties>
    </profile>
    <profile>
      <id>native</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <configuration>
              <mainClass>io.github.microcks.MicrocksApplication</mainClass>
              <profiles>
                <profile>uber</profile>
              </profiles>
              <arguments>
                <argument>--spring.profiles.active=uber</argument>
              </arguments>
              <image>
                <!-- The new builder provided for Spring Boot 3.4.0 validates the GrralVM stuff but does not contain libc++6... -->
                <!-- <builder>paketobuildpacks/builder-jammy-java-tiny:latest</builder> -->

                <!-- This one is multi-arch compatible and works! -->
                <!-- <builder>lbroudoux/builder-jammy-java-base</builder> -->

                <!-- This one is multi-arch, distroless and works! -->
                <!-- <builder>lbroudoux/builder-jammy-java-tiny</builder> -->

                <builder>microcks/builder-noble-java-tiny</builder>

                <!-- Default one is not multi-arch compatible! -->
                <!-- <builder>paketobuildpacks/builder-jammy-tiny:latest</builder> -->
                <!-- Dashaun tiny is multi-arch but doesn't contain libc++6 needed for protoc -->
                <!-- <builder>dashaun/builder:tiny</builder> -->
                <!-- Dashaun base is multi-arch but we should remove it to force sha256 for CI -->
                <!-- builder>dashaun/builder:base</builder> -->
                <!-- linux/amd64 image -->
                <!-- <builder>dashaun/builder@sha256:92811b61280130099527b40c7650c871187a7e1cebb21744d93e480fc34cbcb0</builder> -->
                <!-- linux/arm64 image -->
                <!-- <builder>dashaun/builder@sha256:378bdc9fd7bdba105d64f294a8a7ca168dce5e496cad22307ccabb66fb571f9a</builder> -->
                <env>
                  <BP_JVM_VERSION>25</BP_JVM_VERSION>
                  <!-- <BP_JVM_VERSION>24</BP_JVM_VERSION> -->
                  <BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
                  <BP_NATIVE_IMAGE_BUILD_ARGUMENTS>--verbose --parallelism=6 -J-Xmx10g --initialize-at-run-time=io.netty.bootstrap,io.netty.buffer,io.netty.channel,io.netty.handler,io.netty.resolver,io.netty.util,io.grpc.netty.shaded.io.netty.bootstrap,io.grpc.netty.shaded.io.netty.buffer,io.grpc.netty.shaded.io.netty.channel,io.grpc.netty.shaded.io.netty.channel.socket.nio,io.grpc.netty.shaded.io.netty.handler,io.grpc.netty.shaded.io.netty.handler.ssl,io.grpc.netty.shaded.io.netty.internal.tcnative,io.grpc.netty.shaded.io.netty.resolver,io.grpc.netty.shaded.io.netty.util.internal,io.grpc.netty.shaded.io.netty.util.internal.logging,io.grpc.netty.shaded.io.netty.util,io.grpc.netty.shaded.io.netty.util.concurrent --trace-class-initialization=ch.qos.logback.classic.PatternLayout,ch.qos.logback.core.subst.Token,ch.qos.logback.core.pattern.parser.Parser,ch.qos.logback.core.model.processor.DefaultProcessor$1,org.springframework.boot.logging.logback.ColorConverter,ch.qos.logback.classic.Level,ch.qos.logback.classic.Logger,ch.qos.logback.core.CoreConstants,ch.qos.logback.core.status.StatusBase,ch.qos.logback.core.model.processor.ChainedModelFilter$1,ch.qos.logback.core.util.StatusPrinter,ch.qos.logback.core.util.Loader,ch.qos.logback.core.status.InfoStatus,ch.qos.logback.classic.model.processor.LogbackClassicDefaultNestedComponentRules,ch.qos.logback.core.util.Duration,ch.qos.logback.core.subst.NodeToStringTransformer$1,org.slf4j.LoggerFactory,ch.qos.logback.core.model.processor.ImplicitModelHandler$1,ch.qos.logback.core.subst.Parser$1</BP_NATIVE_IMAGE_BUILD_ARGUMENTS>
                </env>
              </image>
            </configuration>
            <executions>
              <execution>
                <id>process-aot</id>
                <goals>
                  <goal>process-aot</goal>
                </goals>
                <configuration>
                  <profiles>uber</profiles>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.graalvm.buildtools</groupId>
            <artifactId>native-maven-plugin</artifactId>
            <version>0.10.1</version>
            <extensions>true</extensions>
            <configuration>
              <classesDirectory>${project.build.outputDirectory}</classesDirectory>
              <metadataRepository>
                <enabled>true</enabled>
              </metadataRepository>
              <requiredVersion>23.1</requiredVersion>
              <agent>true</agent>
            </configuration>
            <executions>
              <execution>
                <id>add-reachability-metadata</id>
                <goals>
                  <goal>add-reachability-metadata</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>