#
# 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.
#
language: java
sudo: false
jdk:
- openjdk8
install: true
script: "./travis.sh"
env:
  global:
    - BUILD_SNAPSHOTS_BRANCH=develop
    - ARTIFACTORY_URL=https://mifos.jfrog.io/mifos
    - ARTIFACTORY_USER=travis-ci
    - secure: "g9WOu7V6C3mB18m8RQ78RYtQug1Neghtd1NuQ51CjUBAmBFVvOZ9U4ZHaY2OuluAwSisqSzi4Uh2/zw984dQ0LZThTKvmdTAT3SYI2Geb0ERsu2dExZyfznuF+OQ5JR4zjibr4PKzTW3UIJh5GC0M9LWh4Hm3Ut9HnDW8JxdzIeJpQj7MRCX7BCDq2OkP/1WLoVFxBFjIaRk9TpvvEv+BLmQ6s1YS4z5tTckdgvgu98lP6h5PKL/Bk8a+/ZUllMoACvuaRV/Hanhq4K0K2j0o6CFLcopkWTyEFjP3l9BHS0ctEUJeW1iZC+4cSeQSIEtVt5fqiTk+dDTINw+5J1gsN+2V+V1TNsmR/B0JC/cvWK6q4R5cDgAyZDg8rraovDP6XnM4mD3KotRVTdP6622Gr9kIQD0OOMNhkGJvtRIwHvniVUkNGDVEANrzGn107hvKBikGgptDJC8q/ILYv+Wc64d8wBThZY0d8kVgbMgq4jQuaBkuINnaqlcMH4dBrdtOJ23Km+ce61K/lnQkEaNRt28PvF5W1g7baccDXSkHIz+xS11JdRVuVwr42VMIqvtXnLVFWvuHSnkwB/7JwFc0dtn5uYEOiCZR7yS5qOr8Pfcv+LPitmwEhfe6Na4ePxzGi+03e/Tp0iI1bWSbmSLqqchvwq7qVgK3r9DxZOVnhQ="
