<?xml version="1.0"?>
<!--
 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.
-->

<settings>
<profiles>
    <profile>
      <id>cloudbees-build-parameters</id>
      <properties>
        <rest.it.forkCount>1</rest.it.forkCount>
        <rest.it.heapmax>256m</rest.it.heapmax>
        <rest.it.heapmin>256m</rest.it.heapmin>

        <core.it.forkCount>1</core.it.forkCount>
        <core.it.heapmax>384m</core.it.heapmax>
        <core.it.heapmin>384m</core.it.heapmin>

        <services.it.forkCount>1</services.it.forkCount>
        <services.it.heapmax>384m</services.it.heapmax>
        <services.it.heapmin>384m</services.it.heapmin>

        <scheduler.it.forkCount>1</scheduler.it.forkCount>
        <scheduler.it.heapmax>384m</scheduler.it.heapmax>
        <scheduler.it.heapmin>384m</scheduler.it.heapmin>
      </properties>
    </profile>
</profiles>

<activeProfiles>
  <activeProfile>cloudbees-build-parameters</activeProfile>
</activeProfiles>
</settings>

