<!--
  ============LICENSE_START=======================================================
   Copyright (C) 2021-2022 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.0-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 sub-module, 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>
            </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>
            </properties>
        </profile>
    </profiles>
</project>

