<?xml version="1.0" encoding="UTF-8"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
license agreements. See the NOTICE file distributed with this work for additional
information regarding copyright ownership. The ASF licenses this file to
You 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. -->
<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>org.apache.nifi</groupId>
        <artifactId>nifi-toolkit</artifactId>
        <version>1.19.0-SNAPSHOT</version>
    </parent>
    <artifactId>nifi-toolkit-assembly</artifactId>
    <packaging>pom</packaging>
    <description>This is the assembly for the Apache NiFi Toolkit</description>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <excludes combine.children="append">
                        <exclude>src/main/resources/conf/config-client.json</exclude>
                        <exclude>src/main/resources/conf/config-server.json</exclude>
                        <exclude>docker/tests/tls-toolkit.sh</exclude>
                        <exclude>docker/tests/exit-codes.sh</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <finalName>nifi-toolkit-${project.version}</finalName>
                </configuration>
                <executions>
                    <execution>
                        <id>make shared resource</id>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <archiverConfig>
                                <defaultDirectoryMode>0755</defaultDirectoryMode>
                                <directoryMode>0755</directoryMode>
                                <fileMode>0644</fileMode>
                            </archiverConfig>
                            <descriptors>
                                <descriptor>src/main/assembly/dependencies.xml</descriptor>
                            </descriptors>
                            <tarLongFileMode>posix</tarLongFileMode>
                            <formats>zip</formats>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-toolkit-tls</artifactId>
            <version>1.19.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-toolkit-encrypt-config</artifactId>
            <version>1.19.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-toolkit-s2s</artifactId>
            <version>1.19.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-toolkit-admin</artifactId>
            <version>1.19.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-toolkit-zookeeper-migrator</artifactId>
            <version>1.19.0-SNAPSHOT</version>
        </dependency>
          <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-toolkit-flowanalyzer</artifactId>
            <version>1.19.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-toolkit-cli</artifactId>
            <version>1.19.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>compile</scope>
        </dependency>

        <!-- dependencies for jaxb/activation/annotation for running NiFi on Java 11 -->
        <!-- TODO: remove these once minimum Java version is 11 -->
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>${jakarta.xml.bind-api.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>${jaxb.runtime.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>


    <profiles>
        <profile>
            <id>docker</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>copy-resources</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>${project.basedir}/target/docker-build</outputDirectory>
                                    <resources>
                                        <resource>
                                            <directory>docker</directory>
                                            <filtering>true</filtering>
                                            <includes>
                                                <include>Dockerfile</include>
                                                <include>**/sh/*.sh</include>
                                            </includes>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Copy generated artifact to nifi-docker -->
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.8</version>
                        <executions>
                            <execution>
                                <id>copy-for-docker</id>
                                <phase>package</phase>
                                <configuration>
                                    <target name="copy assembly to docker for image build">
                                        <copy todir="${project.basedir}/target/docker-build" overwrite="true" flatten="true">
                                            <fileset dir="${project.basedir}/target" includes="*.tar.gz">
                                                <include name="*.tar.gz" />
                                            </fileset>
                                        </copy>
                                    </target>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>com.spotify</groupId>
                        <artifactId>dockerfile-maven-plugin</artifactId>
                        <version>1.3.5</version>
                        <executions>
                            <execution>
                                <id>default</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>build</goal>
                                </goals>
                                <configuration>
                                    <contextDirectory>./target/docker-build</contextDirectory>
                                    <buildArgs>
                                        <UID>1000</UID>
                                        <GID>1000</GID>
                                        <NIFI_TOOLKIT_VERSION>${project.version}</NIFI_TOOLKIT_VERSION>
                                    </buildArgs>
                                    <repository>apache/nifi-toolkit</repository>
                                    <tag>${project.version}</tag>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>exec-maven-plugin</artifactId>
                        <groupId>org.codehaus.mojo</groupId>
                        <executions>
                            <execution>
                                <id>Docker integration tests - exit codes</id>
                                <phase>integration-test</phase>
                                <goals>
                                    <goal>exec</goal>
                                </goals>
                                <configuration>
                                    <arguments>
                                        <argument>${project.version}</argument>
                                    </arguments>
                                    <executable>${project.basedir}/docker/tests/exit-codes.sh</executable>
                                </configuration>
                            </execution>
                            <execution>
                                <id>Docker integration tests - tls-toolkit</id>
                                <phase>integration-test</phase>
                                <goals>
                                    <goal>exec</goal>
                                </goals>
                                <configuration>
                                    <arguments>
                                        <argument>${project.version}</argument>
                                    </arguments>
                                    <executable>${project.basedir}/docker/tests/tls-toolkit.sh</executable>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>docker-skip-tests</id>
            <activation>
                <property>
                    <name>skipTests</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>exec-maven-plugin</artifactId>
                        <groupId>org.codehaus.mojo</groupId>
                        <executions>
                            <execution>
                                <id>Docker integration tests - exit codes</id>
                                <phase>none</phase>
                            </execution>
                            <execution>
                                <id>Docker integration tests - tls-toolkit</id>
                                <phase>none</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>docker-test-skip-test</id>
            <activation>
                <property>
                    <name>maven.test.skip</name>
                    <value>true</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>exec-maven-plugin</artifactId>
                        <groupId>org.codehaus.mojo</groupId>
                        <executions>
                            <execution>
                                <id>Docker integration tests - exit codes</id>
                                <phase>none</phase>
                            </execution>
                            <execution>
                                <id>Docker integration tests - tls-toolkit</id>
                                <phase>none</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>rpm</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>rpm-maven-plugin</artifactId>
                        <configuration>
                            <name>nifi-toolkit</name>
                            <summary>Apache NiFi Toolkit</summary>
                            <description>The NiFi Toolkit contains several command line utilities to setup and support NiFi in standalone and clustered environments.</description>
                            <license>Apache License, Version 2.0 and others (see included LICENSE file)</license>
                            <url>https://nifi.apache.org/docs/nifi-docs/html/toolkit-guide.html</url>
                            <group>Utilities</group>
                            <prefix>/opt/nifi</prefix>
                            <defineStatements>
                                <defineStatement>_use_internal_dependency_generator 0</defineStatement>
                            </defineStatements>
                            <defaultDirmode>750</defaultDirmode>
                            <defaultFilemode>640</defaultFilemode>
                            <defaultUsername>nifi</defaultUsername>
                            <defaultGroupname>nifi</defaultGroupname>
                        </configuration>
                        <executions>
                            <execution>
                                <id>build-bin-rpm</id>
                                <goals>
                                    <goal>attached-rpm</goal>
                                </goals>
                                <configuration>
                                    <classifier>bin</classifier>
                                    <provides>
                                        <provide>nifi</provide>
                                    </provides>
                                    <mappings>
                                        <mapping>
                                            <directory>/opt/nifi</directory>
                                        </mapping>
                                        <mapping>
                                            <directory>/opt/nifi/nifi-toolkit-${project.version}</directory>
                                        </mapping>
                                        <mapping>
                                            <directory>/opt/nifi/nifi-toolkit-${project.version}</directory>
                                            <sources>
                                                <source>
                                                    <location>${project.build.directory}/nifi-toolkit-${project.version}-bin/nifi-toolkit-${project.version}/LICENSE</location>
                                                </source>
                                                <source>
                                                    <location>${project.build.directory}/nifi-toolkit-${project.version}-bin/nifi-toolkit-${project.version}/NOTICE</location>
                                                </source>
                                            </sources>
                                        </mapping>
                                        <mapping>
                                            <directory>/opt/nifi/nifi-toolkit-${project.version}/bin</directory>
                                            <filemode>750</filemode>
                                            <sources>
                                                <source>
                                                    <location>${project.build.directory}/nifi-toolkit-${project.version}-bin/nifi-toolkit-${project.version}/bin</location>
                                                </source>
                                            </sources>
                                        </mapping>
                                        <mapping>
                                            <directory>/opt/nifi/nifi-toolkit-${project.version}/classpath</directory>
                                            <sources>
                                                <source>
                                                    <location>${project.build.directory}/nifi-toolkit-${project.version}-bin/nifi-toolkit-${project.version}/classpath</location>
                                                </source>
                                            </sources>
                                        </mapping>
                                        <mapping>
                                            <directory>/opt/nifi/nifi-toolkit-${project.version}/conf</directory>
                                            <configuration>true</configuration>
                                            <sources>
                                                <source>
                                                    <location>${project.build.directory}/nifi-toolkit-${project.version}-bin/nifi-toolkit-${project.version}/conf</location>
                                                    <filter>true</filter>
                                                </source>
                                            </sources>
                                        </mapping>
                                        <mapping>
                                            <directory>/opt/nifi/nifi-toolkit-${project.version}/lib</directory>
                                            <sources>
                                                <source>
                                                    <location>${project.build.directory}/nifi-toolkit-${project.version}-bin/nifi-toolkit-${project.version}/lib</location>
                                                </source>
                                            </sources>
                                        </mapping>
                                    </mappings>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>targz</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
            <plugins>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <finalName>nifi-toolkit-${project.version}</finalName>
                    </configuration>
                    <executions>
                        <execution>
                            <id>make shared resource</id>
                            <goals>
                                <goal>single</goal>
                            </goals>
                            <phase>package</phase>
                            <configuration>
                                <archiverConfig>
                                    <defaultDirectoryMode>0755</defaultDirectoryMode>
                                    <directoryMode>0755</directoryMode>
                                    <fileMode>0644</fileMode>
                                </archiverConfig>
                                <descriptors>
                                    <descriptor>src/main/assembly/dependencies.xml</descriptor>
                                </descriptors>
                                <tarLongFileMode>posix</tarLongFileMode>
                                <formats>tar.gz</formats>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
            </build>
        </profile>
        <profile>
            <id>dir-only</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <configuration>
                            <finalName>nifi-toolkit-${project.version}</finalName>
                        </configuration>
                        <executions>
                            <execution>
                                <id>make shared resource</id>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <phase>package</phase>
                                <configuration>
                                    <archiverConfig>
                                        <defaultDirectoryMode>0755</defaultDirectoryMode>
                                        <directoryMode>0755</directoryMode>
                                        <fileMode>0644</fileMode>
                                    </archiverConfig>
                                    <descriptors>
                                        <descriptor>src/main/assembly/dependencies.xml</descriptor>
                                    </descriptors>
                                    <formats>dir</formats>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>