<?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">
    <parent>
        <artifactId>wayang</artifactId>
        <groupId>org.apache.wayang</groupId>
        <version>0.6.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>wayang-docs</artifactId>
    <description>Generation of the documentation with jekyll</description>

    <properties>
        <github.global.server>github</github.global.server>
        <current.time>${maven.build.timestamp}</current.time>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>de.saumya.mojo</groupId>
                <artifactId>gem-maven-plugin</artifactId>
                <version>1.1.8</version>
                <executions>
                    <execution>
                        <id>bundle-install</id>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <file>${env.GEM_HOME}/bin/bundle</file>
                            <execArgs>install --gemfile=${project.basedir}/src/main/resources/Gemfile</execArgs>
                        </configuration>
                        <phase>generate-resources</phase>
                    </execution>
                    <execution>
                        <id>generate-documentation</id>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <phase>generate-resources</phase>
                        <configuration>
                            <file>${env.GEM_HOME}/bin/jekyll</file>
                            <execArgs>build --trace --source ${project.basedir}/src/main/resources --destination ${project.build.outputDirectory}/site/website/docs/${project.version} --baseurl /docs/${project.version}/ --config src/main/resources/_config.prod.yml</execArgs>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-documentation-as-latest</id>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <phase>generate-resources</phase>
                        <configuration>
                            <file>${env.GEM_HOME}/bin/jekyll</file>
                            <execArgs>build --trace --source ${project.basedir}/src/main/resources --destination ${project.build.outputDirectory}/site/website/docs/latest  --baseurl /docs/latest/  --config src/main/resources/_config.prod.yml</execArgs>
                        </configuration>
                    </execution>
                    <execution>
                        <!-- run me with: mvn gem:exec@jekyll-serve -->
                        <id>jekyll-serve</id>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <file>${env.GEM_HOME}/bin/jekyll</file>
                            <execArgs>serve --trace --source ${project.basedir}/src/main/resources --destination ${project.build.outputDirectory}</execArgs>
                        </configuration>
                        <phase>none</phase>
                    </execution>
                </executions>
                <configuration>
                    <gemHome>${env.GEM_HOME}/</gemHome>
                    <gemPath>${env.GEM_HOME}/</gemPath>
                    <supportNative>true</supportNative>
                    <jrubyVersion>9.2.5.0</jrubyVersion>
                    <addProjectClasspath>true</addProjectClasspath>
                    <jrubyVerbose>false</jrubyVerbose>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>timestamp-property</id>
                        <goals>
                            <goal>timestamp-property</goal>
                        </goals>
                        <configuration>
                            <name>current.time</name>
                            <pattern>yyyy/MM/dd HH:mm:ss</pattern>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.github.github</groupId>
                <artifactId>site-maven-plugin</artifactId>
                <version>0.12</version>
                <configuration>
                    <noJekyll>true</noJekyll>
                    <repositoryOwner>apache</repositoryOwner>
                    <repositoryName>incubator-wayang-website</repositoryName>
                    <branch>refs/heads/asf-site</branch>
                    <message>Creating site for ${project.version} at ${current.time}</message>
                    <outputDirectory>${project.build.outputDirectory}/site/website</outputDirectory>
                    <includes>
                        <include>**/*</include>
                    </includes>
                    <merge>true</merge>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>site</goal>
                        </goals>
                        <phase>site</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>

    <scm>
        <url>https://github.com/apache/incubator-wayang-website</url>
        <connection>scm:git:git://github.com/apache/incubator-wayang.git</connection>
        <developerConnection>scm:git:git@github.com:apache/incubator-wayang.git</developerConnection>
      <tag>wayang-0.6.0</tag>
  </scm>


    <repositories>
        <repository>
            <id>rubygems-proxy</id>
            <name>Rubygems Proxy</name>
            <url>http://rubygems-proxy.torquebox.org/releases</url>
            <layout>default</layout>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
                <updatePolicy>never</updatePolicy>
            </snapshots>
        </repository>
    </repositories>

</project>
