<!--
    Copyright (c) 2009, 2019 Xored Software Inc and others.
    All rights reserved. This program and the accompanying materials
    are made available under the terms of the Eclipse Public License v1.0
    which accompanies this distribution, and is available at
    http://www.eclipse.org/legal/epl-v10.html
     
    Contributors:
    	Xored Software Inc - initial API and implementation and/or initial documentation
 -->
<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>

	<artifactId>server-mars</artifactId>
	<packaging>rcpttTest</packaging>

	<properties>
		<q7Server>http://192.168.2.64:8902</q7Server>
		<clientId>komaz</clientId>
		<clientSecret>05fe7461c607c33229772d402505601016a7d0ea</clientSecret>
		<organization>xored</organization>
	</properties>

	<parent>
		<groupId>org.eclipse.rcptt.tests</groupId>
		<artifactId>base</artifactId>
		<version>2.4.2-SNAPSHOT</version>
		<relativePath>./pom-base.xml</relativePath>
	</parent>

	<build>
		<plugins>
			<plugin>
				<groupId>${ci-maven-group}</groupId>
				<artifactId>${ci-server-maven-plugin}</artifactId>
				<version>${ci-maven-version}</version>
				<extensions>true</extensions>
				<configuration>
					<classifiers>
						<classifier>win32.win32.x86</classifier>
						<!-- <classifier>linux.gtk.x86</classifier> -->
					</classifiers>
					<aut>
						<uri>${autURL}</uri>
						<ignoreOtherInjections>true</ignoreOtherInjections>
						<injections>
							<injection>
								<site>${runtimeRepository}</site>
							</injection>
						</injections>
					</aut>
					<q7server>${q7Server}</q7server>
					<q7client>
						<version>${q7-cloud-version}</version>
						<clientId>${clientId}</clientId>
						<clientSecret>${clientSecret}</clientSecret>
						<organization>${organization}</organization>
					</q7client>
					<testOptions>
						<execTimeout>7200</execTimeout>
						<autStartupTimeout>300</autStartupTimeout>
						<launchingKillAutOnConnectError>true</launchingKillAutOnConnectError>
					</testOptions>

					<skipTags>
						<skipTag>skipExecution</skipTag>
					</skipTags>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<pluginRepositories>
		<pluginRepository>
			<snapshots>
				<updatePolicy>always</updatePolicy>
			</snapshots>
			<id>xored</id>
			<name>Xored Maven repository</name>
			<url>http://maven.xored.com/nexus/content/repositories/ci4rcptt-snapshots/</url>
		</pluginRepository>
		<pluginRepository>
			<id>xored-releases</id>
			<name>Xored Maven repository</name>
			<url>http://maven.xored.com/nexus/content/repositories/ci4rcptt-releases/</url>
		</pluginRepository>
	</pluginRepositories>

	<repositories>
		<repository>
			<id>xored</id>
			<name>Xored Maven repository</name>
			<url>http://maven.xored.com/nexus/content/repositories/releases/</url>
		</repository>
		<repository>
			<id>thirdparty</id>
			<name>Maven repo with eclipses</name>
			<url>http://maven.xored.com/nexus/content/repositories/thirdparty/</url>
		</repository>

	</repositories>
</project>
