#
# 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: "pBilHkQXEbjH9CrtGQ4lwDEWEfk89kDFvGTKTWya4y0riQ/czOCbt+4pQ3NNHqVNMvsPQgtuh0ABIaVV1Ksc6FM8haRD74ehCyGMp+7NTKRmm2Yp41QezvWJ4IW/T0oIquimUXAbmL/0kWDv3NhrgJQVEBOdBAxqwxeY3iwRlTVqHmUgszGlRSbfDhxqe5ydSqAhhcYh2qFdfaXoTMrRqRZn5F3UWoxz0K0Hc2u05xkMgejJuZt4fJzHpLNL92/hBPSa5TiZwJSxWBJIte+mzFG/UxqmDc70/mQUHw5U76K/xJoYrLP7N40+tpcWUYwCPX/P8uus4ZvYSDoNQ6Q7/VDLyQChHjxr2IXKJ1DLWjRRnLFmXooeIPXyEJoZWWxKNcpNBNQ69h2RezL7q4UhP9Xr0LVlBuTti8W7NCpXSqeYuuuhJERy2kPtRRhlatsTagmR9v5c0YximTbouamdHybr8aGJHVvEJyWQP5z/vvJhyBfFRbdy9vGq3PchDyfz/lBeOb21LM9l+f73CYHEjOpGh2Mx9JnGqmV/bIO/En7OB+C9muYn+Po0yYfI8DooBFjLUbVlCMcUq29/enOwQm6h42bDS+pXe2llcmsllxQm3UXJI59pNssa33sElGEBORtHkKIKgRLowAcb1Cr7Z1ShQNmta9mKvU4aZX/nFBg="
