#
# 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: "uIig/twxYGORS6BUbCRumLGwGhykeBygVI1BPqEOMd91tHt4GGkmkq2GufZoZnxb/d8+LO8TjzNoTcCwE2QWC74hapCOVEY7qylje1nfF2N1GJwNt5RLHIcUHvtnFCDn1F1uo8Af5wea5V8HN/w6e9vTTQRbB/5ORGKjCNFm74fsDABRRcFQQ0imhUd9sknFGVbHKzOhJA8wTzGz7TFvkJQaDw1is5p40i8g9gMDBNpJtMZ/9LGElDXqXdRQ3dH5KBcPp+oitFrl+cvR6Yx7alA8VIHwcHIIaPm0GZpJKzyUghhpYtIl1wznoXyg7rn0ynX8zE1w7YOtcEbPpDNYL8dHgNeblMGVmkfgpU34F8bENM5aUQoVVcw/x/lR45iKWJ2yuFF2gz34P4ko5vPb1CdUECqOR6paKSH3/v3uahDfNxl9xQqa7klRUcdasF55RLHv6wpFB2Zblop/BVomUMuBDX/VsBqTGFKvBe8gdrN68RB2day93D5oO1FEknvQcCjuqEiF14eV2+hEgAj6wnvfPZlfeIDDJjRA+ndXTk8dm1oK2Bz1Ns1aul7cBv37xvMy6XxrD7qelRsNCVfSY4kdfLEBD4LAj+Bg+k9Gs0jX+JjmdLaiuhu9SacrMhO/BX4aRcLNKT8PFe+5fEKHUBUqETGHjVJ1ZOX9eidsqGo="
after_failure:
  - ./gradlew rat
  - cat build/reports/rat/rat-report.txt
