<!--
  ============LICENSE_START=======================================================
   Copyright (C) 2021-2023 Nordix Foundation.
  ================================================================================
  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.

  SPDX-License-Identifier: Apache-2.0
  ============LICENSE_END=========================================================
-->
<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.onap.policy.clamp</groupId>
        <artifactId>policy-clamp</artifactId>
        <version>7.0.4-SNAPSHOT</version>
    </parent>

    <artifactId>clamp-packages</artifactId>
    <packaging>pom</packaging>

    <name>${project.artifactId}</name>
    <description>[${project.parent.artifactId}] packaging</description>

    <properties>
        <!-- There is no code in this submodule, only holds interfaces. So skip sonar. -->
        <sonar.skip>true</sonar.skip>
    </properties>

    <profiles>
        <profile>
            <id>default</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <modules>
                <module>policy-clamp-tarball</module>
            </modules>
        </profile>
        <profile>
            <id>docker</id>
            <modules>
                <module>policy-clamp-tarball</module>
                <module>policy-clamp-docker</module>
            </modules>
            <properties>
                <docker.skip.push>false</docker.skip.push>
                <docker.clamp-runtime-acm.dockerFile>AcmRuntime.Dockerfile</docker.clamp-runtime-acm.dockerFile>
                <docker.clamp-ac-pf-ppnt.dockerFile>PolicyParticipant.Dockerfile</docker.clamp-ac-pf-ppnt.dockerFile>
                <docker.clamp-ac-k8s-ppnt.dockerFile>KubernetesParticipant.Dockerfile
                </docker.clamp-ac-k8s-ppnt.dockerFile>
                <docker.clamp-ac-http-ppnt.dockerFile>HttpParticipant.Dockerfile</docker.clamp-ac-http-ppnt.dockerFile>
                <docker.clamp-ac-a1pms-ppnt.dockerFile>A1pmsParticipant.Dockerfile
                </docker.clamp-ac-a1pms-ppnt.dockerFile>
                <docker.clamp-ac-kserve-ppnt.dockerFile>KserveParticipant.Dockerfile
                </docker.clamp-ac-kserve-ppnt.dockerFile>
                <docker.clamp-acm-element-impl.dockerFile>ElementParticipant.Dockerfile
                </docker.clamp-acm-element-impl.dockerFile>
                <docker.clamp-ac-sim-ppnt.dockerFile>SimParticipant.Dockerfile</docker.clamp-ac-sim-ppnt.dockerFile>
            </properties>
        </profile>
        <profile>
            <id>dockersuse</id>
            <modules>
                <module>policy-clamp-tarball</module>
                <module>policy-clamp-docker</module>
            </modules>
            <properties>
                <docker.skip.push>false</docker.skip.push>
                <docker.clamp-runtime-acm.dockerFile>AcmRuntime-Suse.Dockerfile</docker.clamp-runtime-acm.dockerFile>
                <docker.clamp-ac-pf-ppnt.dockerFile>PolicyParticipant-Suse.Dockerfile
                </docker.clamp-ac-pf-ppnt.dockerFile>
                <docker.clamp-ac-k8s-ppnt.dockerFile>KubernetesParticipant-Suse.Dockerfile
                </docker.clamp-ac-k8s-ppnt.dockerFile>
                <docker.clamp-ac-http-ppnt.dockerFile>HttpParticipant-Suse.Dockerfile
                </docker.clamp-ac-http-ppnt.dockerFile>
                <docker.clamp-ac-a1pms-ppnt.dockerFile>A1pmsParticipant-Suse.Dockerfile
                </docker.clamp-ac-a1pms-ppnt.dockerFile>
                <docker.clamp-ac-kserve-ppnt.dockerFile>KserveParticipant-Suse.Dockerfile
                </docker.clamp-ac-kserve-ppnt.dockerFile>
                <docker.clamp-acm-element-impl.dockerFile>ElementParticipant-Suse.Dockerfile
                </docker.clamp-acm-element-impl.dockerFile>
                <docker.clamp-ac-sim-ppnt.dockerFile>SimParticipant-Suse.Dockerfile
                </docker.clamp-ac-sim-ppnt.dockerFile>
            </properties>
        </profile>
    </profiles>
</project>

