<?xml version="1.0" encoding="UTF-8"?>
<!--
  #%L
  wcm.io
  %%
  Copyright (C) 2014 wcm.io
  %%
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  #L%
  -->

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>io.wcm.maven</groupId>
    <artifactId>io.wcm.maven.aem-global-parent</artifactId>
    <version>2.1.36</version>
    <relativePath />
  </parent>

  <groupId>io.wcm</groupId>
  <artifactId>io.wcm.parent_toplevel</artifactId>
  <version>2.5.2</version>
  <packaging>pom</packaging>

  <name>Toplevel Parent</name>
  <description>Toplevel POM for all wcm.io projects.</description>
  <url>${site.url}/${site.url.module.prefix}/</url>

  <scm>
    <connection>scm:git:https://github.com/wcm-io/wcm-io-tooling.git</connection>
    <developerConnection>scm:git:https://github.com/wcm-io/wcm-io-tooling.git</developerConnection>
    <url>https://github.com/wcm-io/wcm-io-tooling</url>
    <tag>HEAD</tag>
  </scm>

  <inceptionYear>2014</inceptionYear>

  <organization>
    <name>wcm.io</name>
    <url>https://wcm.io</url>
  </organization>

  <issueManagement>
    <system>GitHub</system>
    <url>https://github.com/wcm-io/${project.artifactId}/issues/</url>
  </issueManagement>

  <developers>
    <developer>
      <name>wcm.io Community</name>
      <organization>wcm.io</organization>
      <organizationUrl>https://wcm.io</organizationUrl>
    </developer>
  </developers>

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>

  <properties>

    <!-- Java version -->
    <java.version>11</java.version>

    <!-- Sling instance parameters -->
    <sling.url>http://localhost:4502</sling.url>
    <sling.user>admin</sling.user>
    <sling.password>admin</sling.password>

    <!-- site settings -->
    <site.url.module.prefix>tooling/parent_toplevel</site.url.module.prefix>
    <site.url>https://wcm.io</site.url>
    <site.deploy.id>ssh-wcm.io</site.deploy.id>
    <site.deploy.url>scm:git:https://github.com/wcm-io/wcm-io.github.io.git</site.deploy.url>

    <!-- Versions -->
    <mockito.version>5.18.0</mockito.version>

    <!-- set default empty argLine when not executing jacoco -->
    <argLine />

    <!-- Set to 'enabled' to activate org.eclipse.jdt.core.compiler.annotation.nullanalysis feature in eclipse settings -->
    <eclipse.settings.nullanalysis>enabled</eclipse.settings.nullanalysis>

    <!-- SonarCloud -->
    <sonar.organization>wcm-io</sonar.organization>
    <sonar.host.url>https://sonarcloud.io</sonar.host.url>

  </properties>

  <!-- default dependencies for all projects -->
  <dependencies>

    <!-- Recommended global dependency for nullability annotations -->
    <dependency>
      <groupId>org.jetbrains</groupId>
      <artifactId>annotations</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- Spotbugs annotations -->
    <dependency>
      <groupId>io.wcm.tooling.spotbugs</groupId>
      <artifactId>io.wcm.tooling.spotbugs.annotations</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- OSGi bundle and versioning annotations -->
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.annotation.bundle</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.annotation.versioning</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- OSGi DS and metatype annotations -->
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.service.component.annotations</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.service.metatype.annotations</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.servlets.annotations</artifactId>
      <scope>provided</scope>
    </dependency>

  </dependencies>

  <dependencyManagement>
    <dependencies>

      <!-- Import AEM dependencies -->
      <dependency>
        <groupId>io.wcm.maven</groupId>
        <artifactId>io.wcm.maven.aem-dependencies</artifactId>
        <version>6.5.17.0001</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!-- Testing -->
      <dependency>
        <groupId>org.apache.sling</groupId>
        <artifactId>org.apache.sling.testing.hamcrest</artifactId>
        <version>1.1.0</version>
      </dependency>
      <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
        <version>5.13.4</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${mockito.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>${mockito.version}</version>
      </dependency>

    </dependencies>
  </dependencyManagement>

  <build>
    <extensions>

      <!-- Add wcm.io file header to code templates -->
      <extension>
        <groupId>io.wcm.maven</groupId>
        <artifactId>io.wcm.maven.global-build-tools-mixin</artifactId>
        <version>2</version>
      </extension>

    </extensions>
    <plugins>

      <!-- license check -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>license-maven-plugin</artifactId>
        <executions>
          <execution>
            <phase>validate</phase>
            <goals>
              <goal>check-file-header</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <!-- site configuration -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <dependencies>
          <dependency>
            <groupId>io.wcm.maven.skins</groupId>
            <artifactId>reflow-velocity-tools</artifactId>
            <version>1.1.0</version>
          </dependency>
        </dependencies>
        <configuration>
          <generateReports>true</generateReports>
          <inputEncoding>UTF-8</inputEncoding>
          <outputEncoding>UTF-8</outputEncoding>
        </configuration>
        <executions>
          <execution>
            <id>attach-descriptor</id>
            <goals>
              <goal>attach-descriptor</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <!-- maven-bundle-plugin is no longer allowed in wcm.io projects -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>ban-maven-bundle-plugin</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedPlugins>
                  <excludes>
                    <exclude>org.apache.felix:maven-bundle-plugin</exclude>
                  </excludes>
                  <message>Apache Felix maven-bundle-plugin must not longer be used in wcm.io Modules - migrate to bnd Maven plugins.</message>
                </bannedPlugins>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- Workaround for change of report filename changes-report.html to changes.html with maven-changes-plugin 3.x
           We have a lot of links out there from GitHub releases, and we cannot configure a server-side redirect for GitHub pages.
           So, create a file that redirects to the new report name here. -->
      <plugin>
        <groupId>io.github.olivierlemasle.maven</groupId>
        <artifactId>plaintext-maven-plugin</artifactId>
        <version>1.0.0</version>
        <configuration>
          <files>
            <file>
              <name>site/changes-report.html</name>
              <lines>
                <line><![CDATA[<!DOCTYPE html>]]></line>
                <line><![CDATA[<html>]]></line>
                <line><![CDATA[<head><meta http-equiv="refresh" content="0;url=changes.html"></head>]]></line>
                <line><![CDATA[<body>Filename changed to <a href="changes.html">changes.html</a>.</body>]]></line>
                <line><![CDATA[</html>]]></line>
              </lines>
            </file>
          </files>
        </configuration>
        <executions>
          <execution>
            <id>generate-file</id>
            <phase>site</phase>
            <goals>
              <goal>write</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

    </plugins>

    <pluginManagement>
      <plugins>

        <plugin>
          <groupId>biz.aQute.bnd</groupId>
          <artifactId>bnd-maven-plugin</artifactId>
          <configuration>
            <bnd>
              Bundle-Category: wcm.io
              Bundle-Vendor: wcm.io
              Bundle-Name: wcm.io ${project.name}
              Bundle-DocURL: ${project.url}
            </bnd>
          </configuration>
        </plugin>

        <plugin>
          <groupId>biz.aQute.bnd</groupId>
          <artifactId>bnd-baseline-maven-plugin</artifactId>
          <configuration>
            <includeDistributionManagement>false</includeDistributionManagement>
            <fullReport>true</fullReport>
            <diffignores>
              <!-- ignore Bundle-Version header for baseline, i.e. no enforcement of specific bundle versions -->
              <diffignore>Bundle-Version</diffignore>
            </diffignores>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>license-maven-plugin</artifactId>
          <configuration>
            <licenseName>apache_v2</licenseName>
            <addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage>
            <projectName>wcm.io</projectName>
            <excludes>
              <exclude>**/*.json</exclude>
              <exclude>**/*.html</exclude>
            </excludes>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <configuration>
            <excludePackageNames>*.impl:*.impl.*</excludePackageNames>
            <notimestamp>true</notimestamp>
            <!-- Avoid https://bugs.openjdk.java.net/browse/JDK-8212233 while building for Java 8 -->
            <detectJavaApiLink>false</detectJavaApiLink> 
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>

            <!-- Activate parallel test execution for JUnit 5 (run classes concurrently, methods sequentially) -->
            <properties>
              <configurationParameters>
                junit.jupiter.execution.parallel.enabled = true
                junit.jupiter.execution.parallel.mode.default = same_thread
                junit.jupiter.execution.parallel.mode.classes.default = concurrent
              </configurationParameters>
            </properties>

          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <configuration>
            <projectVersionPolicyId>OddEvenVersionPolicy</projectVersionPolicyId>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.release</groupId>
              <artifactId>maven-release-oddeven-policy</artifactId>
              <version>${maven-release-plugin.version}</version>
            </dependency>
          </dependencies>
        </plugin>

        <plugin>
          <groupId>com.amashchenko.maven.plugin</groupId>
          <artifactId>gitflow-maven-plugin</artifactId>
          <configuration>
            <projectVersionPolicyId>OddEvenVersionPolicy</projectVersionPolicyId>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.release</groupId>
              <artifactId>maven-release-oddeven-policy</artifactId>
              <version>${maven-release-plugin.version}</version>
            </dependency>
          </dependencies>
        </plugin>

      </plugins>

    </pluginManagement>
  </build>

  <reporting>
    <plugins>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <inherited>true</inherited>
        <reportSets>
          <reportSet>
            <reports>
              <report>index</report>
              <report>dependencies</report>
              <report>scm</report>
              <report>licenses</report>
              <report>summary</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changes-plugin</artifactId>
        <configuration>
          <!-- Allow HTML markup in CDATA sections in changes reports -->
          <escapeText>false</escapeText>
          <!-- Do not generate links to teamlist reports -->
          <teamlist>none</teamlist>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <!-- select non-aggregate reports -->
              <report>report</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>

    </plugins>
  </reporting>

  <profiles>

    <!-- profile used for building releases and deployment to sonatype/maven central -->
    <profile>
      <id>release-profile</id>
      <activation>
        <property>
          <name>performRelease</name>
          <value>true</value>
        </property>
      </activation>
      <build>
        <plugins>
          <!-- sign the build -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <inherited>true</inherited>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <!-- configure staging process at sonatype.-->
          <plugin>
            <groupId>org.sonatype.central</groupId>
            <artifactId>central-publishing-maven-plugin</artifactId>
            <inherited>true</inherited>
            <extensions>true</extensions>
            <configuration>
              <publishingServerId>sonatype-central</publishingServerId>
              <deploymentName>${project.artifactId} ${project.version}</deploymentName>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- Disable parallel test execution for JUnit 5 for Java 21: We had problems in some modules with ThreadsafeMockAdapterManagerWrapper not working properly on GitHub runners -->
    <profile>
      <id>disable-junit5-parallel-test-execution-java21</id>
      <activation>
        <jdk>21</jdk>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <configuration>
                <properties>
                  <configurationParameters>
                    junit.jupiter.execution.parallel.enabled = false
                  </configurationParameters>
                </properties>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>

  </profiles>

  <distributionManagement>
    <site>
      <id>${site.deploy.id}</id>
      <name>Maven Site Deployment</name>
      <url>${site.deploy.url}</url>
    </site>
  </distributionManagement>

</project>
