# Copyright 2016 Google Inc. All Rights Reserved.
#
# Licensed 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.


# Provides default values used as metadata when constructing various packages.

author: Google Inc
email: googleapis-packages@google.com
homepage: https://github.com/googleapis/googleapis
license: Apache-2.0
release_level:
  python: alpha
  java: alpha
  ruby: alpha
  nodejs: alpha
generated_package_version:
  # TODO: Python must go to 1.0.20 or 1.1.0 when we GA, due to mistakenly
  #       publishing some 1.0.x versions to pypi already. They are now
  #       deleted but files still exist on the pypi servers and can prevent
  #       us from using the version number again.
  python:
    lower: '0.15.4'
    upper: '0.16dev'
  nodejs:
    lower: '0.7.1'
  php:
    lower: '0.1.0'
  ruby:
    lower: '0.6.8'
  java:
    lower: '0.1.21'

generated_ga_package_version:
  java:
    lower: '1.0.0'
