#
# 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: ruby
rvm:
- 2.6.3
before_script:
- chmod +x ./script/cibuild
install: bundle install
script: "./script/cibuild"
branches:
  only:
  - develop
  - main
addons:
  apt:
    packages:
    - libcurl4-openssl-dev
cache: bundler
notifications:
  email: false
env:
  global:
    secure: GqzCosWAev40ym9KPKGwGljdrDkVBcjh/+p39XrhaR2wTnstC7ygcVLFj4TSH8Wtt1zrawJSFNrqid62OQirsnYwx9DE2FB1hDApkv3Z9uxLj4Fg4npGQe6EnyVPev9bvxv2wLQgi8sxbabW2eOpYBuSXCV/Lsyikv8aKyCBKtTKiYYUgfLiB+CfLcIUm7LoHznBcOfv9J8VCvGsWCuNmgszRiVdbGy0CFcw4qAmw9p7iApiszlAvSuF1tvAaXxITK3nFfZZOCx6GlFnY8/lSn3k6wKqGsfD60Bmgk3eBwtM5iiltK1O7I1vOLXGNEQkfFsemDWI5GkVAcUSr1BnMFDYS5Cvw1BNbc4xHAmtovTWUzokKep0EuhRiuFFVnEHXqPTApEs+VZvhAwGTiafAymKGo6INGtHG5yBsvLZMADk0VpTRG3TDXFHQMTsFjCZ3IYLcKYoOmLYBOcS4Rk4HQLvQdVwivTtzuovMQqvrkIAQI78qfru6iOI6npihyTxa4JtLejSmE+/+LTfb5oj99d6dUFm0WJxdrqv/db5ziLZR3uXcjEb3CRrWfRMdCrPfJ3R0uJcWSI4bX4RPAz9t+5+QGS9JlecJR4VqqW6R6/tTXiTDTVIixKyvQ5Why25PF+P5vE8iKsJhqokupK/bt3KIG2W1GzI31pXF0JQgYQ=
