<?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.oltu</groupId>
    <artifactId>org.apache.oltu.parent</artifactId>
    <version>4-SNAPSHOT</version>
    <relativePath>../parent</relativePath>
  </parent>

  <groupId>org.apache.oltu.openidconnect</groupId>
  <artifactId>org.apache.oltu.openidconnect.parent</artifactId>
  <version>1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Apache Oltu - OpenId Connect</name>

  <scm>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/oltu/trunk/openid-connect</developerConnection>
    <connection>scm:svn:https://svn.apache.org/repos/asf/oltu/trunk/openid-connect</connection>
    <url>https://svn.apache.org/repos/asf/oltu/trunk/openid-connect</url>
  </scm>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>${siteUrlDeployment}</url>
    </site>
  </distributionManagement>
  <ciManagement>
    <system>Jenkins</system>
    <url>https://builds.apache.org/job/Oltu-OpenID-Conect/</url>
    <notifiers>
     <notifier>
       <type>mail</type>
       <sendOnError>true</sendOnError>
       <sendOnFailure>true</sendOnFailure>
       <sendOnSuccess>false</sendOnSuccess>
       <sendOnWarning>false</sendOnWarning>
       <configuration><address>dev@oltu.apache.org</address></configuration>
     </notifier>
   </notifiers>
  </ciManagement>

  <properties>
    <osgi.export>org.apache.oltu.openidconnect.*;version=${project.version}</osgi.export>
  </properties>

  <modules>
    <module>common</module>
    <module>client</module>
  </modules>

  <profiles>
    <profile>
      <id>site</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <configuration>
              <inputDirectory>${project.reporting.outputDirectory}/apidocs</inputDirectory>
            </configuration>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-scm-publish-plugin</artifactId>
            <configuration>
              <checkoutDirectory>${scmPubCheckoutDirectory}</checkoutDirectory>
              <pubScmUrl>scm:svn:https://svn.apache.org/repos/asf/oltu/site/apidocs/openid-connect</pubScmUrl>
              <checkinComment>Oltu OpenID Connect apidocs deployment</checkinComment>
              <content>${project.build.directory}/staging</content>
              <tryUpdate>true</tryUpdate>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
