<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ QQQ - Low-code Application Framework for Engineers.
  ~ Copyright (C) 2021-2022.  Kingsrook, LLC
  ~ 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
  ~ contact@kingsrook.com
  ~ https://github.com/Kingsrook/
  ~
  ~ This program is free software: you can redistribute it and/or modify
  ~ it under the terms of the GNU Affero General Public License as
  ~ published by the Free Software Foundation, either version 3 of the
  ~ License, or (at your option) any later version.
  ~
  ~ This program is distributed in the hope that it will be useful,
  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  ~ GNU Affero General Public License for more details.
  ~
  ~ You should have received a copy of the GNU Affero General Public License
  ~ along with this program.  If not, see <https://www.gnu.org/licenses/>.
  -->

<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">
   <modelVersion>4.0.0</modelVersion>

   <artifactId>qqq-utility-lambdas</artifactId>

   <parent>
      <groupId>com.kingsrook.qqq</groupId>
      <artifactId>qqq-parent-project</artifactId>
      <version>${revision}</version>
   </parent>

   <properties>
      <!-- props specifically to this module -->
      <maven.compiler.source>11</maven.compiler.source>
      <maven.compiler.target>11</maven.compiler.target>
   </properties>

   <dependencies>
      <!-- 3rd party deps specifically for this module -->
      <dependency>
         <groupId>com.amazonaws</groupId>
         <artifactId>aws-lambda-java-core</artifactId>
         <version>1.2.1</version>
      </dependency>
      <dependency>
         <groupId>com.amazonaws</groupId>
         <artifactId>aws-java-sdk-sqs</artifactId>
         <version>1.12.321</version>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <!-- Common plugins for all qqq modules -->
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
               <compilerArgument>-Xlint:unchecked</compilerArgument>
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M5</version>
            <configuration>
               <!-- Sets the VM argument line used when integration tests are run. -->
               <argLine>@{jaCoCoArgLine}</argLine>
            </configuration>
         </plugin>
         <!--
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>3.1.2</version>
            <dependencies>
               <dependency>
                  <groupId>com.puppycrawl.tools</groupId>
                  <artifactId>checkstyle</artifactId>
                  <version>9.0</version>
               </dependency>
            </dependencies>
            <executions>
               <execution>
                  <id>validate</id>
                  <phase>validate</phase>
                  <configuration>
                     <configLocation>checkstyle/config.xml</configLocation>
                     <headerLocation>checkstyle/license.txt</headerLocation>
                     <encoding>UTF-8</encoding>
                     <consoleOutput>true</consoleOutput>
                     <failsOnError>false</failsOnError>
                     <failOnViolation>true</failOnViolation>
                     <violationSeverity>warning</violationSeverity>
                     <excludes>**/target/generated-sources/*.*</excludes>
                  </configuration>
                  <goals>
                     <goal>check</goal>
                  </goals>
               </execution>
            </executions>
         </plugin>
         -->
         <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>flatten-maven-plugin</artifactId>
            <version>1.1.0</version>
            <configuration>
               <updatePomFile>true</updatePomFile>
               <flattenMode>resolveCiFriendliesOnly</flattenMode>
            </configuration>
            <executions>
               <execution>
                  <id>flatten</id>
                  <phase>process-resources</phase>
                  <goals>
                     <goal>flatten</goal>
                  </goals>
               </execution>
               <execution>
                  <id>flatten.clean</id>
                  <phase>clean</phase>
                  <goals>
                     <goal>clean</goal>
                  </goals>
               </execution>
            </executions>
         </plugin>
         <plugin>
            <groupId>com.amashchenko.maven.plugin</groupId>
            <artifactId>gitflow-maven-plugin</artifactId>
            <version>1.18.0</version>
            <configuration>
               <gitFlowConfig>
                  <productionBranch>main</productionBranch>
                  <developmentBranch>dev</developmentBranch>
                  <versionTagPrefix>version-</versionTagPrefix>
               </gitFlowConfig>
               <skipFeatureVersion>true</skipFeatureVersion> <!-- Keep feature names out of versions -->
               <postReleaseGoals>install</postReleaseGoals>  <!-- Let CI run deploys -->
               <commitDevelopmentVersionAtStart>true</commitDevelopmentVersionAtStart>
               <versionDigitToIncrement>1</versionDigitToIncrement> <!-- In general, we update the minor -->
               <versionProperty>revision</versionProperty>
               <skipUpdateVersion>true</skipUpdateVersion>
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.8</version>
            <executions>
               <execution>
                  <id>pre-unit-test</id>
                  <goals>
                     <goal>prepare-agent</goal>
                  </goals>
                  <configuration>
                     <propertyName>jaCoCoArgLine</propertyName>
                  </configuration>
               </execution>
               <execution>
                  <id>unit-test-check</id>
                  <goals>
                     <goal>check</goal>
                  </goals>
                  <configuration>
                     <!-- Gives us the ability to pass a parameter to not fail due to coverage E.g. -Dcoverage.haltOnFailure=false -->
                     <haltOnFailure>${coverage.haltOnFailure}</haltOnFailure>
                     <rules>
                        <rule>
                           <element>BUNDLE</element>
                           <limits>
                              <limit>
                                 <counter>INSTRUCTION</counter>
                                 <value>COVEREDRATIO</value>
                                 <minimum>${coverage.instructionCoveredRatioMinimum}</minimum>
                              </limit>
                              <limit>
                                 <counter>CLASS</counter>
                                 <value>COVEREDRATIO</value>
                                 <minimum>${coverage.classCoveredRatioMinimum}</minimum>
                              </limit>
                           </limits>
                        </rule>
                     </rules>
                  </configuration>
               </execution>
               <execution>
                  <id>post-unit-test</id>
                  <phase>verify</phase>
                  <goals>
                     <goal>report</goal>
                  </goals>
               </execution>
            </executions>
         </plugin>
         <plugin>
            <artifactId>exec-maven-plugin</artifactId>
            <groupId>org.codehaus.mojo</groupId>
            <version>3.0.0</version>
            <executions>
               <execution>
                  <id>test-coverage-summary</id>
                  <phase>verify</phase>
                  <goals>
                     <goal>exec</goal>
                  </goals>
                  <configuration>
                     <executable>sh</executable>
                     <arguments>
                        <argument>-c</argument>
                        <argument>
                           <![CDATA[
if [ ! -e target/site/jacoco/index.html ]; then
   echo "No jacoco coverage report here.";
   exit;
fi

echo
echo "Jacoco coverage summary report:"
echo "   See also target/site/jacoco/index.html"
echo "   and https://www.jacoco.org/jacoco/trunk/doc/counters.html"
echo "------------------------------------------------------------"
which xpath > /dev/null 2>&1
if [ "$?" == "0" ]; then
   echo "Element\nInstructions Missed\nInstruction Coverage\nBranches Missed\nBranch Coverage\nComplexity Missed\nComplexity Hit\nLines Missed\nLines Hit\nMethods Missed\nMethods Hit\nClasses Missed\nClasses Hit\n" > /tmp/$$.headers
   xpath -n -q -e '/html/body/table/tfoot/tr[1]/td/text()' target/site/jacoco/index.html > /tmp/$$.values
   paste /tmp/$$.headers /tmp/$$.values | tail +2 | awk -v FS='\t' '{printf("%-20s %s\n",$1,$2)}'
   rm /tmp/$$.headers /tmp/$$.values
else
   echo "xpath is not installed.  Jacoco coverage summary will not be produced here..";
fi
                           ]]>
                        </argument>
                     </arguments>
                  </configuration>
               </execution>
            </executions>
         </plugin>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <configuration>
               <createDependencyReducedPom>false</createDependencyReducedPom>
               <filters>
                  <filter>
                     <artifact>*:*</artifact>
                     <excludes>
                        <exclude>META-INF/*</exclude>
                     </excludes>
                  </filter>
               </filters>
            </configuration>
            <executions>
               <execution>
                  <phase>package</phase>
                  <goals>
                     <goal>shade</goal>
                  </goals>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>

   <repositories>
      <repository>
         <id>github-qqq-maven-registry</id>
         <name>GitHub QQQ Maven Registry</name>
         <url>https://maven.pkg.github.com/Kingsrook/qqq-maven-registry</url>
      </repository>
   </repositories>

   <distributionManagement>
      <repository>
         <id>github-qqq-maven-registry</id>
         <name>GitHub QQQ Maven Registry</name>
         <url>https://maven.pkg.github.com/Kingsrook/qqq-maven-registry</url>
      </repository>
   </distributionManagement>

</project>
