<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
        <groupId>org.apache.knox</groupId>
        <artifactId>gateway</artifactId>
        <version>2.0.0-SNAPSHOT</version>
  </parent>

  <artifactId>gateway-release-common</artifactId>
  <packaging>pom</packaging>

  <name>gateway-release-common</name>
  <description>Contains common resources to be used by released artifacts</description>
  
  <profiles>
        <profile>
           <!-- Running this profile require you to have the 'shellcheck' tool installed on your DEV environment. Check out https://github.com/koalaman/shellcheck#installing for more information -->
           <activation>
               <property>
                   <name>shellcheck</name>
                   <value>true</value>
               </property>
           </activation>
           <build>
               <plugins>
                   <plugin>
                       <groupId>dev.dimlight</groupId>
                       <artifactId>shellcheck-maven-plugin</artifactId>
                       <executions>
                           <execution>
                               <id>shellcheck_verification</id>
                               <phase>validate</phase>
                               <goals>
                                   <goal>check</goal>
                               </goals>
                               <configuration>
                                   <sourceDirs>
                                       <sourceDir>
                                           <directory>${project.basedir}/home/bin/</directory>
                                           <includes>
                                               <include>knox-functions.sh</include>
                                               <include>knox-env.sh</include>
                                           </includes>
                                       </sourceDir>
                                   </sourceDirs>
                               </configuration>
                           </execution>
                       </executions>
                   </plugin>
               </plugins>
           </build>
        </profile>
  </profiles>
</project>
